求解卷积
方法一:使用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;