易妖游戏网
您的当前位置:首页数字信号处理实验程序清单

数字信号处理实验程序清单

来源:易妖游戏网
.

实验一: 系统响应及系统稳定性

%实验1:系统响应及系统稳定性

close all;clear all

%======内容1:调用filter解差分方程,由系统对u(n)的响应判断稳定性==

A=[1,-0.9];B=[0.05,0.05]; %系统差分方程系数向量B和A

x1n=[1 1 1 1 1 1 1 1 zeros(1,50)]; %产生信号x1(n)=R8(n)

x2n=ones(1,128); %产生信号x2(n)=u(n)

hn=impz(B,A,58); %求系统单位脉冲响应h(n)

subplot(2,2,1);y='h(n)';tstem(hn,y); %调用函数tstem绘图

title('(a) 系统单位脉冲响应h(n)');box on

y1n=filter(B,A,x1n); %求系统对x1(n)的响应y1(n)

subplot(2,2,2);y='y1(n)';tstem(y1n,y);

title('(b) 系统对R8(n)的响应y1(n)');box on

y2n=filter(B,A,x2n); %求系统对x2(n)的响应y2(n)

..

.

subplot(2,2,4);y='y2(n)';tstem(y2n,y);

title('(c) 系统对u(n)的响应y2(n)');box on

%===内容2:调用conv函数计算卷积========

x1n=[1 1 1 1 1 1 1 1 ]; %产生信号x1(n)=R8(n)

h1n=[ones(1,10) zeros(1,10)];

h2n=[1 2.5 2.5 1 zeros(1,10)];

y21n=conv(h1n,x1n);

y22n=conv(h2n,x1n);

figure(2)

subplot(2,2,1);y='h1(n)';tstem(h1n,y); %调用函数tstem绘图

title('(d) 系统单位脉冲响应h1(n)');box on

subplot(2,2,2);y='y21(n)';tstem(y21n,y);

title('(e) h1(n)与R8(n)的卷积y21(n)');box on

subplot(2,2,3);y='h2(n)';tstem(h2n,y); %调用函数tstem绘图

..

.

title('(f) 系统单位脉冲响应h2(n)');box on

subplot(2,2,4);y='y22(n)';tstem(y22n,y);

title('(g) h2(n)与R8(n)的卷积y22(n)');box on

%=========内容3:谐振器分析================

un=ones(1,256); %产生信号u(n)

n=0:255;

xsin=sin(0.014*n)+sin(0.4*n); %产生正弦信号

A=[1,-1.8237,0.9801];B=[1/100.49,0,-1/100.49]; %系统差分方程系数向量B和A

y31n=filter(B,A,un); %谐振器对u(n)的响应y31(n)

y32n=filter(B,A,xsin); %谐振器对u(n)的响应y31(n)

figure(3)

subplot(2,1,1);y='y31(n)';tstem(y31n,y);

title('(h) 谐振器对u(n)的响应y31(n)');box on

subplot(2,1,2);y='y32(n)';tstem(y32n,y);

..

.

title('(i) 谐振器对正弦信号的响应y32(n)');box on

tstem 程序清单

function tstem(xn,yn)

%时域序列绘图函数

% xn:信号数据序列,yn:绘图信号的纵坐标名称(字符串)

n=0:length(xn)-1;

stem(n,xn,'.');box on

xlabel('n');ylabel(yn);

axis([0,n(end),min(xn),1.2*max(xn)])

实验二 时域采样与频域采样

1 时域采样理论的验证程序清单

% 时域采样理论验证程序exp2a.m

Tp=/1000; %观察时间Tp=微秒

%产生M长采样序列x(n)

..

.

% Fs=1000;T=1/Fs;

Fs=1000;T=1/Fs;

M=Tp*Fs;n=0:M-1;

A=444.128;alph=pi*50*2^0.5;omega=pi*50*2^0.5;

xnt=A*exp(-alph*n*T).*sin(omega*n*T);

Xk=T*fft(xnt,M); %M点FFT[xnt)]

yn='xa(nT)';subplot(3,2,1);

tstem(xnt,yn); %调用自编绘图函数tstem绘制序列图

box on;title('(a) Fs=1000Hz');

k=0:M-1;fk=k/Tp;

subplot(3,2,2);plot(fk,abs(Xk));title('(a) T*FT[xa(nT)],Fs=1000Hz');

xlabel('f(Hz)');ylabel('幅度');axis([0,Fs,0,1.2*max(abs(Xk))])

%========================================

% Fs=300Hz和 Fs=200Hz的程序与上面Fs=1000Hz完全相同。

..

.

2 频域采样理论的验证程序清单

%频域采样理论验证程序exp2b.m

M=27;N=32;n=0:M;

%产生M长三角波序列x(n)

xa=0:floor(M/2); xb= ceil(M/2)-1:-1:0; xn=[xa,xb];

Xk=fft(xn,1024);%1024点FFT[x(n)], 近似序列x(n)的TF

X32k=fft(xn,32) ;%32点FFT[x(n)]

x32n=ifft(X32k); %32点IFFT[X32(k)]得到x32(n)

X16k=X32k(1:2:N); %隔点抽取X32k得到X16(K)

x16n=ifft(X16k,N/2); %16点IFFT[X16(k)]得到x16(n)

subplot(3,2,2);stem(n,xn,'.');box on

title('(b) 三角波序列x(n)');xlabel('n');ylabel('x(n)');axis([0,32,0,20])

k=0:1023;wk=2*k/1024; %

..

.

subplot(3,2,1);plot(wk,abs(Xk));title('(a)FT[x(n)]');

xlabel('\\omega/\\pi');ylabel('|X(e^j^\\omega)|');axis([0,1,0,200])

k=0:N/2-1;

subplot(3,2,3);stem(k,abs(X16k),'.');box on

title('(c) 16点频域采样');xlabel('k');ylabel('|X_1_6(k)|');axis([0,8,0,200])

n1=0:N/2-1;

subplot(3,2,4);stem(n1,x16n,'.');box on

title('(d) 16点IDFT[X_1_6(k)]');xlabel('n');ylabel('x_1_6(n)');axis([0,32,0,20])

k=0:N-1;

subplot(3,2,5);stem(k,abs(X32k),'.');box on

title('(e) 32点频域采样');xlabel('k');ylabel('|X_3_2(k)|');axis([0,16,0,200])

n1=0:N-1;

subplot(3,2,6);stem(n1,x32n,'.');box on

title('(f) 32点IDFT[X_3_2(k)]');xlabel('n');ylabel('x_3_2(n)');axis([0,32,0,20])

..

.

实验三:用FFT对信号作频谱分析

% 用FFT对信号作频谱分析

clear all;close all

%实验内容(1)===================================================

x1n=[ones(1,4)]; %产生序列向量x1(n)=R4(n)

M=8;xa=1:(M/2); xb=(M/2):-1:1; x2n=[xa,xb]; %产生长度为8的三角波序列x2(n)

x3n=[xb,xa];

X1k8=fft(x1n,8); %计算x1n的8点DFT

X1k16=fft(x1n,16); %计算x1n的16点DFT

X2k8=fft(x2n,8); %计算x2n的8点DFT

X2k16=fft(x2n,16); %计算x2n的16点DFT

X3k8=fft(x3n,8); %计算x3n的8点DFT

X3k16=fft(x3n,16); %计算x3n的16点DFT

%以下绘制幅频特性曲线

..

.

subplot(2,2,1);mstem(X1k8); %绘制8点DFT的幅频特性图

title('(1a) 8点DFT[x_1(n)]');xlabel('ω/π');ylabel('幅度');

axis([0,2,0,1.2*max(abs(X1k8))])

subplot(2,2,3);mstem(X1k16); %绘制16点DFT的幅频特性图

title('(1b)16点DFT[x_1(n)]');xlabel('ω/π');ylabel('幅度');

axis([0,2,0,1.2*max(abs(X1k16))])

figure(2)

subplot(2,2,1);mstem(X2k8); %绘制8点DFT的幅频特性图

title('(2a) 8点DFT[x_2(n)]');xlabel('ω/π');ylabel('幅度');

axis([0,2,0,1.2*max(abs(X2k8))])

subplot(2,2,2);mstem(X2k16); %绘制16点DFT的幅频特性图

title('(2b)16点DFT[x_2(n)]');xlabel('ω/π');ylabel('幅度');

axis([0,2,0,1.2*max(abs(X2k16))])

subplot(2,2,3);mstem(X3k8); %绘制8点DFT的幅频特性图

..

.

title('(3a) 8点DFT[x_3(n)]');xlabel('ω/π');ylabel('幅度');

axis([0,2,0,1.2*max(abs(X3k8))])

subplot(2,2,4);mstem(X3k16); %绘制16点DFT的幅频特性图

title('(3b)16点DFT[x_3(n)]');xlabel('ω/π');ylabel('幅度');

axis([0,2,0,1.2*max(abs(X3k16))])

%实验内容(2) 周期序列谱分析==================================

N=8;n=0:N-1; %FFT的变换区间N=8

x4n=cos(pi*n/4);

x5n=cos(pi*n/4)+cos(pi*n/8);

X4k8=fft(x4n,8); %计算x4n的8点DFT

X5k8=fft(x5n,8); %计算x5n的8点DFT

N=16;n=0:N-1; %FFT的变换区间N=16

x4n=cos(pi*n/4);

x5n=cos(pi*n/4)+cos(pi*n/8);

..

.

X4k16=fft(x4n); %计算x4n的16点DFT

X5k16=fft(x5n); %计算x5n的16点DFT

figure(3)

subplot(2,2,1);mstem(X4k8); %绘制8点DFT的幅频特性图

title('(4a) 8点DFT[x_4(n)]');xlabel('ω/π');ylabel('幅度');

axis([0,2,0,1.2*max(abs(X4k8))])

subplot(2,2,3);mstem(X4k16); %绘制16点DFT的幅频特性图

title('(4b)16点DFT[x_4(n)]');xlabel('ω/π');ylabel('幅度');

axis([0,2,0,1.2*max(abs(X4k16))])

subplot(2,2,2);mstem(X5k8); %绘制8点DFT的幅频特性图

title('(5a) 8点DFT[x_5(n)]');xlabel('ω/π');ylabel('幅度');

axis([0,2,0,1.2*max(abs(X5k8))])

subplot(2,2,4);mstem(X5k16); %绘制16点DFT的幅频特性图

title('(5b)16点DFT[x_5(n)]');xlabel('ω/π');ylabel('幅度');

..

.

axis([0,2,0,1.2*max(abs(X5k16))])

%实验内容(3) 模拟周期信号谱分析===============================

figure(4)

Fs=;T=1/Fs;

N=16;n=0:N-1; %FFT的变换区间N=16

x6nT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T); %对x6(t)16点采样

X6k16=fft(x6nT); %计算x6nT的16点DFT

X6k16=fftshift(X6k16); %将零频率移到频谱中心

Tp=N*T;F=1/Tp; %频率分辨率F

k=-N/2:N/2-1;fk=k*F; %产生16点DFT对应的采样点

..

.

频率(以零频率为中心)

subplot(3,1,1);stem(fk,abs(X6k16),'.');box on %绘制8点DFT的幅频特性图

title('(6a) 16点|DFT[x_6(nT)]|');xlabel('f(Hz)');ylabel('幅度');

axis([-N*F/2-1,N*F/2-1,0,1.2*max(abs(X6k16))])

N=32;n=0:N-1; %FFT的变换区间N=16

x6nT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T); %对x6(t)32点采样

X6k32=fft(x6nT); %计算x6nT的32点DFT

X6k32=fftshift(X6k32); %将零频率移到频谱中心

Tp=N*T;F=1/Tp; %频率分辨率F

k=-N/2:N/2-1;fk=k*F; %产生16点DFT对应的采样点频率(以零频率为中心)

subplot(3,1,2);stem(fk,abs(X6k32),'.');box on %绘制8点DFT的幅频特性图

title('(6b) 32点|DFT[x_6(nT)]|');xlabel('f(Hz)');ylabel('幅度');

axis([-N*F/2-1,N*F/2-1,0,1.2*max(abs(X6k32))])

N=;n=0:N-1; %FFT的变换区间N=16

..

.

x6nT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T); %对x6(t)点采样

X6k=fft(x6nT); %计算x6nT的点DFT

X6k=fftshift(X6k); %将零频率移到频谱中心

Tp=N*T;F=1/Tp; %频率分辨率F

k=-N/2:N/2-1;fk=k*F; %产生16点DFT对应的采样点频率(以零频率为中心)

subplot(3,1,3);stem(fk,abs(X6k),'.'); box on%绘制8点DFT的幅频特性图

title('(6a) 点|DFT[x_6(nT)]|');xlabel('f(Hz)');ylabel('幅度');

axis([-N*F/2-1,N*F/2-1,0,1.2*max(abs(X6k))])

mstem程序清单

function mstem(Xk)

% mstem(Xk)绘制频域采样序列向量Xk的幅频特性图

M=length(Xk);

k=0:M-1;wk=2*k/M; %产生M点DFT对应的采样点频率(关于π归一化值)

stem(wk,abs(Xk),'.');box on %绘制M点DFT的幅频特性图

..

.

xlabel('ω/π');ylabel('幅度');axis([0,2,0,1.2*max(abs(Xk))])

实验四IIR数字滤波器设计及软件实现

% IIR数字滤波器设计及软件实现

clear all;close all

Fs=10000;T=1/Fs; %采样频率

%调用信号产生函数mstg产生由三路抑制载波调幅信号相加构成的复合信号st

st=mstg;

%低通滤波器设计与实现=========================================

fp=280;fs=450;

wp=2*fp/Fs;ws=2*fs/Fs;rp=0.1;rs=60; %DF指标(低通滤波器的通、阻带边界频)

[N,wp]=ellipord(wp,ws,rp,rs); %调用ellipord计算椭圆DF阶数N和通带截止频率wp

[B,A]=ellip(N,rp,rs,wp); %调用ellip计算椭圆带通DF系统函数系数向量B和A

y1t=filter(B,A,st); %滤波器软件实现

% 低通滤波器设计与实现绘图部分

..

.

figure(2);subplot(3,1,1);

myplot(B,A); %调用绘图函数myplot绘制损耗函数曲线

yt='y_1(t)';

subplot(3,1,2);tplot(y1t,T,yt); %调用绘图函数tplot绘制滤波器输出波形

%带通滤波器设计与实====================================================

fpl=440;fpu=560;fsl=275;fsu=900;

wp=[2*fpl/Fs,2*fpu/Fs];ws=[2*fsl/Fs,2*fsu/Fs];rp=0.1;rs=60;

[N,wp]=ellipord(wp,ws,rp,rs); %调用ellipord计算椭圆DF阶数N和通带截止频率wp

[B,A]=ellip(N,rp,rs,wp); %调用ellip计算椭圆带通DF系统函数系数向量B和A

y2t=filter(B,A,st); %滤波器软件实现

% 带通滤波器设计与实现绘图部分(省略)

%高通滤波器设计与实================================================

fp=0;fs=600;

..

.

wp=2*fp/Fs;ws=2*fs/Fs;rp=0.1;rs=60; %DF指标(低通滤波器的通、阻带边界频)

[N,wp]=ellipord(wp,ws,rp,rs); %调用ellipord计算椭圆DF阶数N和通带截止频率wp

[B,A]=ellip(N,rp,rs,wp,'high'); %调用ellip计算椭圆带通DF系统函数系数向量B和A

y3t=filter(B,A,st); %滤波器软件实现

% 高低通滤波器设计与实现绘图部分(省略)

myplot程序清单

function myplot(B,A)

%myplot(B,A)

%时域离散系统损耗函数绘图

%B为系统函数分子多项式系数向量

%A为系统函数分母多项式系数向量

[H,W]=freqz(B,A,1000);

m=abs(H);

plot(W/pi,20*log10(m/max(m)));grid on;

..

.

xlabel('\\omega/\\pi');ylabel('幅度(dB)')

axis([0,1,-80,5]);title('损耗函数曲线');

tplot程序清单

function tplot(xn,T,yn)

%时域序列连续曲线绘图函数

% xn:信号数据序列,yn:绘图信号的纵坐标名称(字符串)

% T为采样间隔

n=0:length(xn)-1;t=n*T;

plot(t,xn);

xlabel('t/s');ylabel(yn);

axis([0,t(end),min(xn),1.2*max(xn)])

实验五:FIR数字滤波器设计与软件实现

% FIR数字滤波器设计及软件实现

clear all;close all;

..

.

%==调用xtg产生信号xt, xt长度N=1000,并显示xt及其频谱,=========

N=1000;xt=xtg(N);

fp=120; fs=150;Rp=0.2;As=60;Fs=1000; % 输入给定指标

% (1) 用窗函数法设计滤波器

wc=(fp+fs)/Fs; %理想低通滤波器截止频率(关于pi归一化)

B=2*pi*(fs-fp)/Fs; %过渡带宽度指标

Nb=ceil(11*pi/B); %blackman窗的长度N

hn=fir1(Nb-1,wc,blackman(Nb));

Hw=abs(fft(hn,1024)); % 求设计的滤波器频率特性

ywt=fftfilt(hn,xt,N); %调用函数fftfilt对xt滤波

%以下为用窗函数法设计法的绘图部分(滤波器损耗函数,滤波器输出信号波形)

%省略

% (2) 用等波纹最佳逼近法设计滤波器

fb=[fp,fs];m=[1,0];

..

% 确定remezord函数所需参数f,m,dev

.

dev=[(10^(Rp/20)-1)/(10^(Rp/20)+1),10^(-As/20)];

[Ne,fo,mo,W]=remezord(fb,m,dev,Fs); % 确定remez函数所需参数

hn=remez(Ne,fo,mo,W); % 调用remez函数进行设计

Hw=abs(fft(hn,1024)); % 求设计的滤波器频率特性

yet=fftfilt(hn,xt,N); % 调用函数fftfilt对xt滤波

%以下为用等波纹设计法的绘图部分(滤波器损耗函数,滤波器输出信号yw(nT)波形)

%省略

..

因篇幅问题不能全部显示,请点此查看更多更全内容