汉宁窗口和在线FFT

时间:2012-08-26 01:21:26

标签: matlab signal-processing fft

我正在学习DSP,我无法编写代码来计算和绘制这些数字(只是Hanning和三维窗口在频域中的大小。)有谁可以帮我解释代码?

window frequency plots

我已经阅读了与在线FFT相关的内容,例如,他们通过1024个时间步长计算在线FFT。我不明白什么是1024个时间步,以及时间步长值对FFT分析的影响是什么?

3 个答案:

答案 0 :(得分: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()会将0添加到nfft的其余部分。如果L > nfft,则函数fft()会截取L的长度,使其等于nfft

答案 1 :(得分:1)

时间步长或采样(Fs)的频率除以FFT输入的时间步数(FFT长度),为您提供FFT结果箱的频率步长(最高为Fs / 2)。 / p>

答案 2 :(得分:1)

关于问题中的1024个“时间步长”,这就是从时域信号中取出的样本数。

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

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

Hann(Hanning)和Triangular窗口代码如下:

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

您可以在此处绘制Hann,Triangular和许多其他窗口函数:Plot windows functions