zoukankan      html  css  js  c++  java
  • 对小波变换中DWT和CWT的理解

    转载自

    http://blog.sina.com.cn/s/blog_633750d90100hbco.html
    连续小波变换的概念、操作、及时间尺度图的显示
     最近很多网友问到关于连续小波变换的诸多问题,我用了点时间,写了个底层程序,提供给大家参考。
    
    1。连续小波的概念。就是把一个可以称作小波的函数(从负无穷到正无穷积分为零)在某个尺度下与待处理信号卷积。改变小波函数的尺度,也就改变了滤波器的带通范围,相应每一尺度下的小波系数也就反映了对应通带的信息。本质上,连续小波也就是一组可控制通带范围的多尺度滤波器。
    
    2。连续小波是尺度可连续取值的小波,里面的a一般取整数,而不像二进小波a取2的整数幂。从连续小波到二进小波再到正交离散小波,其实就是a、b都连续,a不连续、b连续,a、b都不连续的过程。操作他们的快速算法也就是卷积(快速傅里叶),多孔(a trous),MALLAT。在MATLAB里,也就是CWT,SWT,DWT。SWT称平稳小波变换、二进小波变换、或者非抽取小波变换。
    
    3。从冗余性上:CWT>SWT>DWT,前面两个都冗余,后面的离散小波变换不冗余。
    
    4。从应用上:CWT适合相似性检测、奇异性分析;SWT适合消噪,模极大值分析;DWT适合压缩。
    
    5。操作。就是在某个尺度上得到小波的离散值和原信号卷积,再改变尺度重新得到小波的离散值和原信号卷积。每一个尺度得到一个行向量存储这个尺度下的小波系数,多个尺度就是一个矩阵,这个矩阵就是我们要显示的时间-尺度图。
    
    6。显示。“不要认为工程很简单”。我的一个老师说过的话。小波系数的显示还是有技巧的。很多人画出的图形“一片乌黑”就是个例子。第一步,一般将所有尺度下的小波系数取模;第二步,将每个尺度下的小波系数范围作映射,映射到你指定MAP的范围,比如如果是GRAY,你就映射到0-255;第三步,用IMAGE命令画图;第四步,设置时间和尺度坐标。MATLAB是个很专业的软件,它把这些做的很好,但也就使我们懒惰和糊涂,我是个好奇心重的人就研究了下。里面有个巧妙的函数把我说的(1,2)两个步骤封装在了一起,就是WCODEMAT,有兴趣的同学可以看看。
    
    希望大家深入研究小波。
    
    这里,还有要说的是,小波目前理论的热点:
    1。不可分的小波或者具有可分性质的方向性小波;
    2。XLET: CONTOURLET, WEDGELET, SHEARLET, BANDELET, RIDGELET, CURVELET; PLATELET.
    3。多分辨率分析+多尺度几何分析的结合,才真正是我们所需要的。比如小波域的WEDGELET等等。
    
    最后,几点建议:
    1。理论研究和实际应用不同,工程上很多问题小波并不是最好的,在做项目的时候大家要实际情况,实际对待。
    2。做研究,有些话题太成熟了,对于小波本身几乎很难再做下去,要在方向性和几何性上下功夫。对此,我也做的工作很少,毕竟研究方向转了。
    3。看看DAUBECHIES,MALLAT,Minh N. Do的personal web,特别是preprint的文章,会有些启发。
    4。最终大家还是最好自己提一些新的XLET或算法出来,这样才是有挑战性的工作,否则我们永远是落后的。
    5。交叉领域和结合是值得做的,最近R2007也就增加了PCA+WAVELET等内容,还有用小波在数值分析领域求解偏微分等,多尺度现在是个很热的东西,SIAM为此都开了专门的期刊,这是数值分析最前沿的期刊可以看看。还有ELSEVIER的Applied and Computational Harmonic Analysis,这些虽然数学多了一点,但毕竟才有可能在工程上是“新”的。
    
    大家可以到我的网站下载到.m文件
    http://cem.ahu.edu.cn/Freecode/freecode.htm
    
    各位共勉!!!
    
    安徽大学 沙威
    2007年9月5日
    % 编程人 沙威 安徽大学
    % ws108@ahu.edu.cn
    
    function CWT_EXE();
    % 多个尺度连续小波变换的实现
    clc;clear
    
    % 下载信号
    load vonkoch
    vonkoch=vonkoch(1:510);
    
    % 尺度1-32的连续小波变换
    S_Min=1;S_Max=32;
    
    index=0;
    for scale=S_Max:-1:S_Min;
    index=index+1;
    cwt_coef(index,:)=CWT_FUNCTION(scale,32*(scale),vonkoch);
    end
    
    % 小波系数取模
    cwtcoef_abs=abs(cwt_coef);
    
    % 显示
    for index=S_Min:S_Max
    max_coef=max(cwtcoef_abs(index,:)); % 系数模最大
    min_coef=min(cwtcoef_abs(index,:)); % 系数模最小
    ext=max_coef-min_coef; % 系数模跨度
    cwtcoef_abs(index,:)=64*(cwtcoef_abs(index,:)-min_coef)/ext; % 系数大小变换
    end
    
    figure(1)
    
    subplot(2,1,1);
    plot(vonkoch);
    xlabel('时间')
    ylabel('幅度')
    title('分形信号')
    axis([1 510 0 0.02])
    
    subplot(2,1,2)
    colormap(pink(64));
    image(cwtcoef_abs)
    set(gca,'YTick',2:3:32)
    set(gca,'YTickLabel',32:-3:2)
    title('连续小波变换时间尺度图')
    xlabel('时间')
    ylabel('尺度')
    
    % 某个尺度的连续小波变换的M函数
    
    % delta 小波变换的尺度
    % N 小波函数的长度
    % s 原始信号
    % g 原始信号某个尺度下的小波变换系数
    
    function g=CWT_FUNCTION(delta,N,s);
    
    % 原始信号长度
    n=length(s);
    
    % 构造墨西哥帽子小波函数
    for index_x=1:N;
    x=index_x-(N+1)/2;
    phi_x(index_x)=((pi^(-1/4))*(2/sqrt(3)))*(1-x.*x/(delta^2))*exp(-(x.*x)/(2*delta^2));
    end;
    phi_x=phi_x/norm(phi_x); % 能量归一化
    
    % 对信号做卷积
    g=conv(s,phi_x); % 卷积
    g=wkeep(g,n); % 保持信号长度
  • 相关阅读:
    FreeMarker MyEclipse IDE
    Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring
    Mybatis SqlSessionTemplate 源码解析
    Mybatis Interceptor 拦截器原理 源码分析
    MyBatis Mapper 接口如何通过JDK动态代理来包装SqlSession 源码分析
    MyEclipse SVN 下面切换用户的解决方案
    SpringMVC 多个数据源 配置多个事物管理器 Multiple Transaction Managers
    Activiti 获取定义
    [No000066]python各种类型转换-int,str,char,float,ord,hex,oct等
    [No000065]python 获取当前时间
  • 原文地址:https://www.cnblogs.com/seisjun/p/6702946.html
Copyright © 2011-2022 走看看