jww100 发表于 2008-11-1 06:12

【总结】卷积的三种算法

例子:
h(t)=10*exp(-20*t)*sin(20*pi*t)
f(t)=5*sin(10*pi*t)
f(t)取三个周期的点,h(t)取点数为f(t)取点数的两倍

前期工作:
N=1024;
T=0.1;
delt=T/N;
t1=0:delt:(6*N-1)*delt;
t2=0:delt:(3*N-1)*delt; %3 cycles of ft%
lt1=length(t1);
lt2=length(t2);
leng=lt1+lt2-1;
ht=10*exp(-20*t1).*sin(20*pi*t1);
htt=;
ft=5*sin(20*pi*t2);
ftt=;

方法一:FFT算法
H=fft(htt);
F=fft(ftt);
figure;
plot(htt);
figure;
plot(ftt);
X=H.*F;
x=ifft(X);
figure;
plot(x,'b');

方法二:公式算法
y=zeros(1,leng);
for i=1:leng
    temp=0;
    for j=1:leng
      if i>=j
            temp=temp+htt(j).*ftt(i+1-j);
      else
            break;
      end
    end
    y(i)=temp;
end
hold on;
plot(y,'r--');

方法三:Matlab自带的conv
FT=conv(ht,ft);
hold on;
plot(FT,'g--');

希望能对新手有帮助,同时也感谢之前各位前辈给予的帮助。

daren007 发表于 2008-11-5 08:46

我觉得你的总结没有还要深入

建议你分别加tic,toc命令来考察一下三个算法的执行时间,可以加深你对算法执行效率优劣的判断。
你会发现,第二种算法执行速度最慢,所以应该尽量避免使用循环。
最重要的是分析比较算法。
希望对你有所帮助。

jww100 发表于 2008-11-5 09:14

原帖由 daren007 于 2008-11-5 08:46 发表 http://www.chinavib.com/forum/images/common/back.gif
建议你分别加tic,toc命令来考察一下三个算法的执行时间,可以加深你对算法执行效率优劣的判断。
你会发现,第二种算法执行速度最慢,所以应该尽量避免使用循环。
最重要的是分析比较算法。
希望对你有所帮助。

感谢前辈指点!
希望以后多给予批评指正

[ 本帖最后由 jww100 于 2008-11-5 09:16 编辑 ]
页: [1]
查看完整版本: 【总结】卷积的三种算法