Дискретное преобразование Фурье: Методические указания к лабораторной работе № 7 по курсу "Обработка сигналов и изображений", страница 4

Основой практической реализации спектрального анализа Фурье является алго­ритм быстрого дискретного преобразования Фурье — БПФ. Он реализован особым пирамидальным алгоритмом, и в нем используется процедура прореживания по частоте. Это исключает многочисленные повторы в вычислениях функций синуса и косинуса и устраняет избыточность спектров.

Алгоритм БПФ, в пакете Matlab, реализован функцией

Y = fft(Х,n).

Функция Y = fft(Х) вычисляет для массива данных Х дискретное преоб­разование Фурье, используя FFT-aлгоритм быстрого Фурье-преобра­зования. Если массив X двумерный, вычисляется дискретное преобразова­ние каждого столбца.

Функция Y = fft(X, n) вычисляет n точечное дискретное преобразование Фурье. Если length(X) < n, то недостающие строки массива X заполняются нулями: если length(X) > n то лишние строки удаляются.

Основное назначение преобразования Фурье - выделить частоты регулярных составляющих сигнала, зашумленного помехами. С ее помощью по известному вектору сигнала х(k) вычисляется вектор:

,

где N=lengh (Х) — длина вектора исходных данных. Если N есть степень числа 2, то используется высокоэффективный алгоритм БПФ для вещественных или комплек­сных данных. Время вычислений для комплексных данных примерно на 40—50 % больше, чем для действительных. Если N является простым числом, выполняется алгоритм дискретного преобразования Фурье — ДПФ — по приведенной выше формуле. Если N < nто недостающие элементы массивах дополняются нулями.

Прямое БПФ переводит представление сигнала из временной области в час­тотную область. Проиллюстрирует это, для чего рассмотрим следующий пример:

Пусть входной дискретный сигнал поступает с частотой 1000 Гц. Сформируем сигнал, содержащий регулярные составляющие с частотами 50 и 130 Гц с случайную аддитивную компоненту с нулевым средним

t = 0:0.001:1; % Вектор времени

х = sin (2*pi*50*t) +sin (2*pi*130*t); % Вектор входного сигнала

y=x+2*randn(size(t));% Сумма сигнала и помехи

plot(y(1:50)),grid

На рис.6 показан этот сигнал. Глядя на него трудно сказать, каковы частоты его регулярных составляющих. Реализуя одномерное преобразование Фурье этого сигнала на основе 512 точек и построив график спектральной плотности (рис.7), можно выделить две частоты, на которых амплитуда спектра максимальна. Это частоты 130 Гц и 50 Гц.

Y=fft(x,512); % Вектор ДПФ сигнала

F=Y.*conj(Y)/512;

f=1000*(0:255)/512;

figure(2),plot(f,F(1:256)),grid

Результаты расчета частотных составляющих входного сигнала представлены на рис.7.

Этот пример показывает задание вектора временной зависимости сигнала, представленного суммой двух синусоид с частотами 50 и 130 Гц и аддитивной помехой. При необходимости отобразить АЧС и ФЧС поступают следующим образом. Исключают помеху и производят следующие вычисления:

m = abs(Y); p = unwrap(angle(Y));% Векторы амплитуд и фаз

f=1000*(0:255)/512;% Вектор частот

figure(2),plot(f,m(1:256)),grid %Графики AЧХ


figure(3),plot(f,p(1:256)*180/pi),grid %ГрафикФЧХ

Результаты расчета представлены на рис. 7 (АЧХ) и 8 (ФЧХ).

При выполнении прямого БПФ спектральные компоненты, близкие к нуле­вой частоте, группируются по краям спектрограммы, например, рис. 7. Функция

у = fftshift(x)

обеспечивает перегруппировку элементов выходного массива преобразования Фу­рье таким образом, что эти компоненты оказываются в центре графика, т.е. перегруппировывает выходные массивы функций fft и fft2, размещая нулевую частоту в центре спектра.

Это ил­люстрирует следующий пример:

Y=fftschift(fft(x,512)); % Вектор ДПФ сигнала

Рис.9 показывает АЧС исследуемого колебания для этого примера. Сравнив рис. 9 с рис. 7 нетрудно заметить, что нулевая частота здесь соответствует центру гра­фика.

Все сказанное об алгоритме БПФ относится и к обратному преобразованию, которое реализуется функцией у = ifft (х [, n]). Для проверки функций fft и ifft можно использовать следующий пример:

» х=[1 2  3 4];

 >> X=fft(x)

X =

10.0000    -2.0000+2.0000i    -2.0000      -2.0000-2.0000i

>> x=ifft(X)

1           2             3       4