Код FFT MATLAB правильный? - PullRequest
       10

Код FFT MATLAB правильный?

0 голосов
/ 27 марта 2012

Я бы хотел сгенерировать частотный спектр семи каскадных косинусных функций.

Я не уверен, правильный ли мой код; в частности, является ли N = время * частота * 7 правильным или должно быть N = время * частота (без учета времен семь).

Мой код выглядит следующим образом:

sn = [1, 2, 3, 4, 5, 6, 7, 8];
time = 1;
freq = 22050;
N = time*freq*7;
dt = 1/freq;

t = 0 : dt : time - dt;

y = @(sn, phasePosNeg) cos(2*pi*(1200-100*sn) * t + phasePosNeg * sn*pi/10);

f = [y(sn(1), 1), y(sn(2), -1), y(sn(3), 1), y(sn(4), -1), y(sn(5), 1), y(sn(6), -1), y(sn(7), 1)];
F = abs(fftshift(fft(f)))/N;

df = freq/N;
faxis = -freq/2 : df : (freq/2-1/freq);

plot(faxis, F);
grid on;
axis([-1500, 1500, 0, 0.6]);
title('Frequency Spectrum Of Concatenated Cosine Functions');
xlabel('Frequency (Hz)');
ylabel('Magnitude');

Полагаю, суть моего вопроса такова: Должна ли высота шипов быть равна 1/7 от 0,5 или просто 0,5? (Все функции косинуса имеют амплитуду 1).

Спасибо.

Ответы [ 2 ]

0 голосов
/ 27 марта 2012

Позвольте мне исправить / помочь вам в нескольких вещах:

1) преобразование Фурье обычно отображается в дБ для его величины. 20 * log base10 (FFT coeff) 2) нет необходимости делить амплитуды БПФ на любое значение N.

F = abs(fftshift(fft(f)))/N; %get rid of the N or N =1

3) если N - количество очков в вашем БПФ, N = размер (т); потому что вы взяли столько образцов функций sin / cos

4) При построении функции помните, что БПФ охватывает диапазон от -Pi до + Pi, и вам необходимо переназначить его на частотный спектр, используя частоту дискретизации

5) из-за больших фазовых разрывов между этими функциями не ожидайте, что преобразование forrier будет группой больших узких пиков. (в противном случае фазовая модуляция была бы предпочтительной схемой модуляции ... нулевая полоса пропускания)

0 голосов
/ 27 марта 2012

Это явно домашнее задание, поэтому я просто собираюсь дать некоторое направление:
В каскадном случае представьте, что вы добавляете шесть сигналов, каждый из которых дополняется нулями (в 6 раз больше). сигнала), а затем сместить их, чтобы они не перекрывались, а затем сложить вместе, чтобы сформировать каскадный сигнал. В случае, когда вы добавляете БПФ отдельных сигналов, также помните, что вы предполагаете, что они являются периодическими. Таким образом, вам нужно обработать нулевое заполнение, чтобы сравнивать яблоки с яблоками. Одна проверка, конечно, состоит в том, чтобы просто использовать одну форму сигнала и убедиться, что она работает в этом случае (и это должно вернуть точно такой же результат, поскольку БПФ предполагает, что форма волны периодическая, то есть бесконечно сцепленная с самим собой).

Думая об этом в терминах Теорема Парсеваля , вероятно, поможет выяснить, как интерпретировать и нормализовать вещи.

Правильно использовать N=(7*time)*freq, поскольку ваше фактическое время сигнала составляет 7*time, независимо от того, как вы его построили.

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

...