求在matlab中不用conv函数直接实现离散卷积的编程

写一个函数,达到等效于conv的目的.在线等只有20财富,全部贡献啦functioncoresult=conv_my(A,B)C=fliplr(B);length1=le... 写一个函数,达到等效于conv的目的. 在线等 只有20财富,全部贡献啦
function coresult = conv_my(A,B)
C=fliplr(B);
length1 = length(A);
length2 = length(C);
if length1 ~= length2
if length1 > length2
C = [C zeros(1,length1-length2)];
else
A = [A zeros(1,length2-length1)];
end
end
N = length(A);
coresult = zeros(1,2*N-1);
for k = 1:N
temp{k} = A*C(k);
end
for k = 1:N
temp{k} = [zeros(1,2*N-1-k+1-N) temp{k} zeros(1,k-1)];
end
for k = 1:N
coresult = coresult+temp{k};
end

这是我前两天写的,测试结果是正确的,但是首尾的0去不掉
展开
 我来答
南瓜猪的的的
推荐于2018-04-11 · TA获得超过1297个赞
知道小有建树答主
回答量:1598
采纳率:0%
帮助的人:405万
展开全部
function a=myconv(b,c)
bs=size(b);
cs=size(c);
i=any(bs-cs);
if i
error('error')
end
i=any(~(bs-1));
if ~i
error('error')
end
ko=0;
if bs(1)>bs(2)
b=b';
c=c';
ko=1;
end
bs=size(b);
cs=size(c);
ss=2*bs(2)-1;
a=zeros(1,ss);
for i=1:cs(2)
q=zeros(1,i-1);
p=zeros(1,ss-cs(2)+1-i);
ba=[q,c,p];
ma=b(i)*ba;
a=a+ma;
end
if ko
a=a';
end
end
测试了一下,跟conv计算的结果偏差很小(我测试的结果是10^-15左右),执行效率略低(用cputime 测试rand(1,99),差了0.2964) 商业软件就是牛啊 真想知matlab中这个函数的源代码
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式