小波变换中的信号扩展(延拓)问题

来源:互联网 发布:明星网络暴力 编辑:程序博客网 时间:2024/06/09 23:38

题目:小波变换中的信号扩展(延拓)问题

        本篇主要是做为上一篇《压缩感知稀疏基之离散小波变换》的一个补充说明。

        首先给出一个卷积的例子:

       

        从上面的卷积计算过程中可以看出,在计算y(0)和y(4)时,x(n)和h(n)只有一个点对应,在计算其它值时有两个点对应,以上计算还可以用矩阵表示如下:

        我们可以对x(n)按某种规律进行扩展,以使求卷积过程中x(n)和h(n)一直有两个点(h的长度)对应,这就是信号的扩展。

        观察可知,只要对x(n)左右各扩展一个点即可,在Matlab中有函数wextend对信号进行扩展,扩展的模式如下:

        注意最后一种’per’模式,因为我们在生成N×N的小波变换矩阵时用的是此模式,所以重点阐述这种模式。

        在Matlab分别运行两条命令,可得输出结果如下:

>> x=[1 2 34];wextend(1,’per’,x,1)

ans =

    4     1     2    3     4     1

>> x=[1 2 3];wextend(1,’per’,x,1)

ans =

    3     1     2    3     3     1

        命令wextend(1,’per’,x,1)中的输入参数中第一个“1”表示是一维扩展,最后一个“1”表示左右各扩展一个点。从上面的两个结果基本可知得到’per’模式的扩展规律:

        1)对于长度为偶数的序列,直接按周期进行扩展;

        2)对于长度为奇数的序列,先把序列延长一个点变为偶数后再按周期进行扩展。

        在上面的例子中,若对信号按’per’模式进行扩展,则计算过程如下:

        

        观察可以发现由h构成的矩阵各行实际上是一个循环移位的结果。

        我们可以在’per’扩展模式下写出一个较为复杂、但代表性更强的表达式,设x(n)长度为8,h(n)的长度为4,若对x(n)按’per’扩展模式扩展,则卷积表达式的矩阵形式为:

在Matlab中编程得到这个变换矩阵时,可以分成几个步骤:

1)参数初始化:N=length(x),L=length(h),在这里N=8,L=4

2)得到h=[h(0),h(1),h(2),h(3)]的反转序列,即h_1=[h(3),h(2),h(1),h(0)],这一操作可使用命令“h_1 = fliplr(h);”实现

3)由h_1得到一个长为N的基本行向量:p1_0 = [h_1zeros(1,N-L)];

这里得到的p1_0实际上即是上面变换矩阵的第4行

4)通过对p1_0循环移位得到变换矩阵中的各行:

Matlab中有循环移位函数circshift,但这个函数是对行之间循环移位,而这里的行向量p1_0是1行N列,为了实现循环移位,可以对其先进行转置变为列向量再进行循环移位,移位结束后再转置变回行行量;

若要得到变换矩阵中的第一行:circshift(x’,-(L-1)),如:

>> x=[4 3 2 10 0 0 0]

x =

     4    3     2     1    0     0     0    0

>>circshift(x’,-(4-1))’

ans =

     1    0     0     0    0     4     3    2

同理可以得到其它各行。


                转载自彬彬有礼的专栏
阅读全文
0 0