求在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去不掉 展开
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去不掉 展开
1个回答
展开全部
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中这个函数的源代码
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中这个函数的源代码
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |