声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2007|回复: 2

[编程技巧] 【总结】卷积的三种算法

[复制链接]
发表于 2008-11-1 06:12 | 显示全部楼层 |阅读模式

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

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

x
例子:
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=[ht,zeros(1,(leng-lt1))];
ft=5*sin(20*pi*t2);
ftt=[ft,zeros(1,(leng-lt2))];

方法一: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--');

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

评分

1

查看全部评分

回复
分享到:

使用道具 举报

发表于 2008-11-5 08:46 | 显示全部楼层

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

建议你分别加tic,toc命令来考察一下三个算法的执行时间,可以加深你对算法执行效率优劣的判断。
你会发现,第二种算法执行速度最慢,所以应该尽量避免使用循环。
最重要的是分析比较算法。
希望对你有所帮助。
 楼主| 发表于 2008-11-5 09:14 | 显示全部楼层
原帖由 daren007 于 2008-11-5 08:46 发表
建议你分别加tic,toc命令来考察一下三个算法的执行时间,可以加深你对算法执行效率优劣的判断。
你会发现,第二种算法执行速度最慢,所以应该尽量避免使用循环。
最重要的是分析比较算法。
希望对你有所帮助。


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

[ 本帖最后由 jww100 于 2008-11-5 09:16 编辑 ]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-12 03:04 , Processed in 0.060334 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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