数字信号处理(3)- 短时频域分析

   日期:2021-01-25     浏览:117    评论:0    
核心提示:短时频域分析短时傅里叶变换MATLAB程序运行结果短时傅里叶变换设时域信号为x(l),分帧加窗处理后得到的第n帧信号为xn(m),则xn(m)满足下式:其中N是每一帧信号的长度,n是帧序号,m是一帧中数据的序号。时域信号x(l)的离散短时傅里叶变换为:其中k是谱线号。当N是2的整数倍时,这个离散短时傅里叶变换可以使用FFT来计算。MATLAB程序MATLAB程序演示信号分帧、加窗、求离散短时傅里叶变换,并最终使用三维图展示结果。其中打开的test.wav文件是一个8kHz采样率的音频文

短时频域分析

  • 短时傅里叶变换
  • MATLAB程序
  • 运行结果

短时傅里叶变换

设时域信号为x(l)分帧加窗处理后得到的第n帧信号为xn(m),则xn(m)满足下式:

其中N是每一帧信号的长度,n是帧序号,m是一帧中数据的序号。

时域信号x(l)离散短时傅里叶变换为:

其中k是谱线号。

N是2的整数倍时,这个离散短时傅里叶变换可以使用FFT来计算。

MATLAB程序

MATLAB程序演示信号分帧、加窗、求离散短时傅里叶变换,并最终使用三维图展示结果。

其中打开的test.wav文件是一个8kHz采样率的音频文件,这个文件可以自由录制得到。

clc
clear
close all

[x,fs]=audioread('test.wav');% 读入数据文件
t=(1:length(x))/fs;

wlen=256;           % 帧长
inc=128;            % 帧移
win=hanning(wlen);  % 窗函数
nfft=wlen;          % 短时DFT的点数

y=STFFT(x,win,nfft,inc);% 求短时傅里叶变换
fn=size(y,2);% 帧数 = y的列数

freq=(0:wlen/2)*fs/wlen;% 计算FFT后的频率刻度
frameTime=(((1:fn)-1)*inc+wlen/2)/fs;% 分帧后计算每帧对应的时间


figure;
plot(t,x);
xlabel('时间/s');ylabel('幅度');
title('原始时域信号');

figure;
surf(frameTime,freq,abs(y));
colormap(jet);
xlabel('时间/s');ylabel('频率/Hz');
title('时频三维图');

function d=STFFT(x,win,nfft,inc)
xn=enframe(x,win,inc)';
y=fft(xn,nfft);
d=y(1:(1+nfft/2),:);
end
 
function frameout=enframe(x,win,inc)
 
nx=length(x(:));            % 取数据长度
nwin=length(win);           % 取窗长
if (nwin == 1)              % 判断窗长是否为1,若为1,即表示没有设窗函数
   len = win;               % 是,帧长=win
else
   len = nwin;              % 否,帧长=窗长
end
if (nargin < 3)             % 如果只有两个参数,设帧inc=帧长
   inc = len;
end
nf = fix((nx-len+inc)/inc); % 计算帧数
frameout=zeros(nf,len);     % 初始化
indf= inc*(0:(nf-1)).';     % 设置每帧在x中的位移量位置
inds = (1:len);             % 每帧数据对应1:len
frameout(:) = x(indf(:,ones(1,len))+inds(ones(nf,1),:));   % 对数据分帧
if (nwin > 1)               % 若参数中包括窗函数,把每帧乘以窗函数
    w = win(:)';            % 把win转成行数据
    frameout = frameout .* w(ones(nf,1),:);  % 乘窗函数
end
 
end

运行结果

三维图可以旋转观察~

俯视图可以更直观看出频率成分随时间的变化~

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服