汉宁窗和在线FFT

3
我正在学习DSP,但我无法编写代码来计算和绘制这些图形(汉宁窗和三角形窗的幅度谱)。请问有人能帮我编写代码吗? window frequency plots 我已经阅读了一些关于在线FFT的内容,例如他们使用1024个时间步长进行在线FFT计算。我不明白什么是1024个时间步长,以及时间步长值对FFT分析有哪些影响?

2
有些人认为更正确的称呼应该是汉宁窗口。 - hotpaw2
3个回答

4
我希望以下的代码对你有所帮助。
L = 10;
win1 = hanning(L);
win2 = triang(L);
nfft = 64;
S1 = fft(win1,nfft);
S2 = fft(win2,nfft);
f = 1:nfft/2+1;
plot(f,10*log10(abs(S1(1:nfft/2+1))),'.-',f,10*log10(abs(S2(1:nfft/2+1))),'o-');

注解:

您可以将 win1win2 视为时间序列信号。 Lwin1win2 的长度。 nfft 是FFT的长度。如果 L < nfft,则函数 fft() 将在其余的 nfft 中添加 0。如果 L > nfft,则函数 fft() 将截取长度为 L 以等于 nfft


1

关于您问题中的1024“时间步”,那只是从时间域信号中取样的样本数。

至于1024个时间域样本如何影响FFT,这涉及到获取样本所使用的采样频率。

通常选择的采样频率符合奈奎斯特-香农采样定理,该定理基本上表明,如果您想通过FFT分辨率频率“F”,则必须以比“2F”更高的频率对时间域信号进行采样。

至于Hann(Hanning)和三角窗口代码,它们如下:

Hann window:
for( i=0; i<bufLen; i++ )
   window[i] = 0.5 * ( 1 - cos( 2 * PI * i / (bufLen-1) ) )

Triangular window:
for( i=0; i<bufLen; i++ )
   window[i] = 2/bufLen * ( (bufLen)/2 - abs( i-((bufLen-1)/2) ) )

...

下面的图表是三角窗口的频率响应,以dB幅度表示。

Triangular Window Function dB magnitude

以下是三角窗口的频率响应图,但现在以线性幅度表示。

Triangular Window Function linear magnitude

你可以在这里绘制汉宁、三角形和许多其他窗口函数:绘制窗口函数

1
时间步长或样本的频率(Fs)除以馈送FFT的时间步数(FFT长度),可以给出FFT结果箱的频率步长(最高为Fs/2)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接