小波分析(附源码)

来源:互联网 发布:梅西vsc罗 知乎 编辑:程序博客网 时间:2024/05/21 09:24

前几天深受小波的毒害,狠狠看了几天,算是有点成果。然后后面附上DB2小波的解构与重构的MATLAB源码。

 

首先要把傅立叶给弄懂了,傅立叶变换,是把时域的信号,写成了基为不同频率的三角函数的形式,然后,以三角函数的频率和幅值分别为X轴Y轴建立频谱。说来说去,傅立

叶就是以三角函数为基的,而且这些基是两两正交的。可是我们发现一个问题,如果我们至改变时域函数中一小部分,整个频谱都要发生变化,或者我们改变一点点频谱,整个

信号就要改变。这就出现了矛盾。 所以就出现来窗口傅立叶变换,就是在进行傅立叶分析时加一个窗函数。这样我们就可以分析局部的时域和频域信息。可是这时有出现一个

一个信号有的部分频率高,有的频率低。我们在所有的时域上都要用同一个窗函数,这样问就来了,在低频时有时会出现窗函数覆盖的时域部分太小,不能完全展现住这些低频

信息。于是就出现了小波分析。

 

什么是小波,你百度下有很多的。这里就不多说了。说白了就是第一它小,第二它波动。只要满足这两个条件的,都可以成为小波。小波有母小波,然后通过不同的尺度变换和

平移,就成了不同尺度下的小波,这些小波就是基,跟傅立叶变换中的三角函数一样的基。不同尺度下的这些基一般是两两正交的。然后可以由公式求出不同尺度下的小波基的

系数。但是还有一个尺度函数,这个尺度函数是小波分析最神奇也是最核心的地方。当我们对信号进行结构的时候,通常我们是倒着来的,也就是说比如对信号进行3层变换,

我们得到的信号采样后的值就是第3层尺度函数的系数,为什么呢,因为,系数说白了就是信号与尺度函数做内积。

 

到底要分解多少层,一般由信号的采样率决定的。

 

就先说这么多了,突然觉得好多理论上是指的东西我自己也不能彻底的明白。

 

后面是MATLAB源码;

function [ca,cd]=db2fliter(x,dim)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%x是原信号,dim是要解构的层数
%ca是最后的信号概貌,cd是所有细节部分系数的集合
%Copyright by ZHANG Jin (molilanqiao) Version:1.0 Data: 2013.5.3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%h0=dbaux(2);
h2=fliplr(h0);
l=length(h0);
h1=zeros(1,l);
h3=zeros(l,l);
k=1:(l/2);
h1(2*k-1)=h2(2*k-1);
h1(2*k)=-1*h2(2*k);
h3(2*k-1)=h0(2*k-1);
h3(2*k)=-1*h0(2*k);
cd=[];
ca=x;
for i=1:dim
x2=conv(ca,h1);
cda=down2(x2);
x1=conv(ca,h0);
ca=down2(x1);
cd=[cd,cda];
end

 

function y=down2(x)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%函数为向下采样;例如:x=[0,1,2,3,4,5,6,7,8,9],向下采样后为
%y=[0,2,4,6,8]
%Copyright by ZHANG Jin (molilanqiao) Version:1.0 Data: 2013.5.3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
L=length(x); %取x的长度
m=floor(L/2); %取N/2的整数位
k=1:m;
y(k)=x(2*k);

原创粉丝点击