解析matlab函数wrcoef的内部实现

启发:http://blog.sina.com.cn/s/blog_8ec096580101fsmn.html
一、首先,分析一个简单的例子,即对长度为2000的信号进行db6小波1层分解。
即:[C,L] = wavedec(s,1,'db6');A1 = wrcoef('a',C,L,'db6',1);
下面对函数wrcoef的实现过程进行详细解读:
第一步:将数组C中的CA1取出来,进行补零;
CA1 = C(1:L(1));
ca1 = zeros(1,2*L(1));
ca1(2:2:2*L(1)) = CA1(:); 
第二步:将CA1通过低通滤波器LO_R;
A11 = conv(LO_R,ca1);
第三步:得到1层分解后重构的概貌系数A1;
A1 = A11(12:2000+12-1);
注明:至于这里为什么要从第12个数据开始取,暂时不清楚。
从上面的分析来看,将分解最底层的概貌系数通过补零和滤波器的方式,直到得到和原始信号长度相同的数据。
二、分析3层分解的具体重构情况。Matlab语句:[C,L] = wavedec(s,3,'db6');
该句的作用是将信号s采用db6小波基进行3层分解,C里面中存放着小波变换后的各个分量的系数,L也是个数组,记录着C中每个元素的长度。
C = [CA3 CD3 CD2 CD1];L=[la3 ld3 ld2 ld1 N];(这里 L=[259 259 508 1005 2000]);
Matlab语句A3 = wrcoef('a',C,L,'db6',3);
该句的作用是利用C,L等数据信息,单支重构信号的概貌系数,得到原信号在该系数对应的尺度下的信号分量,其长度与原信号一致。
至于函数wrcoef的内部实现过程,可以看成是函数的wavedec的逆操作;下面对函数wrcoef的实现过程进行详细解读:

第一步:将数组C中的CA3取出来,长度为259,进行补零;

你可能感兴趣的:(matlab)