jiangzebin 发表于 2006-3-24 13:43

[求助]小弟用MATLAB求卷积时得出错误结果,请指正

<P ><p><FONT face="Times New Roman"> </FONT></p></P>
<P >已知<v:shapetype><FONT face="Times New Roman"> <v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path connecttype="rect" gradientshapeok="t" extrusionok="f"></v:path><lock aspectratio="t" v:ext="edit"></lock></FONT></v:shapetype><v:shape><v:imagedata></v:imagedata></v:shape><FONT face="Times New Roman"></FONT>,<v:shape><FONT face="Times New Roman"> <v:imagedata></v:imagedata></FONT></v:shape><FONT face="Times New Roman"> </FONT>,求卷积<v:shape><FONT face="Times New Roman"> <v:imagedata></v:imagedata></FONT></v:shape><FONT face="Times New Roman">*</FONT><v:shape><FONT face="Times New Roman"> <v:imagedata></v:imagedata></FONT></v:shape><FONT face="Times New Roman">,</FONT>并给出波形。</P>
<P >我用到下面的程序,但是这样得出来的卷积结果跟用手计算出来的却不一样的,请问怎么会这样啊?程序哪里错了?请帮我指出错误好吗?谢谢!</P>
<P ><FONT face="Times New Roman">t1=-3:0.01:3;</FONT></P>
<P ><FONT face="Times New Roman">t2=-3:0.01:3;</FONT></P>
<P ><FONT face="Times New Roman">f1=2*(rectpuls(t1,4));</FONT></P>
<P ><FONT face="Times New Roman">f2=(3/4)*(rectpuls(t2-1,2));</FONT></P>
<P ><FONT face="Times New Roman">c1=conv(f1,f2);</FONT></P>
<P ><FONT face="Times New Roman">subplot(3,1,1),plot(t1,f1);</FONT></P>
<P ><FONT face="Times New Roman">subplot(3,1,2),plot(t2,f2);</FONT></P>
<P ><FONT face="Times New Roman">subplot(3,1,3),plot(c1); </FONT></P>

jiangzebin 发表于 2006-3-24 14:25

我用到的函数是:当-2&lt;t&lt;2时,f1(t)=2;当t取其他值时为0。当0&lt;t&lt;2时,f2(t)=3/4;当t取其他值时为0。求卷积f1(t)*f2(t)

happy 发表于 2006-3-24 16:43

回复:(jiangzebin)[求助]小弟用MATLAB求卷积时得出...

两个离散时间信号相卷积,可直接利用MATLAB M文件中的conv函数;两个连续时间信号相卷积若采用数值解,首先要对连续时间信号采样得到离散信号f1和f2,再用conv(f1,f2)进行卷积运算得到离散时刻上的卷积结果,最后将这些离散时刻上的结果相连(插值)来近似连续函数的卷积结果。计算连续时间信号的卷积,要考虑采样周期的大小。<BR><BR>命令为:conv(x,h)×T<BR><BR>采样周期愈小,计算结果愈准确,但计算量越大, 需要对被卷积函数截断时,则需要考虑合适的截断阈值。?

cycr1234 发表于 2006-3-25 11:58

conv默认序列是从n=0开始<BR>而你的卷积序列开始时间的-3<BR>所以当你用conv求卷积的时候,程序自动把序列移到了从0开始进行卷积

cycr1234 发表于 2006-3-25 12:16

<FONT face="Times New Roman"><FONT face="Times New Roman">
<P><FONT face="Times New Roman">MATLAB对序列进行卷积是离散的,如果你的原序列就是离散的那就没关系了<BR>如果你的原序列是连续的,而你输入的序列是自己抽样后离散化了的<BR>得出的结果肯定跟你的初衷不一样<BR>所以应该输入的命令为:c1=conv(f1,f2)*0.01<BR><BR>然后最后输出subplot(3,1,3),plot(c1) <BR>把时间漏掉了</FONT></P></FONT></FONT>

jiangzebin 发表于 2006-3-25 12:51

谢谢两位把我指出错误,我把程序改为下面这样的得到的结果就是我想要的了<BR>t1=-3:0.01:3;<BR>t2=-3:0.01:3;<BR>t3=-6:0.01:6;<BR>f1=2*(rectpuls(t1,4));<BR>f2=(3/4)*(rectpuls(t2-1,2));<BR>c1=conv(f1,f2)*0.01;<BR>subplot(3,1,1),plot(t1,f1);<BR>subplot(3,1,2),plot(t2,f2);<BR>subplot(3,1,3),plot(t3,c1)<BR> 我原来没有把t3写到plot(t3,c1)里面,是因为我把t3的范围设为t3=-3:0.01:5,也就是说我是设了c1函数的一个大概范围这样得出的结果跟我的初衷就不一样了,我还想问的就是t3的取值范围要怎么样确定才好,是不是<BR>t3=(t1+t2)的左边界点:0.01:(t1+t2)的右边界点<BR><BR>

jiangzebin 发表于 2006-3-25 12:58

画图时怎么确定卷积f1*f2的变量取值范围

我还想问一下,为什么c1=conv(f1,f2)后面得乘上一个采样周期0.01,如果不乘得出的结果是原来的100倍,请问怎么会这样的?还有在画其他的两个函数的卷积的图像的时候f1*f2这个函数的变量范围要怎么确定<BR>

happy 发表于 2006-3-25 17:14

回复:(jiangzebin)画图时怎么确定卷积f1*f2的变量取...

以下是引用jiangzebin在2006-3-25 12:58:42的发言:
我还想问一下,为什么c1=conv(f1,f2)后面得乘上一个采样周期0.01,如果不乘得出的结果是原来的100倍,请问怎么会这样的?还有在画其他的两个函数的卷积的图像的时候f1*f2这个函数的变量范围要怎么确定


看帖子http://forum.vibunion.com/forum/viewthread.php?tid=8727

[ 本帖最后由 eight 于 2007-4-11 15:31 编辑 ]

jiangzebin 发表于 2006-3-25 23:33

谢谢

知识的路无尽 发表于 2007-4-11 14:13

请教各位大侠

当把两张图片在matlab中运行,做卷积运算时,怎样确定其范围。谢谢各位了
       我的部分程序是:
   

a=imread('F:\我的图片\图片\蝴蝶.JPG');
a=rgb2gray(a);
a=double(a)/255;
imshow(a)
b=fft2(a);
imshow(b);
b=fftshift(b);
imshow(b);
c=imread('F:\我的图片\图片\17-09-06_1452.jpg');
c=rgb2gray(c);
c=double(c)/255;
imshow(c);
d=fft2(c);
d=fftshift(d);
imshow(d);
e=conv2(b,d)
当运行最后一句的时候就会死机,该怎样确定一个范围啊
页: [1]
查看完整版本: [求助]小弟用MATLAB求卷积时得出错误结果,请指正