juanji_2.asv

来自「计算一维和二维卷积,基本可以替代Matlab中的conv和conv2函数,程序很」· ASV 代码 · 共 82 行

ASV
82
字号
%%####求离散的二维卷积####%%
clc;
clear all;
%%将f和h维数补齐#####%%%
f=[1,2;3,4];
h=[-1,1;-2,2];

M=2+2-1; N=2+2-1;
[mf,nf]=size(f);
for i=1:M
    for j=1:N
        if (i>mf) |(j>nf)
            fe(i,j)=0;
        else
            fe(i,j)=f(i,j);
        end
    end
end
[mh,nh]=size(h);
for i=1:M
    for j=1:N
        if (i>mh) |(j>nh)
            he(i,j)=0;
        else
            he(i,j)=h(i,j);
        end
    end
end
%%%%%%%%%%%

%%%构造列矢量F###%%%%
[mfe,nfe]=size(fe);
for i=1:mfe
    for j=1:nfe
        F(nfe*(i-1)+j)=fe(i,j);
    end
end
%%%%%%%%%%%%%%%%%%%%%

%%%构造块循环矩阵#####%%%%%
%   求取单个子块Hi,然后利用H[n*(mH-1+nH-1)%m+i,m*(nH-1)+j]=Hi(i,j)
%   求得整个移动后的循环块
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

[mhe,nhe]=size(he);
m=mhe;n=nhe;

for mH=1:m

    he_Next=he(mH,:)';
    Hi(:,1)=he_Next;
    for i=1:mhe-1
         he_Tmp=he_Next(nhe);
            for j=1:nhe-1
                he_Next(nhe-j+1)=he_Next(nhe-j);      
            end
         he_Next(1)=he_Tmp;
         Hi(:,i+1)=he_Next;
    end
    Hi
    [mHi,nHi]=size(Hi);
    for nH=1:n
        for i=1:mHi
            for j=1:nHi
                H(n*mod((mH-1+nH-1),m)+i,m*(nH-1)+j)=Hi(i,j);
            end
        end
    end
    
end
H
%%%%%%%%%%%%%%%%%%%%%%%%%%
g=H*F'


g=conv2(f,h)



⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?