smalllan123 发表于 2008-4-19 20:50

关于用提升小波降噪的奇怪问题

请高手帮帮看一下这个用提升小波消噪的程序,我编写好后试了一下,能运行出来图像,也没有报错,可是再次运行的时候,一点改动也没有,就报错了:
??? 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);
=lwt(g1(1:1000),Isnew);
=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 编辑 ]

ch_j1985 发表于 2008-4-19 22:00

回复 楼主 的帖子

您好,没有g1数据,不好调试呀

smalllan123 发表于 2008-4-19 22:03

不好意思啊:@)
我这就上传

ch_j1985 发表于 2008-4-20 15:32

原帖由 smalllan123 于 2008-4-19 20:50 发表 http://www.chinavib.com/forum/images/common/back.gif
请高手帮帮看一下这个用提升小波消噪的程序,我编写好后试了一下,能运行出来图像,也没有报错,可是再次运行的时候,一点改动也没有,就报错了:
??? 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 编辑 ]

smalllan123 发表于 2008-4-21 10:16

谢谢,图像和我的还是有点差别啊,第三个图像不一样,我是运行了这个程序以后又运行其他的程序,再来运行这个就报错了,也不知道是怎么回事,其他的程序都没有这种问题啊:@o

eight 发表于 2008-4-21 20:59

试试在程序最开始加上 clear all

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');

ch_j1985 发表于 2008-4-21 22:50

原帖由 smalllan123 于 2008-4-21 22:45 发表 http://www.chinavib.com/forum/images/common/back.gif
谢谢o(∩_∩)o...
可是加了之后还是运行有问题呀,还是报错了:
??? Reference to a cleared variable g1.

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

你可以跟着eight学,他的研究方向就是小波分析的

sogooda 发表于 2008-4-22 09:30

回复 7楼 的帖子

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

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

eight 发表于 2008-4-22 09:51

原帖由 ch_j1985 于 2008-4-21 22:50 发表 http://www.chinavib.com/forum/images/common/back.gif
你可以跟着eight学,他的研究方向就是小波分析的
准确说是EMD

eight 发表于 2008-4-22 09:52

原帖由 smalllan123 于 2008-4-21 22:45 发表 http://www.chinavib.com/forum/images/common/back.gif
谢谢o(∩_∩)o...
可是加了之后还是运行有问题呀,还是报错了:
??? Reference to a cleared variable g1.

Error in ==> g12 at 3
xd1=wden(g1,'minimaxi','s','mln',lev,'sym5');
建议先看懂自己的程序,还有大伙提示的代码,至少看懂每个语句的意思,别张冠李戴了

ch_j1985 发表于 2008-4-22 15:25

好像load命令是从文件中读入变量的

另外,我用下面的代码1读取数据时,得到的结果如结果1;用代码2读取数据时,得到的结果如结果2,这都不是想要的,而想要的结果是结果3,大家帮忙看看是什么问题?代码中红色的部分可以修改,但是改成了其他的也不行
代码1:
fid=fopen('g1.txt');=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');=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 编辑 ]

sogooda 发表于 2008-4-23 09:12

原帖由 ch_j1985 于 2008-4-22 15:25 发表 http://www.chinavib.com/forum/images/common/back.gif
好像load命令是从文件中读入变量的

另外,我用下面的代码1读取数据时,得到的结果如结果1;用代码2读取数据时,得到的结果如结果2,这都不是想要的,而想要的结果是结果3,大家帮忙看看是什么问题?代码中红色的部 ...
这个问题挺有意思,我尝试了'%lg',好像得到的结果还是和2一样。
下面又做了另外一个小实验

fid=fopen('g1.txt');
tline=fgetl(fid)
l=str2num(tline);
vpa(l)

tline =

1.9685999999999999

ans =

1.9686000000000000000000000000000

是不是matlab只能精确到这个程度了啊?大家有什么意见?

ch_j1985 发表于 2008-4-23 09:58

回复 14楼 的帖子

这好像是跟有效数字的个数有关吧
我看了一下C语言中有关浮点型变量的内容:
   类型    比特(位)数   有效数字
   float                32                     6~7
    double             64                     15~16
long double       128                  18~19
不知道Matlab可不可以定义像long double类型的变量,如果可以,就能达到所要求的有效数字个数

sogooda 发表于 2008-4-23 10:41

fscanf的帮助文档里提到'ld','lg',应该就是长的整型和长的双精度吧,我试了'lg',结果还是一样。
页: [1] 2
查看完整版本: 关于用提升小波降噪的奇怪问题