作业帮 > 综合 > 作业

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

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/11 14:50:47
求在matlab中不用conv函数直接实现离散卷积的编程
写一个函数,达到等效于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去不掉
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中这个函数的源代码