零填充-开窗之前还是之后?

时间:2018-11-11 16:24:59

标签: signal-processing fft speech

我正在尝试对语音信号执行 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

2 个答案:

答案 0 :(得分:0)

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

  1. 将信号划分为帧,请参见黄油功能;
  2. 对每个框架应用一个窗口:框架x窗口;
  3. 对信号进行零填充;
  4. 对每个加窗帧进行FFT。

P.S。我已经读到某处FFT算法已经自动进行了零填充,即当您进入FFT(x)时,它已经将信号x末尾“填充”为零,以达到FFT的长度。

答案 1 :(得分:-1)

您在窗口化后将窗口内的填充框归零,以使窗口长度为2的幂。