БПФ на основе спектра в частотной области

У меня есть функция, и я хочу построить базу БПФ на частотной области.

t=0:0.01:60;

y = sin(2*pi*0.33*t)+sin(2*pi*0.23*t)+sin(2*pi*0.1*t);

Как видите, пик должен быть на частотах 0,1, 0,2, 0,33, но когда я пытаюсь изобразить его, пики находятся не в этих точках.

Я пробовал FFT, DFT, но ни один из них не работал так, как я хотел. Кроме того, я хочу, чтобы их пики FFT были равны 1 на этих частотах.

Есть предположения?


person Cena    schedule 05.05.2014    source источник
comment
1) А где они? Взгляните на страницу руководства по БПФ: mathworks.it/it/help/ matlab/ref/fft.html. Первый пример делает именно то, что вам нужно. 2) Тогда это не БПФ, просто (например) установите порог и замените все выше на 1, а все ниже на 0, используя lt(y, tv) с tv другим вектором той же длины.   -  person Adriano Repetti    schedule 05.05.2014


Ответы (1)


Если Fs — частота дискретизации (слышите 100 Гц), то частотные элементы имеют длину (t)/Fs Гц. Так как вы хотите, чтобы ваши бины были разнесены на 100 Гц, вам нужен более длинный сигнал. Попробуй это

Fs=100; %sample rate
t=0:1/Fs:(100-1/Fs);  %10,000 samples long
F=[0:length(t)-1]/length(t)*Fs; %where the bins are
y = sin(2*pi*0.33*t)+sin(2*pi*0.23*t)+sin(2*pi*0.1*t); 
Y=abs(fft(y))/(length(y)/2);  %normalize by the signal length
figure(1);
plot(F,Y)
xlim([0 1]); %zoom in to the part of interest
person Joe Serrano    schedule 05.05.2014