首页 > 解决方案 > 零填充 - 在窗口之前还是之后?

问题描述

我正在尝试对语音信号执行STFT 。我想知道我应该什么时候做零填充,在每帧窗口之前,还是之后?

我的尝试:

x    = signal(:);                   % make sure signal is a column vector
sL   = length(x);                   % signal length
wL   = fix(window_Time*fs);         % window length
HOP  = floor(wL*(1 - overlap/100)); % windowing step 
win  = gausswin(wL);                % window type
F    = 1 + fix((sL-wL)/HOP);        % calculate the number of signal     frames
stft = zeros(nfft,F);               % preallocate stft matrix, [nfftxF]

for f = 0:F-1
    xw          = x(1+f*HOP:wL+f*HOP).*win; % windowing
    X           = fftshift(fft([xw;zeros(wL,1)],nfft));   % FFT shifted (double-sided)
    stft(:,1+f) = X;                        % update of the stft matrix
end

标签: signal-processingfftspeech

解决方案


您必须在 FFT 之前执行此操作。

  1. 将信号分帧,见butter函数;
  2. 对每个框架应用一个窗口:框架 x 窗口;
  3. 对信号进行零填充;
  4. FFT 每个窗口帧。

PS我在某处读到FFT算法已经自动补零,即,当你到FFT(x)时,它已经在最后用零“填充”信号x,以达到FFT的长度.


推荐阅读