压缩感知稀疏基之离散哈特莱变换(DHT)和离散W变换

来源:互联网 发布:剑网三捏脸数据百度云 编辑:程序博客网 时间:2024/06/10 07:58

题目:压缩感知稀疏基之离散哈特莱变换(DHT)和离散W变换

 

在前面的《压缩感知的常见稀疏基名称及离散傅里叶变换基》中提到了DWT,并没有提到离散哈特莱变换(Discrete Hartley Transform, DHT),但讨论正交变换理论下的稀疏基,比较常见的正交变换应该提一下的,虽然前面提到的DWT也不知道是不是指的离散W变换,因为一般情况下DWT是指的离散小波变换(DiscreteWavelet Transform, DWT),有时也指离散沃尔什变换(Discrete WalshTransform, DWT),不管它是不是指的离散W变换吧,这里都讨论一下吧,之所以把DHT和离散W变换放到一起是因为DHT是离散W变换的四种形式中的第一种形式。下面提到DWT即指离散W变换而不是离散小波变换等其它变换。

注:有时DHT也用来表示离散哈达玛变换(Discrete HadamardTransform DHT)。

一、离散哈特莱变换(Discrete Hartley Transform, DHT)

哈特莱是一个人名,英文为Hartley,有时音译为哈特利或哈特雷,他在1942年提出连续Hartley变换,42年后于1984年,Bracewell提出了离散Hartley变换(DHT)。

在这里,我直接将DHT公式给成正交变换的形式:


上面定义式中我直接将定标因子写为1/N的开方,这样保证DHT的变换矩阵HN直接是正交矩阵

观察发现矩阵HN不但是正交矩阵并且还是对称矩阵(转置与本身相等),因此逆矩阵与本身相等(正交矩阵的逆矩阵等于其转置),即DHT的逆变换与正变换形式相同。

DHT也有四种形式,上面给出的是第一种形式,其它参见维基百科【1】。

二、离散W变换(Discrete W Transform, DWT)

有关离散W变换,我一直想找出它的全中文名字,但我查了好久也没有找到,英文文献中是以DiscreteW Transform来表述的,中文文献中是以离散W变换来表述的。离散W变换是由王中德提出的,所以我猜这里的“W”应该是指其姓氏“王(Wang)”的首字母W,因此若要找出它的全中文名字应该是“离散王中德变换”,当然提出者也没有这么命名,这里纯属我自己推测了。

采用文献【2】中的定义,离散W变换定义如下:

其中α和β分别是时域和频率的参数,它们的取值可以是(0,0)、(1/2,0)、(0,1/2)、(1/2,1/2)中的任一个,也就是说DWT共有四种形式,依次为DWT-Ⅰ、DWT-Ⅱ、DWT-Ⅲ、DWT-IV。可以发现,当取(0,0)时的DWT-Ⅰ即为DHT(利用和差化积公式将求和里面的sin展开即可)。

DWT-Ⅳ不但可以得到信号整数倍的谐波,而且可以得到分数倍的谐波。

三、离散W变换奠基人王中德介绍

在网上搜索了“王中德”这个人,却搜不到任何有用信息,感觉如此关注于基础研究的人,无论是IEEE还是其它权威期刊上发表过很多文章,网上竟然没有他的信息,无论是正面的还是负面的。在网络如此发达的今天,哪怕是一个博导教授一般在百度百科里也有会的,不知道到底是为什么没有王先生的信息。最终我从两篇论文中找到了一些有关王中德的个人信息,总结如下:

王中德,1937年3月19日生于江苏南京,1960年毕业于云南大学物理系,毕业后在昆明物理所工作,1980年至1983年在美国亚利桑那(Arizona)大学电机系数字图像分析实验室进修,曾获美国国家自然科学基金,后来到北京邮电学院电信工程系工作。研究方向包括算法研究、信号处理、图像处理等。IEEE高级会员、美国数学学会会员、中国电子学会会员、中国物理学会会员。



四、如何得到DHT基和DWT基

(1)离散W变换

其实写一个通用的函数得到四种离散W变换的变换矩阵就已经得到了DHT的变换矩阵,所以这里先讨论DWT。

Matlab中有dwt函数,但并不是指的离散W变换,而是离散小波变换,谁让小波变换更牛更广一些呢,这里我给出一个离散W变换的Matlab函数:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. function [ X ] = DWangT( x,dwt_type )  
  2. %DWangT Summary of this function goes here  
  3. %   Detailed explanation goes here  
  4. %   x is the input single  
  5. %   dwt_type decides DWangT types  
  6. %   X is the discrete W transform of x  
  7. N = length(x);  
  8. [x_rows,x_columns] = size(x);  
  9. if x_rows<x_columns  
  10.     x = x';%x should be a column vector  
  11. end  
  12. [k,n] = meshgrid(0:N-1);  
  13. if dwt_type==2  
  14.     alpha = 1/2;  
  15.     beta = 0;  
  16. elseif dwt_type==3  
  17.     alpha = 0;  
  18.     beta = 1/2;  
  19. elseif dwt_type==4  
  20.     alpha = 1/2;  
  21.     beta = 1/2;  
  22. else  
  23.     alpha = 0;  
  24.     beta = 0;  
  25. end  
  26. WN = sqrt(2/N) * sin(pi/4 + 2*pi/N * (n+alpha) .* (k+beta));  
  27. X = WN*x;  
  28. end  

这里根据输入参数dwt_type的值决定是哪一种离散W变换。

若要得到得到离散W变换的变换矩阵,稍微把上面函数变一下形就可以了:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. function [ WN ] = DWangTmtx( N,dwt_type )  
  2. %DWangTmtx Summary of this function goes here  
  3. %   Detailed explanation goes here  
  4. %   N is the dimension of WN  
  5. %   dwt_type decides DWangT types  
  6. %   WN is the Discrete W Transform matrix  
  7. [k,n] = meshgrid(0:N-1);  
  8. if dwt_type==2  
  9.     alpha = 1/2;  
  10.     beta = 0;  
  11. elseif dwt_type==3  
  12.     alpha = 0;  
  13.     beta = 1/2;  
  14. elseif dwt_type==4  
  15.     alpha = 1/2;  
  16.     beta = 1/2;  
  17. else  
  18.     alpha = 0;  
  19.     beta = 0;  
  20. end  
  21. WN = sqrt(2/N) * sin(pi/4 + 2*pi/N * (n+alpha) .* (k+beta));  
  22. end  

(2)离散哈特莱变换

其实只要令上面的dwt_type=1即可得到DHT变换和DHT变换矩阵,这是还是单独给出DHT的变换函数:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. function [ X ] = DHartleyT( x )  
  2. %DHartleyT Summary of this function goes here  
  3. %   Detailed explanation goes here  
  4. %   x is the input single  
  5. %   X is the discrete Hartley transform of x  
  6. N = length(x);  
  7. [x_rows,x_columns] = size(x);  
  8. if x_rows<x_columns  
  9.     x = x';%x should be a column vector  
  10. end  
  11. [k,n] = meshgrid(0:N-1);  
  12. HN = sqrt(1/N)*(cos(2*pi/N*n.*k)+sin(2*pi/N*n.*k));  
  13. X = HN*x;  
  14. end  

若要得到得到离散哈特莱变换的变换矩阵,稍微把上面函数变一下形就可以了:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. function [ HN ] = DHartleyTmtx( N )  
  2. %DHartleyT Summary of this function goes here  
  3. %   Detailed explanation goes here  
  4. %   N is the dimension of WN  
  5. %   HN is the Discrete Hartley Transform matrix  
  6. [k,n] = meshgrid(0:N-1);  
  7. HN = sqrt(1/N)*(cos(2*pi/N*n.*k)+sin(2*pi/N*n.*k));  
  8. end  

五、结语

离散W变换就说这么多吧,深层次的理解还没有多少,有新理解的话再发文。

 

参考文献:

【1】维基百科.离散哈特利转换,http://zh.wikipedia.org/zh-cn/離散哈特利轉換

【2】胡广书.数字信号处理理论、算法与实现(第三版)[M]. 北京:清华大学出版社,2012:351-352.

0 0