MATLAB2018 实现短时傅里叶变换程序 不使用MATLAB自带函数
时间: 2024-05-07 11:23:26 浏览: 160
短时傅里叶变换的matlab 程序
3星 · 编辑精心推荐
短时傅里叶变换(Short-time Fourier transform, STFT)是一种在时间和频率上同时分析信号的方法。它将信号分成若干个时间窗口,对每个窗口进行傅里叶变换,得到一个时间-频率图。MATLAB自带函数stft可以实现短时傅里叶变换,但是我们也可以自己编写代码实现。
以下是一个MATLAB2018实现STFT的程序:
```matlab
function [S, f, t] = mySTFT(x, w, Nfft, Nwin, Nhop, fs)
% x: 输入信号
% w: 窗函数
% Nfft: FFT点数
% Nwin: 窗长
% Nhop: 帧移
% fs: 采样率
% 确定帧数
Lx = length(x);
Nframes = ceil((Lx-Nwin)/Nhop)+1;
x = [x zeros(1,Nwin-1)]; % 0填充
% 初始化输出
S = zeros(Nfft, Nframes);
t = (0:Nframes-1)*Nhop/fs;
f = (0:Nfft-1)*fs/Nfft;
% 循环计算
for ii = 1:Nframes
idx = (ii-1)*Nhop+1;
x_frame = x(idx:idx+Nwin-1).*w; % 加窗
X = fft(x_frame, Nfft);
S(:,ii) = abs(X);
end
% 取一半(单边频谱)
S = S(1:Nfft/2+1,:);
f = f(1:Nfft/2+1);
end
```
其中,输入参数x为原始信号,w为窗函数(如汉宁窗),Nfft为FFT点数,Nwin为窗长,Nhop为帧移,fs为采样率。输出参数S为时频矩阵,f为频率向量,t为时间向量。
该程序首先确定帧数,然后进行0填充。接着使用循环计算每帧的短时傅里叶变换,并将结果存储在时频矩阵中。最后取一半,得到单边频谱。
阅读全文