如何应用汉明窗?

信息处理 fft matlab 离散信号 平滑 窗函数
2022-02-12 03:38:19

我是matlab和信号处理的新手。已经使用的时间序列是从建筑物中的加速度计获得的。据我了解,时间序列的长度和窗口函数长度(汉明或汉宁)应该相同。但是为了平滑傅立叶幅度谱,最佳窗口长度可以变化。这个过程应该如何在matlab中应用?

如何应用比我的时间序列短的窗口函数。

谢谢阅读!

2个回答

正如 Jim 所说,除非您一次对整个数据集进行 FFT,而不将数据拆分为较短的帧,否则您很可能会使用数据集的长度。下面显示了一个简单的示例。

Ts = 50e-6;                  % Sampling Time(s)
Fs = 1/Ts;                   % Sampling rate, Sampling Freq (Hz)
f0 = 50;                     % Frequency of interest (Hz)
duraT = 1;

%Calculate time axis
dt = 1/Fs;
tAxis = dt:dt:(duraT-dt);

y = cos(2*pi*f0*tAxis) +  2*sin(2*pi*10*tAxis);   y=y';

L = length (y); % Window Length of FFT    
nfft = 2^nextpow2(L); % Transform length

y_HannWnd = y.*hanning(L);            
Ydft_HannWnd = fft(y_HannWnd,nfft)/L;

   % at all frequencies except zero and the Nyquist
   mYdft = abs(Ydft_HannWnd);
   mYdft = mYdft (1:nfft/2+1);
   mYdft (2:end-1) = 2* mYdft(2:end-1);

f = Fs/2*linspace(0,1,nfft/2+1); 

  figure(1),
  subplot(2,1,1)
  plot(tAxis,y)
  title('Time Domain y(t)');
  xlabel('Time,s'); 
  ylabel('y');
  subplot(2,1,2)  
  plot(f,2*mYdft); % why need *2 ? Bcoz, Hanning Wnd Amplitude Correction Factor = 2
  axis ([0 500 0 5]); %Zoom in 
  title('Amplitude Spectrum with Hann Wnd');
  xlabel('Frequency (Hz)with hanning window'); 
  ylabel('|Y(f)|');

窗口长度应等于您的变换长度,不一定等于整个数据集的长度。当然,如果您要一次转换整个数据集,这两者是相同的,但是如果您打算进行较短的转换,那么您应该使窗口长度等于这些转换的长度。