声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: mingmingtree

[编程技巧] 在线等:怎么把输出的x和y的一一对应的数保存为txt呢?

[复制链接]
发表于 2012-4-3 10:08 | 显示全部楼层
回复 14 # ChaChing 的帖子

ChaChing兄说的没错,dlmwrite可能需要用户设置精度。
回复 支持 反对
分享到:

使用道具 举报

 楼主| 发表于 2012-4-6 20:52 | 显示全部楼层

谢老师您好!我在进一步处理的时候,又碰到问题了。代码如下

本帖最后由 mingmingtree 于 2012-4-6 20:54 编辑

回复 11 # xiezhh 的帖子

  1. clear all;
  2. clc;
  3. a = 5.8;
  4. b1 = 1528;b2=1535;b3=1560;b4=1583;
  5. c1 = 0.3;c2=0.2;c3=0.25;c4=0.3;
  6. g1 = @(t)a*exp(-4*log(2)*(((t-b1)/c1).^2));
  7. g2 = @(t)a*exp(-4*log(2)*(((t-b2)/c2).^2));
  8. g3 = @(t)a*exp(-4*log(2)*(((t-b3)/c3).^2));
  9. g4 = @(t)a*exp(-4*log(2)*(((t-b4)/c4).^2));
  10. x = 1510:0.005:1592;
  11. y1 = g1(x);
  12. y2 = g2(x);
  13. y3 = g3(x);
  14. y4 = g4(x);
  15. s1=y1+y2+y3+y4;
  16. size(s1);%纯信号
  17. z=awgn(s1,-5,'measured');%加入噪声
  18. s=z(1:16002);%去前16002个点作为程序的原始含噪信号
  19. ls=length(s);
  20. subplot(2,2,1) ,plot(x,z);title('含噪声的信号');grid;

  21. %用db1小波对原始信号进行3层分解并提取系数
  22. [c,l]=wavedec(s,3,'db1');
  23. ca3=appcoef(c,l,'db1',3);
  24. cd3=detcoef(c,l,3);
  25. cd2=detcoef(c,l,2);
  26. cd1=detcoef(c,l,1);

  27. %用三种阈值分别进行去噪处理

  28. %对信号进行强制性消噪处理并图示结果
  29. cdd3=zeros(1,length(cd3));
  30. cdd2=zeros(1,length(cd2));
  31. cdd1=zeros(1,length(cd1));
  32. c1=[ca3 cdd3 cdd2 cdd1];
  33. s1=waverec(c1,l,'db1');
  34. subplot(2,2,2);
  35. plot(s1);
  36. title('强制消噪后的信号');grid;
  37. %用默认阈值对信号进行消噪处理并图示结果
  38. %用ddencmp函数获得信号的默认阈值,使用wdencmp命令函数实现消噪过程
  39. [thr,sorh,keepapp]=ddencmp('den','wv',s);
  40. s2=wdencmp('gbl',c,l,'db1',3,thr,sorh,keepapp);
  41. subplot(2,2,3);
  42. plot(s2);
  43. title('默认阈值消噪后的信号');grid;
  44. %用给定的软阈值进行消噪处理
  45. cd1soft=wthresh(cd1,'s',1.465);
  46. cd2soft=wthresh(cd2,'s',1.823);
  47. cd3soft=wthresh(cd3,'s',2.768);
  48. c2=[ca3 cd3soft cd2soft cd1soft];
  49. s3=waverec(c2,l,'db1');
  50. subplot(2,2,4);
  51. plot(s3);
  52. title('给定软阈值消噪后的信号');grid

  53. %function y=snr(s,s1);%s是原始信号,s1,s2,s3分别是三种阈值去噪后的信号
  54. y1=sum(s1.^2); y2=sum(s2.^2);y3=sum(s3.^2);
  55. y12=sum((s-s1).^2);y22=sum((s-s2).^2);y32=sum((s-s3).^2);%y2=sum((abs(x1)-abs(x2)).^2)
  56. y13=10*log10((y1/y12))
  57. y23=10*log10((y2/y22))
  58. y33=10*log10((y3/y32))
复制代码


 楼主| 发表于 2012-4-6 20:56 | 显示全部楼层
回复 16 # xiezhh 的帖子

按照您上次教我的,我对自己生成的含噪声信号用小波的三种阈值进行去噪,可是为何信噪比都是负数呢?是程序错了?改怎么纠正呢?当您有空读到我的请教时,能帮忙指点一下不呢?万分感激哦!!又来麻烦您了。
 楼主| 发表于 2012-4-6 21:03 | 显示全部楼层
回复 16 # xiezhh 的帖子

如果说信噪比可以为负数,那么怎么区别哪种去噪方法更好呢?
y13 =

   -3.0545


y23 =

   -3.0545


y33 =

   -1.9478
发表于 2012-6-5 15:27 | 显示全部楼层
matlab就是边练习边提高,阅读帖子也能积累知识!:handshake

点评

赞成: 5.0
赞成: 5
  发表于 2012-6-6 01:11
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-6-16 05:43 , Processed in 0.056626 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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