实现卷积_数字信号处理的卷积运算实现

一、卷积的定义

在数字信号处理中,当一个系统是线性时不变系统时,引出了卷积;卷积是线性和时不变性的一个直接结果。

卷积的公式为:

即如果已知所有的x[n]和h[n]就可由卷积公式求出输出序列y[n]。

二、卷积的计算

在使用该公式进行计算时,由h[k]求出h[n-k]需要分两步进行:

首先,将h[k]关于k=0反转;

然后,将反转后的信号延迟n个样本。

例:考虑一个系统,单位脉冲响应为

输入是

,求出y[n]。

886c969afc5e24f93deab60d04e7e10c.gif

有一点需注意,卷积运算后,序列的长度变为

三、Matlab实现

使用Matlab做出以上动图真的是费了我九牛二虎之力。

hk = ones(1,8);
hk = flip(hk);%序列反转
Nhk = length(hk);
n = 0:Nhk-1;
subplot(4,1,1);stem(n,hk);grid on;title('h[k]');axis([-20,20,0,1]);

a = 0.8;
n = 1:6;
xn = a.^n;
xk = [zeros(1,10),xn,zeros(1,10-length(n)+1)];
t = (0:length(xk)-1)-10;
subplot(4,1,2);stem(t,xk);grid on;title('x[k]');axis([-20,20,0,1]);

gifname = 'mycov.gif';

yn = [];
index = 1;
for N = -11:19
%     pause(0.1);
    n = (0:Nhk-1)+N-Nhk+1;
    subplot(4,1,3);cla;stem(n,hk);grid on;title(['h[n-k], ','n=',num2str(N)]);axis([-20,20,0,1]);
    if -10<=N && N <=17
        if N+11 <=8
            y0 = sum(xk(1:N+11));          
        elseif N+11 <=21
            y0 = sum(xk(N+11-7:N+11));
        elseif N+11 <=28
            y0 = sum(xk(end-N+17:end));
        end
        yn = [yn,y0];
        t = (0:length(yn)-1)-10;
        subplot(4,1,4);cla;stem(t,yn,'r');grid on;title(['yn, ','n=',num2str(N)]);axis([-20,20,0,3]);
    end


    f=getframe(gcf);
    [A,map] = rgb2ind(f.cdata,256);
    if N==-11
        imwrite(A,map,gifname,'gif','LoopCount',Inf,'DelayTime',0.3);
    else
        imwrite(A,map,gifname,'gif','WriteMode','append','DelayTime',0.3);
    end
    index = index+1;
end

四、总结

1.自己手动又编辑一遍卷积实现后,对卷积如何计算又加深理解。

2.Matlab代码实现动图需要clf掉图像,再显示。

3.Matlab保存动图需要先读取Figure里的图片,再存入到gif中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值