signal-processing - 零填充 - 在窗口之前还是之后?
问题描述
我正在尝试对语音信号执行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
解决方案
您必须在 FFT 之前执行此操作。
- 将信号分帧,见butter函数;
- 对每个框架应用一个窗口:框架 x 窗口;
- 对信号进行零填充;
- FFT 每个窗口帧。
PS我在某处读到FFT算法已经自动补零,即,当你到FFT(x)时,它已经在最后用零“填充”信号x,以达到FFT的长度.
推荐阅读
- python - 无法导入实现 Flask CLI 的应用程序模块
- git - 我如何回到原来的 git bash UI 现在被 cmd (黑色界面)取代?
- docker - Docker Swarm - 更新时无法从私有注册表中提取,仅适用于初始 DEPLOY
- azure - 将 Azure Active Directory 权限分配给启用 MSI 的 Azure 功能的权限不足?
- ios - iOS 自定义 Touch ID 失败?
- jenkins - 在 Jenkins 管道中生成完整的 kotlintest 报告?
- json - 如何在laravel中显示json
- amazon-web-services - 光纤安装失败。Meteor MUP 部署准备包:失败
- excel - 在 Excel 中复制数据时出现 1004 错误
- database - 如何从第一种形式的选定行中过滤另一种形式的表格?