📄 cai1.m
字号:
i=0;g=1;
while i==0
if g==1
x1=input('请输入x1:');x2=input('请输入x2:');
end
disp('1、动态演示2序列的线性卷积')
disp('2、动态演示2序列的圆周卷积')
disp('3、验证时域卷机定理')
disp('4、退出')
m=input('请选择菜单项目:');
while m==1
clear y6 y5 y4 y3 y2 y1 x11 x22 h y
p=length(x1);q=length(x2);n=p+q-1;
subplot(3,2,1)
a=0:1:p-1;
stem(a,x1)
title('x1(m)');
subplot(3,2,2)
a=0:1:q-1;
stem(a,x2)
title('x2(m)');
a=0:q-1;
y2(a+1)=x2(q-a);
for n=1:p+q-1
k=-q+n:1:-1+n;subplot(3,1,2)
stem(k,y2)
title('x2(n-m)');axis([-16,16,0,24]);
y=conv(x1,x2);
t=1:1:n
h(t)=y(t);
subplot(3,1,3)
t=0:n-1;
stem(t,h);
title('线性卷积y(n)')
axis([-16,16,0,24]);
pause(1)
end
disp('1、重新演示')
disp('2、返回主采单修改2序列的值')
disp('3、返回主菜单')
z=input('请选择,输入:')
if z==1
m=1;
elseif z==2
m=0;g=1;
else
m=0;g=0;
end
end
while m==2
N=input('请输入执行循环卷积的数N:');
clear y6 y5 y4 y3 y2 y1 x11 x22 h
p=length(x1);q=length(x2);k=max(p,q);%p<q
if k>N
if p<q&p<N
x11=[x1,zeros(1,N-p)];
n=0:1:N-1;
x22(n+1)=x2(n+1);
elseif p==q|p>N
n=0:1:N-1;
x11(n+1)=x1(n+1)
x22(n+1)=x2(n+1);
else disp('错误,x1的长度要比x2短')
end
subplot(3,2,1)
a=0:1:N-1;
stem(a,x11)
title('x1(m)');
subplot(3,2,2)
a=0:1:N-1;
stem(a,x22)
title('x2(m)');
a=0:N-2;
y2(1)=x22(1);
y2(a+2)=x22(N-a);
y3=[y2,y2];
for n=0:N-1
t=0:1:N-1;
y4(t+1)=y3(N+t+1-n);
subplot(3,1,2)
stem(t,y4);
title('x2(n-m)');axis([-16,16,0,24]);
y5=x11.*y4;
y6(n+1)=0;
v=length(y5);
for j=1:1:v
y6(n+1)=y5(j)+y6(n+1);
end
t=0:1:n;
subplot(3,1,3)
stem(t,y6);
title('y(n)')
axis([-16,16,0,24]);pause(1);
end
disp('1、重新演示,只改变N值')
disp('2、返回主采单修改2序列的值')
disp('3、返回主菜单')
z=input('请选择,输入:')
if z==1
m=2;
elseif z==2
m=0;g=1;
else
m=0;g=0;
end
else
clear y6 y5 y4 y3 y2 y1 x11 x22 h
x11=[x1,zeros(1,N-p)];
x22=[x2,zeros(1,N-q)];
subplot(3,2,1)
a=0:1:N-1;
stem(a,x11)
title('x1(m)');
subplot(3,2,2)
a=0:1:N-1;
stem(a,x22)
title('x2(m)');
a=0:N-2;
y2(1)=x22(1);
y2(a+2)=x22(N-a);
y3=[y2,y2];
for n=0:N-1
t=0:1:N-1;
y4(t+1)=y3(N+t+1-n)
subplot(3,1,2)
stem(t,y4);
title('x2(n-m)');axis([-16,16,0,24]);
y5=x11.*y4;
y6(n+1)=0;
v=length(y5);
for j=1:1:v
y6(n+1)=y5(j)+y6(n+1);
end
t=0:1:n;
subplot(3,1,3)
stem(t,y6);axis([-16,16,0,24]);pause(1);
end
disp('1、重新演示,只改变N值')
disp('2、返回主采单修改2序列的值')
disp('3、返回主菜单')
z=input('请选择,输入:');
if z==1
m=2;
elseif z==2
m=0;g=1;
else
m=0;g=0;
end
end
end
while m==3
clear y6 y5 y4 y3 y2 y1 x11 x22 h
p=length(x1);q=length(x2);
n=0:1:p+q-2;
figure
y1=conv(x1,x2);
stem(n,y1)
axis([0,max(p+q-1),0,max(y1)])
title('直接线性卷积结果y1')
figure
X1=fft(x1,p+q-1);
X2=fft(x2,p+q-1);
Y2=X1.*X2;
y2=ifft(Y2,p+q-1);
stem(n,y2)
axis([0,max(p+q-1),0,max(y2)])
title('频域相乘结果的时域y2')
figure
X1=fft(x1,p+q-1);
X2=fft(x2,p+q-1);
Y2=X1.*X2;
stem(n,abs(Y2))
axis([0,max(p+q-1),0,max(abs(Y2))])
title('频域相乘得到的频域幅度特性|Y2|')
figure
y1=conv(x1,x2);
Y1=fft(y1,p+q-1);
stem(n,abs(Y1))
axis([0,max(p+q-1),0,max(abs(Y1))])
title('直接线性卷积y1的频域幅度特性|Y1|')
disp('1、返回主采单修改2序列的值')
disp('2、返回主菜单')
z=input('请选择,输入:');
if z==1
m=0;g=1;
else
m=0;g=0;
end
end
while m==4
i=1;
m=0;
end
end
disp('本程序结束')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -