Примеры спектрального анализа

Входной сигнал представим в виде вектора, элементы которого равны значениям функции, являющейся суммой двух синусоид с частотами 5 и 12 Гц. Найти Фурье-изображение этого сигнала и вывести графики входного процесса и модуля его Фурье-изображения:

>> t=0:0.001:2;

>> x=sin(2*pi*5*t)+cos(2*pi*12*t);

>> plot(t,x),grid;

>> title('input');

>> xlabel('t, c');

>> ylabel('X(t)')

 

>> y=fft(x);

>> a=abs(y);

>> plot(a);grid;

>> title('fourier');

>> xlabel('number');

>> ylabel('absF(X(t))')

Теперь осуществим обратное преобразование с помощью функции ifft:

>> z=ifft(y);

>> plot(t,z), grid;

>> title('inverse');xlabel('number');

>> xlabel('t, c');

>> ylabel('Z(t))')

Как следует из последнего рисунка, воспроизведенный процесс в точности совпадает с исходным.

Из выражений (4) можно заметить:

- номер m соответствует моменту времени tm , в который измерен входной сигнал x(m);

- номер k – это индекс значения частоты fk, которому соответствует найденный элемент y(k) дискретного преобразования Фурье;

- для перехода от индексов к временной и частотной областям, необходимо знать значение шага h дискрета времени, через который измерен входной сигнал x(t), и промежуток T времени, на протяжении которого он измерен; тогда дискрет по частоте в изображении Фурье определяется выражением

Df=1/T,

а диапазон изменения частоты – выражением

F=1/h.

Так в нашем примере Df=0.5, F= 1000.

- Фурье - изображение определяется функцией fft только для положительных частот в диапазоне от 0 до F, что неудобно для построения графиков Фурье – изображения от частоты; более удобным является переход к вектору Фурье – изображения, определенному в диапазоне частот [-F/2 - F/2].

Сформируем для данного примера массив частот и выведем график с аргументом частотой

>> f=0:0.5:1000;

>> plot(f,a)'grid;

>> plot(f,a);grid;

>> title('F(x)');xlabel('friquency, Hz');

>> ylabel('abs(F(X))')

На рисунке трудно различить частоты (5 и 12 Гц), с которыми колеблется входной сигнал.

Для установления истинного спектра входного сигнала необходимо вначале преобразовать полученный вектор y Фурье – изображения с помощью процедуры fftshift. Она предназначена для формирования нового вектора z из заданного у путем перестановки второй половины вектора у в первую половину вектора z

>> f1=-500:0.5:500;

>> v=fftshift(y);

>> a=abs(v);

>> plot(f1(970:1030),a(970:1030));grid;

>> title('F/N');

>> xlabel('friquency, Hz');

>> ylabel('abs(F(X))/N')

Из графика видно, что в спектре входного сигнала есть две гармоники- 5 и 12 Гц.

Неудобным является то, что по графику невозможно определить амплитуду этих гармоник. Чтобы сделать это, необходимо весь вектор y разделить на число его элементов N:

>> N=length(y);

>> a=abs(v)/N;

>> plot(f1(970:1030),a(970:1030));grid;

>> title('F/N');

>> xlabel('friquency, Hz');

>> ylabel('abs(F(X))/N')

Задание на самостоятельную работу