我正在尝试对语音信号执行 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
答案 0 :(得分:0)
必须在FFT之前执行此操作。
P.S。我已经读到某处FFT算法已经自动进行了零填充,即当您进入FFT(x)时,它已经将信号x末尾“填充”为零,以达到FFT的长度。
答案 1 :(得分:-1)
您在窗口化后将窗口内的填充框归零,以使窗口长度为2的幂。