找回密码
 注册
Simdroid-非首页
查看: 205|回复: 3

65编译工具箱函数[小波去噪WDEN]

[复制链接]
发表于 2007-1-6 21:14:46 | 显示全部楼层 |阅读模式 来自 湖北武汉
现在都2006时代了,也没洒技术含量,不知道算不算OLD了,凑合看吧
背景介绍:需要利用MATLAB的小波去噪函数.希望能够支持编译.
         本人从未使用过小波工具箱.对小波没有任何理解,但由于涉及到的是去噪部分,看上去不是那么困难.所以本人不知道以下过程对编译其它工具箱的函数有没有启发.
系统环境:WINDOWS + VC6.0 + MATLAB65
前言:
如上所述,本文工作仅仅针对MATLAB65,或者说编译器3.0.MATLABR14后的编译器对工具箱函数的支持已经很好了.具体请参考TMW上的介绍.
至于符号计算,feval等MATLAB编译器不支持的函数,此处也不介绍了,需要的请参考TMW网页.
在能看到源码的范围内,工具箱函数之所以不好编译,经过我一天的摸索,我想应该有以下几个方面的困难.
1.        工具箱不比单枪匹马的单个函数,它是个系统,所以,程序结构,让人想起了软件工程.容错检查等等一堆,程序结构复杂
2.        工具箱函数大量使用了feval等编译器不支持的函数.
3.        工具箱函数可能调用了很多数据文件.
4.        工具箱的函数错综复杂,层层嵌套,往往有的函数,仅仅只有一两行.有些函数居然还有重复的.仅仅是改了几个string而已
准备工作.
先初步看看小波工具箱的函数结构.以便有个初步印象,尽管有些英文术语我都念不通.
Start ---Toolboxes—Wavelet---Help
要编译的函数即是
wden        - Automatic 1-D de-noising using wavelets.

既然要编译,那么找到其调用的所有的函数是第一件要作的事情
1.        在Editor中,绿色工具栏f,show Function,可以列出该M文件的所有函数.但这显然不是我们所需要的.
2.        通过函数inmem
3.        TMW FileExchange据说有几个函数.
4.        depfun
这个是我比较习惯的.
主要是: 函数路径列得很清楚.写几行代码,把不是工具箱路径下的函数去掉就行了.
        结果输出的最后会列出feval等函数的出处.这个无疑提供了很好的信息.
      找到函数后,把所有的函数列一个M文件里.这个还是推荐手动.因为你至少得熟
悉函数名称,以及大概是干什么的.尤其是象我这样对这个工具箱完全没有概念的人.
      函数代码总共也就几K行.但,这并不一定是最后的齐全的函数.
      比如主函数WDEN也就调用了5个主要的函数.
      工具箱函数中一堆的变量输入输出检查函数.这个我暂时拿它没有什么好的办法.因为函数数量实在是庞大,将这些出错检测如何一层层地向上传递是个问题.所以,我干脆去掉了所有的出错检测.这不是个好习惯,不得已而为之.  
      其次,需要检查exist函数.这个函数判断变量,有的情况下结果是错误的.
      以及LOAD函数,将load(bin_file,'-mat');换为load(bin_file);即可
      然后便是feval等了.
      对于feval需要注意的是,WDEN函数中喜欢使用如下这种形式
      F = feval(fname,wname);
      比如wfilters的LINE 62.这种调用让人摸不着头脑.
      分析输出wname,fname,得知,
Wname     sym8
      Fname      symwavf
      which symwavf一查.原来是它.
      看函数名,以及waveinfo函数,所以应该把symwavf及其它函数给包容进来.
      将feval改swicth或if函数即可.
      完成这些之后可以编译了.
      此时,需要查找是否还有一些独立的数据文件.
      在工具箱文件夹中搜索*.mat
      在列出的WDEN函数中查找load,以及与文件操作有关的函数.
      将需要的数据文件拷贝备份,和MEX程序打包即可
      PS:有些数据文件根本不需要.因为函数中直接有函数赋予.
      初步精简后WDEN函数不到2K代码.
      以HELP中的
snr = 3; init = 2055615866;  
[xref,x] = wnoise(3,11,snr,init);
lev = 5;
[xd,cxd,lxd] = wden(x,'heursure','s','one',lev,'sym8');
测试通过.由于本人对小波去噪函数以及小波族都不清楚,所以对于其它的小波,其它一些特殊情况没有作更多的研究.
至于最后的DLL函数,等我再整理整理,把更多的小波来试试后,再看吧.

评分

1

查看全部评分

发表于 2008-4-3 19:50:46 | 显示全部楼层 来自 山东东营
Simdroid开发平台
好像用load(bin_file)也无法编译通过!!
回复 不支持

使用道具 举报

 楼主| 发表于 2008-4-3 19:54:46 | 显示全部楼层 来自 湖北武汉
你信息描述出错提示
谢谢
回复 不支持

使用道具 举报

 楼主| 发表于 2009-6-3 20:31:44 | 显示全部楼层 来自 广西梧州
这两天清理硬盘,准备传些以前的关于混编的老程序
这是以前修改的一维小波滤波程序
具体见readme吧

  1. function readme
  2. % |---------------------------------------------------------|
  3. % |   Automatic 1-D de-noising using wavelets.              |
  4. % |   Mex Program For Windows                               |
  5. % |   中国地质大学(武汉)地球物理系                          |
  6. % |   Last Revision:  21-12-2006.                           |
  7. % |---------------------------------------------------------|
  8. % 这是从MATLAB小波工具包中提取的wden
  9. % 本程序可以在没有安装小波工具包的MATLAB中运行
  10. % 或者利用MATLAB的数学库可以在没有安装MATLAB的环境下运行
  11. %   XD = WDEN(X,TPTR,SORH,SCAL,N,'wname')
  12. %   Input------------
  13. %     X    input signal
  14. %     TPTR string contains threshold selection rule:
  15. %          'rigrsure'
  16. %                use principle of Stein's Unbiased Risk.
  17. %          'heursure'
  18. %                is an heuristic variant of the first option.
  19. %          'sqtwolog'
  20. %                for universal threshold sqrt(2*log(.)).
  21. %          'minimaxi'
  22. %                for minimax thresholding.
  23. %     SORH ('s' or 'h') is for soft or hard thresholding
  24. %     SCAL defines multiplicative threshold rescaling:
  25. %          'one' for no rescaling.
  26. %          'sln' for rescaling using a single estimation
  27. %                of level noise based on first level coefficients.
  28. %          'mln' for rescaling done using level dependent
  29. %                estimation of level noise.
  30. %      N  
  31. %          level
  32. %      wname
  33. %          the name of desired orthogonal wavelet.   
  34. %   Output------------
  35. %      XD
  36. %          The de-noised result of the input signal X
  37. %    Example
  38. %     snr = 3; init = 2055615866;  
  39. %     [xref,x] = wnoise(3,11,snr,init);
  40. %     lev = 5;
  41. %     xd=denoise12(x,'heursure','s','one',lev,'sym8');
  42. %     subplot(311), plot(xref), axis([1 2048 -10 10]);
  43. %     title('Original signal');
  44. %     subplot(312), plot(x), axis([1 2048 -10 10]);
  45. %     title(['Noisy signal - Signal to noise ratio = ',...
  46. %     num2str(fix(snr))]);
  47. %     subplot(313), plot(xd), axis([1 2048 -10 10]);
  48. %     title('De-noised signal - heuristic SURE');
  49. %   END HELP
  50. clc;
  51. help readme;
  52. %   THIS THE HELP INFORMATION OF THE MEX FUNCTION 'DENOISE'
  53. %   Shunfly
  54. %   中国地质大学(武汉)地球物理系
  55. %   2006/12/21/16/00
  56. %   USE THE FOLLOWING COMMAND TO COMPILE THE M FILE INTO A MEX FUNCTION.
  57. %   mcc -x denoise.m
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-7 07:24 , Processed in 0.042120 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表