我正在学习DSP,我无法编写代码来计算和绘制这些数字(只是汉宁和频域中的三角形窗口的大小。)任何人都可以帮助我的代码?Hanning窗口和在线FFT
我读过有关网上FFT的东西,并且,例如,他们计算与1024的时间步长在线FFT。我不明白什么是1024个时间步,什么是时间步长值对FFT分析的影响?
我正在学习DSP,我无法编写代码来计算和绘制这些数字(只是汉宁和频域中的三角形窗口的大小。)任何人都可以帮助我的代码?Hanning窗口和在线FFT
我读过有关网上FFT的东西,并且,例如,他们计算与1024的时间步长在线FFT。我不明白什么是1024个时间步,什么是时间步长值对FFT分析的影响?
我希望以下代码对您有所帮助。
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-');
译注:
你可以把win1
和win2
为时间序列信号。 L
是win1
或win2
的长度。 nfft
是FFT的长度。如果L < nfft
,则函数fft()
将向nfft
的其余部分添加0
。如果L > nfft
,则功能fft()
将截取L
的长度等于nfft
。
时间步长或采样的频率(Fs)除以馈送FFT的时间步长数(FFT长度),给出FFT结果仓的频率步长(最高为Fs/2)。
关于您的问题中的1024个“时间步长”,这只是从时域信号中取样的数量。
至于1024个时域采样如何影响FFT,这涉及用于获取采样的采样频率。
采样频率通常选择为符合奈奎斯特 - 香农采样定理,该定理基本上规定,如果要通过频率“F”解析频率“F”,则必须采样频率高于“2F”的时域信号FFT。
对于汉恩(汉宁)和三角窗的代码,它们如下:
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幅值。
下面的曲线是三角窗口的频率响应,但现在在线性幅度。
你可以在这里绘制汉恩,三角等众多窗口功能:Plot windows functions
有些人认为它更正确的称这是一个冯翰窗口。 – hotpaw2