【信号处理】基于MATLAB短时傅里叶变换和小波变换的时频分析

分类: 信号处理 |
侵删
本文主要给定一小段音频,通过短时傅里叶变换和小波变换制作时频图。
0、准备工作
1、短时傅里叶变换
语法:
-
Fs]=audioread('C:\Users\CDQ\Desktop\output.mp3'); % Fs 采样率 44100 -
[B, F, T, P] = spectrogram(Au(:,1),1024,512,1024,Fs); % B是F大小行T大小列的频率峰值,P是对应的能量谱密度 -
figure -
imagesc(T,F,C); -
set(gca,'YDir','normal') -
colorbar; -
xlabel('时间 t/s'); -
ylabel('频率 f/Hz'); -
title('短时傅里叶时频图');
http://img.blog.csdn.net/20161204174629638?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
2、小波变换
COEFS=cwt(S, SCALES, 'wname')
COEFS=cwt(S, SCALES, 'wname', 'plot')
COEFS=cwt(S, SCALES, 'wname', 'PLOTMODE')
COEFS=cwt(S, SCALES, 'wname', 'PLOTMODE', XLIM)
使用说明:cwt为一维小波变换的函数。
格式 COEFS=cwt(S, SCALES, 'wname') 采用'wname'小波,在正、实尺度SCALES下计算向量一维小波系数。
格式 COEFS=cwt(S, SCALES, 'wname', 'plot') 除了计算小波系数外,还加以图形显示。
格式 COEFS=cwt(S, SCALES, 'wname', 'PLOTMODE') 计算并画出连续小波变换的系数,并使用PLOTMODE对图形着色。
格式 COEFS=cwt(S, SCALES, 'wname', 'plot') 相当于 格式 COEFS=cwt(S, SCALES, 'wname', 'PLOTMODE') 中的语法 COEFS=cwt(S, SCALES, 'wname', 'absglb')
格式 COEFS=cwt(S, SCALES, 'wname', 'PLOTMODE', XLIM) 能够计算并画出连续小波变换的系数。系数使用PLOTMODE和XLIM进行着色。其中:XLIM=[x1,x2],并且有如下关系:1<=x1<=x2<=length(S)。
MODE值含义:
'lvl' scale-by-scale着色模式
'glb' 考虑所有尺度的着色模式
'abslvl'或'lvlabs' 使用系数绝对值的scale-by-scale着色模式
'absglb'或'glbabs' 使用系数绝对值并考虑所有尺度的着色模式
COEFS行的大小等于SCALES尺度的长度,COEFS列的大小等于信号S的长度。
MATLAB程序:
-
-
totalscal=1024; -
Fc=centfrq(wavename); % 小波的中心频率 测得Fc = 3 -
c=2*Fc*totalscal; % 测得c = 1536 -
scals=c./(1:totalscal); -
f=scal2frq(scals,wavename,1/fs); % 将尺度转换为频率 频率在0-500Hz取1024个点 -
coefs = cwt(Au(:,1),scals,wavename); % 求连续小波系数 -
t=0:1/fs:size(Au(:,1))/fs; -
figure -
imagesc(t,f,abs(coefs)); -
set(gca,'YDir','normal') -
colorbar; -
xlabel('时间 t/s'); -
ylabel('频率 f/Hz'); -
itle('小波时频图');
运行结果: