📄 数字信号处理实验matlab程序(二).txt
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%ntvc xjh 2007-10-12%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%实验二 上机内容(1)参考程序1:电子051、053班使用%%%%%%%%%%%%%%%%%%%%%%
%采用矩阵运算来计算频率响应
w=[0:1:500]*pi/500; %[0,pi]分为501个点
X1=1-exp(-1*j*w*6);
X2=1-exp(-1*j*w);
X22=X2+(X2==0)*eps; %逻辑数组参加运算,使“0”被机器零代替
X=X1./X22; %计算出频率响应
magX=abs(X); %取其幅度
angX=angle(X).*180./pi; %取其相位;
figure(1)
subplot(2,1,1);
plot(w/pi,magX);
title('幅频响应');ylabel('幅度');
subplot(2,1,2);
plot(w/pi,angX);
title('相频特性');ylabel('相位(以“度”为单位)');xlabel('以pi为单位');
%以下程序仅是为了调用zplane和impz函数来作零极点图和单位脉冲响应
b=[1,0,0,0,0,0,-1]; %b是由分子多项式系数构成的数组;
a=[1,-1]; %a是由分母多项式系数构成的数组;
figure(2)
subplot(2,1,1);zplane(b,a);title('零极点图');
subplot(2,1,2);impz(b,a);
%%%%%%%%%%%%%%%%%%%%%%%%上机内容(1)参考程序2:电子052班使用%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%使用MATLAB信号处理工具包中的函数freqz来计算频率响应。b是由分子多项式系数构成的数组;
%a是由分母多项式系数构成的数组;
b=[1,0,0,0,0,0,-1]; %b是由分子多项式系数构成的数组;
a=[1,-1]; %a是由分母多项式系数构成的数组;
[h,w]=freqz(b,a);
am=20*log10(abs(h)); %%取其幅度,并转换成以(dB)为单位
ph=angle(h); %%取其相位。
w1=w/pi; %方便绘图时横轴以pi为单位
figure(1)
subplot(2,1,1);
plot(w1,am);title('幅频响应');ylabel('幅度(dB)');
subplot(2,1,2);
plot(w1,ph);title('相频特性');ylabel('相位(以“弧度”为单位)');xlabel('以pi为单位');
figure(2)
subplot(2,1,1);zplane(b,a);title('零极点图');
subplot(2,1,2);impz(b,a);
%%%%%%%%%%%%%%%%%%%%%%%%%上机内容(2)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x=[1,1,1,0,0,0,0];N=7;
nxtide=0:4*7-1;
xtide=x(mod(nxtide,N)+1);
stem(nxtide,xtide);axis([0 27 0 1]);
XK=dfs(x,N); %dfs函数先自建,具体内容见附录
magXK=abs(XK);
angXK=angle(XK).*180./pi;
K=[0:6];
subplot(2,1,1);stem(K,magXK);
title('幅度部分');ylabel('振幅');
subplot(2,1,2);stem(K,angXK);xlabel('K');ylabel('相位');
title('相位部分');axis([0 6 -180 180]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%附dfs函数内容,点击MATLAB菜单File/new/M-file,将下列内容输入后,并保存为函数名。
function [XK]=dfs(x,N)
%计算离散傅里叶级数
%调用形式:[XK]=dfs(x,N)
%x是周期序列的一个周期序列值,0<=n<=N-1
%XK是DFS结果,0<=k<=N-1
%N是一个周期的长度
n=[0:1:N-1];
k=[0:1:N-1];
WN=exp(-j*2*pi/N);
nk=n'*k;
WNnk=WN.^nk;
XK=x*WNnk;
%%%%%%%%%%%%%%%%%%%%%%%%%上机内容(3)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x=[3,11,7,0,-1,4,2]; nx=[-3:3];
h=[2,3,0,-5,2,1]; nh=[-1:4];
[y,ny]=conv_m(x,nx,h,nh); %先建conv_m函数
subplot(3,1,1);stem(nx,x);axis([-4 7 -1 11]);title('x(n)');
subplot(3,1,2);stem(nh,h);axis([-4 7 -5 3]);title('h(n)');
subplot(3,1,3);stem(ny,y);axis([-4 7 -51 50]);title('卷积结果y(n)=x(n)*h(n)');
%%%%%%%%%%%%%%%%%%%%%%%%%
%附conv_m函数内容
function [y,ny]=conv_m(x,nx,h,nh)
%conv进一步完善程序,可用来计算任意位置序列的卷积。
%调用格式:[y,ny]=conv_m(x,nx,h,nh)
%[y,ny]是卷积结果
%[x,nx]是第一个序列信号
%[h,nh]是第二个序列信号
%
nyb=nx(1)+nh(1);
nye=nx(length(x))+nh(length(h));
ny=[nyb:nye];
y=conv(x,h);
%%%%%%%%%%%%%%%%%%%%%%%%%上机内容(4)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
subplot(1,1,1);
n=-5:5;
x=(-0.9).^n;
k=-200:200;
w=(pi/100)*k;
X=x*(exp(-j*pi/100)).^(n'*k); %求DTFT
magX=abs(X); %取幅度
angX=angle(X); %取相角
subplot(2,1,1);plot(w/pi,magX);grid
axis([-2 2 0 15]);
xlabel('频率以pi为单位');ylabel('幅度|X|');
subplot(2,1,2);plot(w/pi,angX/pi);grid
axis([-2 2 -1 1]);
xlabel('频率以pi为单位');ylabel('相位(rad/pi)');
%%%%%%%%%%%%%%%%%%%%%%%%%上机内容(5)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%附dft函数内容
function [Xk]=dft(x,N)
%该函数用来计算DFT
%调用形式:[XK]=dft(x,N)
%x是N点有限长序列值,0<=n<=N-1
%XK是DFT结果,0<=k<=N-1
%N是计算DFT的点数
n=[0:1:N-1];
k=[0:1:N-1];
WN=exp(-j*2*pi/N); %旋转因子
nk=n'*k;
WNnk=WN.^nk;
Xk=x*WNnk;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
K1=[0:3];
x=[1 1 1 1];
N1=4;
Xk=dft(x,N1);
magXk=abs(Xk); %DFT的模
phaXk=angle(Xk).*180./pi; %DFT的相角
w=[0:1:500]*2*pi/500;
X1=1-exp(-j*w*4);
X2=1-exp(-j*w);
X22=X2+(X2==0)*eps;
X=X1./X22;
magX=abs(X); %X连续傅里叶变换的模
K2=[0:11];
yn=[1 1 1 1 0 0 0 0 0 0 0 0 ];
N2=12;
Yk=dft(yn,N2);
magYk=abs(Yk); %DFT的模
w=[0:1:500]*2*pi/500;
Y1=1+exp(-j*w)+exp(-j*w*2)+exp(-j*w*3); %分子多项式
Y2=1;
Y=Y1./Y2;
magY=abs(Y); %Y连续傅里叶变换的模
%以下是绘图语句
subplot(2,2,1);stem(K1,x);title('信号x(n)');axis([0 4 -0.1 1.2]);
subplot(2,2,2);plot(2*w/pi,magX,'--');hold on;title('X幅度函数及抽样');
ylabel('振幅');stem(K1,magXk);axis([0 4 -0.5 5]);
subplot(2,2,3); stem(K2,yn);title('信号y(n)');axis([0,12,-0.1,1.2]);
subplot(2,2,4); plot(6*w/pi,magY,'--');hold on;
title('Y幅度函数及抽样');ylabel('振幅');
stem(K2,magYk);axis([0,12,-0.5,5]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -