数字信号处理实验课老师让用原始定义求卷积,对于我这种小菜鸡来说感觉好难,挣扎了好久才写出来。
第一个是用来conv函数。
function juanji
%利用conv求卷积
nx=-1:5;
nh=-2:10;
% x=SF(nx)-SF(nx-5);
x=cos(2*pi*0.1*nx).*[SF(nx-1)-SF(nx-6)];
h=(7/8).^nh.*SF(nh)-SF(nh-10);
y=conv(x,h);
ny1=nx(1)+nh(1);%卷积起点
ny=ny1+(0:(length(nx)+length(nh)-2));%卷积终点
subplot(3,1,1);
stem(nx,x,'fill');
grid on;
% xlabel('n'),title('x(n)=u(n)-u(n-5)');
xlabel('n'),title('cos(2*pi*0.1*nx)*[u(n-1)-u(n-6)]');
axis([-4 16 -2 3]);
subplot(3,1,2);
stem(nh,h,'fill');
grid on;
xlabel('n'),title('h(n)=(7/8)^n*[u(n)-u(n-10)]');
axis([-4 16 -2 3]);
subplot(3,1,3);
stem(ny,y,'fill');
grid on;
xlabel('n'),title('y(n)=x(n)*h(n)');
axis([-4 16 -2 5]);
这个是利用向量-矩阵法做的,我之前在CSDN里面搜好像没有这样子算的,可能是比较偏吧,但是我觉得比一次一次迭代好想多了。
function juanji1
%利用定义(向量-矩阵法)求卷积
nx=-1:5;
nh=-2:10;
% x=SF(nx)-SF(nx-5);
x=cos(2*pi*0.1*nx).*[SF(nx-1)-SF(nx-6)];
h=(7/8).^nh.*SF(nh)-SF(nh-10);
ny1=nx(1)+nh(1);%卷积起点
L=length(nx)+length(nh)-1;%卷积长度
M=length(nx);%x(n)长度
ny=ny1+(0:L-1);%卷积终点
h(1,L)=0;
H=h;
for i=1:M-1
c=[zeros(1,i),h(1:L-i)];
H=[H;c];
end
y=x*H;
subplot(3,1,1);
stem(nx,x,'fill');
grid on;
% xlabel('n'),title('x(n)=u(n)-u(n-5)');
xlabel('n'),title('cos(2*pi*0.1*nx)*[u(n-1)-u(n-6)]');
axis([-4 16 -2 3]);
subplot(3,1,2);
h=(7/8).^nh.*SF(nh)-SF(nh-10);
stem(nh,h,'fill');
grid on;
xlabel('n'),title('h(n)=(7/8)^n*[u(n)-u(n-10)]');
axis([-4 16 -2 3]);
subplot(3,1,3);
stem(ny,y,'fill');
grid on;
xlabel('n'),title('y(n)=x(n)*h(n)');
axis([-4 16 -2 5]);