⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 数字信号处理实验matlab程序(二).txt

📁 数字信号处理课程,1.信号采样及编程环境;2.信号、系统及频响,用于学生上机练习。
💻 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 + -