求解线性卷积

本文介绍了三种卷积操作的方法:使用标准的conv函数,自定义函数generalconv以适应任意起始点的卷积,以及通过频域相乘求解时域卷积。通过示例展示了这些方法在实际信号处理中的应用。
摘要由CSDN通过智能技术生成

方法一:使用conv \textbf{方法一:使用conv} 方法一:使用conv

conv有限制:序列必须从0开始

%% 直接使用conv进行卷积
%  conv默认从0开始进行卷积
figure("Color",'w');
sgtitle('直接使用conv卷积');
n1 = 0:20;
x1 = 0.8.^n1;

n2 = 0:10;
x2 = ones(1,length(n2));
y_1 = conv(x1,x2);

subplot(221);
stem(n1,x1,"filled");
grid on ; grid minor;
subplot(222);
stem(n2,x2,"filled");
grid on ; grid minor;
subplot(2,2,[3 4]);
stem(y_1,'filled');
grid on ; grid minor;
方法二:使用generalconv \textbf{方法二:使用generalconv} 方法二:使用generalconv

generalconv是自定义函数可以满足从任意时刻开始卷积

function [y,ny] = generalconv(x,nx,h,nh)
%% 通用的卷积函数,适用于信号从任意时刻开始

%y:     卷积积分的非零样值向量
%ny:    y对应的时间向量
%x:     信号时序幅值的样值向量
%nx:    x对应时间向量
%h:     系统或另一个信号的非零样值向量
%nh:    h对应时间向量
	
	n1 = nx(1)+nh(1);
	n2 = nx(length(x))+nh(length(h));
	ny = [n1:n2];
	y  = conv(x,h);
end
%% 复杂序列卷积运算(适用于信号从任意时间开始)
figure("Color",'w');
sgtitle('使用generalconv卷积');
n1 = 0:20;
x1 = 0.8.^n1;

n2 = 0:10;
x2 = ones(1,length(n2));

[y_2,ny_2]=generalconv(x1,n1,x2,n2);

subplot(221);
stem(n1,x1,"filled",'Color','#30BF7E');
grid on ; grid minor;
subplot(222);
stem(n2,x2,"filled",'Color','#30BF7E');
grid on ; grid minor;
subplot(2,2,[3 4]);
stem(ny_2,y_2,'filled','Color','#30BF7E');
grid on ; grid minor;
方法三:使用频域相乘 \textbf{方法三:使用频域相乘} 方法三:使用频域相乘
%% 从频域相乘求时域卷积
figure("Color",'w');

ny=length(x1)+length(x2)-1;
X1=fft(x1,ny);  %此处不用fft(x1,length(x1))为保证X1和X2长度一致
X2=fft(x2,ny);  %此处不用fft(x1,length(x1))为保证X1和X2长度一致

Y = X1.*X2;     %使用频域相乘
y_3= ifft(Y,ny);
subplot(221);
sgtitle("时域结果")
stem(n1,x1,"filled",'color','#BF4B30');
subplot(222);
stem(n2,x2,"filled",'color','#BF4B30');
subplot(2,2,[3 4]);
stem(y_3,'filled','color','#BF4B30');

figure("Color", 'w');
sgtitle("频域幅度谱结果");
subplot(221);
plot(abs(X1),'color','#FFAB00');
title('x1的幅度谱');grid on ; grid minor;
subplot(222);
plot(abs(X2),'color','#FFAB00');
title('x2的幅度谱');grid on ; grid minor;
subplot(2,2,[3 4]);
plot(abs(Y),'color','#FFAB00');
title('y的幅度谱');grid on ; grid minor;

figure("Color", 'w');
sgtitle('频域相位谱结果');
subplot(221);
plot(angle(X1),'color','#00CFFF');
title('x1的相位谱');grid on ; grid minor;
subplot(222);
plot(angle(X2),'color','#00CFFF');
title('x2的相位谱');grid on ; grid minor;
subplot(2,2,[3 4]);
plot(angle(Y),'color','#00CFFF');
title('y的相位谱');grid on ; grid minor;
  • 30
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暮光启行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值