📄 xbotezheng.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%小波包变换示范程序%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all
clc
%%%%%%%首先,把一个信号读入Matlab%%%%%%%%
s0=wavread('y5.wav');%%%%%“wavread”是一个Matlab的函数,他的目的是把声音文件1_1.wav读入Matlab,储存在s0这个数组中。
%%%%%%%接着,取s0数组的前8000点,放在另一个数组s中。
for i=1:4800
s(i)=s0(i);
end
%%%%%%%然后,对s数组进行小波包的变换%%%%%%%%
T=wpdec(s,3,'db2','shannon');%%%%%“wpdec”也是一个Matlab的函数,他的作用是对信号(也可以称为数组)s做3阶的小波包分析,他的用法
%%%%%如下:小波包树形对象=wpdec(信号数组,小波包分析的阶数,‘小波名称’,‘熵的名称’)。
%%%%%这个函数的输出是小波包树形对象(就是程序中的T),他是一个很复杂的东西,小波包变换
%%%%%的所有信息都在他的里面,做小波包分析的逆变换就是基于对小波包树形对象处理得到的。
%%%%%%这样我们就完成了一个信号的小波包变换%
%%%%%%下面,我们要对小波包变换之后的小波包树形对象做逆变换,恢复出原始的信号%%%%%%%
s130=wprcoef(T,[3,0]);%%%%%“wprcoef”是一个Matlab的函数,他的作用是根据小波包树形对象,来分支重构原始信号,3阶的小波包变换就会产生2的3次方个
%%%%%支路信号,把所有的这些支路信号相加才能得到总的信号
s131=wprcoef(T,[3,1]);
s132=wprcoef(T,[3,2]);
s133=wprcoef(T,[3,3]);
s134=wprcoef(T,[3,4]);
s135=wprcoef(T,[3,5]);
s136=wprcoef(T,[3,6]);
s137=wprcoef(T,[3,7]);
%%%%%%%注意,这就是小波包分析的有用之处,他可以把一个信号无损地分成不同的几个信号,这几个信号s130,s131,s132,s133,s134,s135,s136,s137,
%%%%%%%分别反映了原始信号在8个互相不重叠的频率段上的信息,小波包分析来识别不同信号就是根据小波包的这个属性。
%%%%%%%最后,寻找区分不同信号的特征量,小波包分解的方法是把小波包重构后得到的几个支路信号计算能量,得到8个能量值,再把这些能量值归一化,
%%%%%%%得到的8个归一化能量值作为识别不同信号的特征量。
E130=sum(abs(s130).^2);%%%%%“sum”是求和的函数,“abs”是取绝对值,这条命令就是计算支路信号s130的能量的
E131=sum(abs(s131).^2);
E132=sum(abs(s132).^2);
E133=sum(abs(s133).^2);
E134=sum(abs(s134).^2);
E135=sum(abs(s135).^2);
E136=sum(abs(s136).^2);
E137=sum(abs(s137).^2);
E1=[E130 E131 E132 E133 E134 E135 E136 E137 ];%%%%%这几个支路信号的能量形成一个数组E1
E=(abs(E130).^2+abs(E131).^2+abs(E132).^2+abs(E133).^2+abs(E134).^2+abs(E135).^2+abs(E136).^2+abs(E137).^2).^0.5;%%%%%归一话
Result=E1/E;%%%%%Result就是我们要的特征量的数组,到此收工!
disp(Result);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -