声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3099|回复: 19

[综合讨论] 关于用提升小波降噪的奇怪问题

[复制链接]
发表于 2008-4-19 20:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
请高手帮帮看一下这个用提升小波消噪的程序,我编写好后试了一下,能运行出来图像,也没有报错,可是再次运行的时候,一点改动也没有,就报错了:
??? Index exceeds matrix dimensions.

Error in ==> detcoef at 59
    tmp{j} = coefs(first(k):last(k));

Error in ==> wnoisest at 50
    c = detcoef(c,varargin{:},'cells');

Error in ==> g1xiaozao at 23
sigma = wnoisest(c,l,1);
我又试了好几次,把matlab打开再试,关机重启等等,有的时候能运行,有的时候报错,不知道是怎么回事,这个错误我查了查,也没找出来,没办法啦,请高手指点啊


下面是我的源程序:
lev=5;
xd1=wden(g1(1:1000),'minimaxi','s','mln',lev,'sym5');//g1是txt格式导入的数据
Ishaar=liftwave('haar');
els={'p',[-0.125,0.125],0};
Isnew=addlift(Ishaar,els);
[cA1,cD1]=lwt(g1(1:1000),Isnew);
[cA2,cD2]=lwt(cA1,Isnew);
length=size(cA2,2);
c=zeros(1,length*4);
for i=1:length;
    c(i)=cA2(i);
end;
for i=length+1:2*length;
    c(i)=cD2(i-length);
end;
for i=length*2+1:4*length;
    c(i)=cD1(i-2*length);
end;
l(1)=length;
l(2)=length;
l(3)=length*2;
l(4)=length*4;
sigma = wnoisest(c,l,1);
alpha = 2;
thr=wbmpen(c,l,sigma,alpha);
keepapp=1;
xd2=wdencmp('gbl',c,l,'db6',1,thr,'s',keepapp);
subplot(3,1,1);
plot(g1(1:1000));
title('原始信号');
subplot(3,1,2);
plot(xd1(1:1000));
title('离散小波消噪后的信号')
subplot(3,1,3);
plot(xd2);
title('提升小波消噪后的信号');


谢谢大家!:@)

[ 本帖最后由 eight 于 2008-4-21 20:59 编辑 ]

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2008-4-19 22:00 | 显示全部楼层

回复 楼主 的帖子

您好,没有g1数据,不好调试呀
 楼主| 发表于 2008-4-19 22:03 | 显示全部楼层
不好意思啊:@)
我这就上传 g1.txt (51.68 KB, 下载次数: 49)
发表于 2008-4-20 15:32 | 显示全部楼层
原帖由 smalllan123 于 2008-4-19 20:50 发表
请高手帮帮看一下这个用提升小波消噪的程序,我编写好后试了一下,能运行出来图像,也没有报错,可是再次运行的时候,一点改动也没有,就报错了:
??? Index exceeds matrix dimensions.

Error in ==> detcoef a ...



您好,是附件中的图吗?
我运行了,没有报错呀:@o
不过读出来的数据变成这样了:
Columns 1 through 3
   1.968600000000000   1.968600000000000   1.968500000000000
  Columns 4 through 6
   1.968100000000000   1.967900000000000   1.967700000000000
  Columns 7 through 9
   1.967800000000000   1.967800000000000   1.967700000000000

[ 本帖最后由 ch_j1985 于 2008-4-20 15:34 编辑 ]
2.bmp

评分

1

查看全部评分

 楼主| 发表于 2008-4-21 10:16 | 显示全部楼层
谢谢,图像和我的还是有点差别啊,第三个图像不一样,我是运行了这个程序以后又运行其他的程序,再来运行这个就报错了,也不知道是怎么回事,其他的程序都没有这种问题啊:@o
发表于 2008-4-21 20:59 | 显示全部楼层
试试在程序最开始加上 clear all
 楼主| 发表于 2008-4-21 22:45 | 显示全部楼层
谢谢o(∩_∩)o...
可是加了之后还是运行有问题呀,还是报错了:
??? Reference to a cleared variable g1.

Error in ==> g12 at 3
xd1=wden(g1,'minimaxi','s','mln',lev,'sym5');
发表于 2008-4-21 22:50 | 显示全部楼层
原帖由 smalllan123 于 2008-4-21 22:45 发表
谢谢o(∩_∩)o...
可是加了之后还是运行有问题呀,还是报错了:
??? Reference to a cleared variable g1.

Error in ==> g12 at 3
xd1=wden(g1,'minimaxi','s','mln',lev,'sym5');


你可以跟着eight学,他的研究方向就是小波分析的
发表于 2008-4-22 09:30 | 显示全部楼层

回复 7楼 的帖子

你是不是把clear all加到装载g1.txt之后了啊。试试这样
clear all;
load g1.txt
...

[ 本帖最后由 sogooda 于 2008-4-22 09:36 编辑 ]

评分

1

查看全部评分

发表于 2008-4-22 09:51 | 显示全部楼层
原帖由 ch_j1985 于 2008-4-21 22:50 发表
你可以跟着eight学,他的研究方向就是小波分析的

准确说是EMD
发表于 2008-4-22 09:52 | 显示全部楼层
原帖由 smalllan123 于 2008-4-21 22:45 发表
谢谢o(∩_∩)o...
可是加了之后还是运行有问题呀,还是报错了:
??? Reference to a cleared variable g1.

Error in ==> g12 at 3
xd1=wden(g1,'minimaxi','s','mln',lev,'sym5');

建议先看懂自己的程序,还有大伙提示的代码,至少看懂每个语句的意思,别张冠李戴了
发表于 2008-4-22 15:25 | 显示全部楼层
好像load命令是从文件中读入变量的

另外,我用下面的代码1读取数据时,得到的结果如结果1;用代码2读取数据时,得到的结果如结果2,这都不是想要的,而想要的结果是结果3,大家帮忙看看是什么问题?代码中红色的部分可以修改,但是改成了其他的也不行
代码1:
fid=fopen('g1.txt');[g1,count]=fscanf(fid,'%17f',inf);fclose(fid);g1
结果1:
g1 =
   1.968599999999999
   9.000000000000000
   1.968599999999999
   9.000000000000000
   1.968499999999999
   9.000000000000000
   1.968499999999999
   9.000000000000000
代码2:
fid=fopen('g1.txt');[g1,count]=fscanf(fid,'%f',inf);fclose(fid);g1
结果2:
g1 =
   1.968600000000000
   1.968600000000000
   1.968500000000000
   1.968500000000000
结果3:
g1 =
   1.9685999999999999
   1.9685999999999999
   1.9684999999999999
   1.9684999999999999

[ 本帖最后由 ch_j1985 于 2008-4-22 17:48 编辑 ]

g1.txt

78 Bytes, 下载次数: 8

发表于 2008-4-23 09:12 | 显示全部楼层
原帖由 ch_j1985 于 2008-4-22 15:25 发表
好像load命令是从文件中读入变量的

另外,我用下面的代码1读取数据时,得到的结果如结果1;用代码2读取数据时,得到的结果如结果2,这都不是想要的,而想要的结果是结果3,大家帮忙看看是什么问题?代码中红色的部 ...

这个问题挺有意思,我尝试了'%lg',好像得到的结果还是和2一样。
下面又做了另外一个小实验

  1. fid=fopen('g1.txt');
  2. tline=fgetl(fid)
  3. l=str2num(tline);
  4. vpa(l)
复制代码

tline =

1.9685999999999999

ans =

1.9686000000000000000000000000000

是不是matlab只能精确到这个程度了啊?大家有什么意见?
发表于 2008-4-23 09:58 | 显示全部楼层

回复 14楼 的帖子

这好像是跟有效数字的个数有关吧
我看了一下C语言中有关浮点型变量的内容:
   类型    比特(位)数   有效数字
   float                32                       6~7
    double             64                     15~16
long double       128                    18~19
不知道Matlab可不可以定义像long double类型的变量,如果可以,就能达到所要求的有效数字个数
发表于 2008-4-23 10:41 | 显示全部楼层
fscanf的帮助文档里提到'ld','lg',应该就是长的整型和长的双精度吧,我试了'lg',结果还是一样。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-12 23:26 , Processed in 0.070019 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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