Question on use of fft and using positive frequency values only

20 次查看(过去 30 天)
I have two outputs of an carried out fft from filtered signal. I now that there is only a 770 Hz sin signal left in x_filtered, sample frequency fs is 48000.
fft_xf_shift = fftshift(fft(x_filtered,fs));
m_sh = abs(fft_xf_shift);
Seems to me that fft gives out a double sided frequency spectrum. With fftshift I zero-center the spectrum. Next I calculate the absolute values and then save in m_pos only the positive values because the negative frequency values are of no intereset in this case.
Next I plot the 20*log10 magnitude over frequency:
m_pos = m_sh(fs/2+1:fs);
f=0:1:fs/2-1;
figure;
plot(f,20*log10(m_pos/max(m_pos)))
The plot give the correct magnitude at 770 Hz. Even if I have the highest magnitude reading at 770 Hz in the final plot, when I plot m_pos, which is the right snipped of the fft_shifted value, the highest reading is at 771 Hz or at position 771 of the vector.
I certainly have a misconception here. Can you help me? Thank you.

采纳的回答

Paul
Paul 2022-6-2
编辑:Paul 2022-6-2
Is this just an indexing question? If I understand the code snippet correctly, the frequency vector starts at 0, and incremented by 1, so f(771) = 770. So the peak would also be at m_pos(771), corresponding to 770 Hz.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Fourier Analysis and Filtering 的更多信息

标签

产品


版本

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by