数字信号处理实验指导

2018-11-07 19:03

实验一、抽样定理 (一)实验目的:

1、验证乃奎斯特采样定理,加深对时域采样信号频谱变化的认识。

2、掌握序列傅里叶变换的计算机实现方法,利用序列傅里叶变换对连续信号、离散信号及系统响应进行频域分析。 (二)实验内容:

1、设x(n)=(0.8.) nu(n)。

(1)利用conv函数求出x(n)*x(n)的前50个样本,并作图。 相关m文件: nb=0:50; n=0:100; x=(0.8).^nb; yb=conv(x,x); stem(n,yb); xlabel('n'); ylabel('yb(n)');

title('convlution output');

(2) 利用filter函数求出x(n)*x(n)的前50个样本,并作图。 相关m文件: nb=0:50; x=(0.8).^nb;

yb=filter(1,[1,-0.8],x); stem(nb,yb); axis([-1,51,-1,3]) xlabel('n');

ylabel('y_b(n)'); title('Filter output');

2、考虑模拟信号xa(t)?sin( 20?t),0?t?1,在Ts=0.01s, 0.05s和0.1s间隔采样得到x(n)。(1)对每一个Ts,画出x(n)。

(2)采用sinc内插(用Δt=0.001)用样本x(n)重建模拟信号ya(t),并从图中求出在ya(t)中的频率(不管末端效果)。

(3)采用三次样条内插从样本x(n)重建模拟信号,并从图中求出在ya(t)中的频率(不管末端效果)。

相关m文件: (1)

t=0:0.001:1;xa=cos(20*pi*t);

Ts=0.01;N1=round(1/Ts);n1=0:N1;x1=cos(20*pi*n1*Ts); subplot(3,1,1);plot(t,xa,n1*Ts,x1,'o');

ylabel('x_1(n)');title('Sampling of x_a(t) using Ts=0.01'); Ts=0.05;N2=round(1/Ts);n2=0:N2;x2=cos(20*pi*n2*Ts); subplot(3,1,2);plot(t,xa,n2*Ts,x2,'o');

ylabel('x_2(n)');title('Sampling of x_a(t) using Ts=0.05'); Ts=0.1;N3=round(1/Ts);n3=0:N3;x3=cos(20*pi*n3*Ts); subplot(3,1,3);plot(t,xa,n3*Ts,x3,'o');

ylabel('x_3(n)');title('Sampling of x_a(t) using Ts=0.1');

(2)

Ts=0.01;Fs=1/Ts;

xa1=x1*sinc(Fs*(ones(length(n1),1)*t-(n1*Ts)'*ones(1,length(t)))); subplot(3,1,1);plot(t,xa1);axis([0,1,-1.1,1.1]);

ylabel('x_a(t)');title('Reconstruction of x_a(t) when Ts=0.01'); Ts=0.05;Fs=1/Ts;

xa2=x2*sinc(Fs*(ones(length(n2),1)*t-(n2*Ts)'*ones(1,length(t)))); subplot(3,1,2);plot(t,xa2);axis([0,1,-1.1,1.1]);

ylabel('x_a(t)');title('Reconstruction of x_a(t) when Ts=0.05'); Ts=0.1;Fs=1/Ts;

xa3=x3*sinc(Fs*(ones(length(n3),1)*t-(n3*Ts)'*ones(1,length(t)))); subplot(3,1,3);plot(t,xa3);axis([0,1,-1.1,1.1]);

ylabel('x_a(t)');title('Reconstruction of x_a(t) when Ts=0.1');

(3)

Ts=0.01;Fs=1/Ts;

xa1=spline(Ts*n1,x1,t);

subplot(3,1,1);plot(t,xa1);axis([0,1,-1.1,1.1]);

ylabel('x_a(t)');title('Reconstruction of x_a(t) when Ts=0.01'); Ts=0.05;Fs=1/Ts;

xa2=spline(Ts*n2,x2,t);

subplot(3,1,2);plot(t,xa2);axis([0,1,-1.1,1.1]);

ylabel('x_a(t)');title('Reconstruction of x_a(t) when Ts=0.05'); Ts=0.1;Fs=1/Ts;

xa3=spline(Ts*n3,x3,t);

subplot(3,1,3);plot(t,xa3);axis([0,1,-1.1,1.1]);

ylabel('x_a(t)');title('Reconstruction of x_a(t) when Ts=0.1');

实验二、应用FFT实现实现信号频谱分析。 (一)实验目的:

1、进一步加深对DFT算法原理和基本性质的理解(因为FFT只是DFT的一种快速算法,所以FFT的运算结果必然满足DFT的基本性质)。

2、学习用FFT对连续信号和时域离散信号进行频谱分析的方法,了解可能出现的误差及原因,以便在实际应用中正确使用FFT这一工具。。 (二)实验内容:

1、考虑长度为5的有限长序列x(0)=1, x(1)=3, x(2)=5, x(3)=1, x(4) =1,设采样周期为0.5s,要求用FFT来计算其频谱。 相关m文件:

x=[1,3,5,3,1];nx=0:4;T=0.5; % 给定原始数据 N=length(x);D=2*pi/(N*T); % 求出序列长度及频率分辨率 k=floor((-(N-1)/2):((N-1)/2)); % 求对称于零频率的FFT位置向量 X=fftshift(fft(x,N)); % 求对称于零频率的FFT序列值 subplot(2,1,1),plot(k*D,abs(X),'o:') % 画幅频特性图 subplot(2,1,2),plot(k*D,angle(X),'o:') % 画相频特性图

2、用FFT计算下列连续时间信号的频谱。

?e?0.01tco2st?2e?0.01t5sin2.1t,t?0 xa(t)???0,t?0

相关m文件:

T0=[0.6,0.15,0.15,0.15];

N0=[256,256,256,2048]; for r=1:4

T=T0(r);N=N0(r);n=0:N-1; D=2*pi/(N*T);

x=exp(-0.01*n*T).*cos(2*n*T)+2*exp(-0.015*n*T).*cos(2.1*n*T); Xa=T*fftshift(fft(x)); [r,Xa(1)]

k=floor(-(N-1)/2:(N-1)/2);

subplot(2,2,r),plot(k*D,abs(Xa))

end

0.48?n)?cos(0.52?n),0?n?99,试绘制x(n)及其离散傅里3、已知序列x(n)?2sin(叶变换X(m)的图形。

相关m文件:

N=100;n=0:N-1;

xn=2*sin(0.48*pi*n)+cos(0.52*pi*n); XK=fft(xn,N);

magXK=abs(XK);phaXK=angle(XK);

subplot(2,1,1),plot(n,xn),xlabel('n');ylabel('x(n)');title('x(n) N=100') subplot(2,1,2)

k=0:length(magXK)-1; stem(k,magXK, '.');

xlabel('k');ylabel('|X(k)|');title('X(k) N=100');

实验三、利用c语言实现FFT及IFFT算法。 (一) 实验目的: (二) 实验内容:

产生一个8点时域序列的正弦波数据源,利用基2时间抽取FFT算法将该数据序列转换为离散频域序列,然后再将产生的离散频域数据利用IDFT快速算法反演为离散时域数据,给出实现上述要求的程序流程图及C语言代码。要求:将运行结果截图保存 相关c文件:

/****************fft programe 时间抽取*************/ #include #include \#include \

struct compx /*定义一个复数结构*/ { double real; double imag; }compx;

struct compx EE(struct compx b1,struct compx b2)/*定义复数 相等结构*/ { struct compx b3; b3.real=b1.real*b2.real-b1.imag*b2.imag; b3.imag=b1.real*b2.imag+b1.imag*b2.real; return(b3); }

void FFT(struct compx *xin,int N)/*FFT变换函数*/ { int f,m,LH,nm,i,k,j,L; double p,ps; int le,B,ip;

double pi; struct compx w,t; LH=N/2; f=N; for(m=1;(f=f/2)!=1; m++) /* m为蝶形图的级数*/ {; } nm=N-2; j=N/2; /*变址运算*/ for(i=1;i<=nm;i++) { if(i=k) { j-=k; k/=2; }

j=j+k; } {

for(L=1;L<=m;L++) {

le=pow(2,L); B=le/2; pi=3.14159;

for(j=0;j<=B-1;j++) {

p=pow(2,m-L)*j; ps=(2*pi/N)*p; w.real=cos(ps); w.imag=-sin(ps);

for(i=j;i<=N-1;i=i+le) {

ip=i+B;

t=EE(xin[ip],w);

xin[ip].real=xin[i].real-t.real; /*基本蝶式运算*/ xin[ip].imag=xin[i].imag-t.imag; xin[i].real=xin[i].real+t.real;

xin[i].imag=xin[i].imag+t.imag; } } } }

return; }

#include #include #include float result[129]; struct compx s[129]; struct compx t[129]; int N=8;

double pp=3.14159; void main() {

int i;

for(i=0;i<8;i++) {

s[i].real=sin(pp*i/16); s[i].imag=0; t[i]=s[i];

printf(\

printf(\ printf(\ }

FFT(s,N);printf(\ for(i=0;i<8;i++) {

printf(\

printf(\ printf(\ }

for(i=0;i<8;i++) {

s[i].imag=-s[i].imag; }

FFT(s,N);

for(i=0;i<8;i++) {

s[i].real=s[i].real/N; s[i].imag=-s[i].imag/N; }

for(i=0;i<8;i++) {

s[i].real=t[i].real-s[i].real; s[i].imag=t[i].imag-s[i].imag; }

printf(\ for(i=0;i<8;i++) {

printf(\

printf(\ printf(\ } return; }

实验四、IIR滤波器设计。 (一)实验目的:

1、掌握Betterworth、Chebyshev滤波器的设计方法;

2、掌握脉冲响应不变法及双线性变换法设计滤波器的方法。 (二)实验内容:

1、设计一个满足一定指标的BW型模拟低通滤波器。(课本例4-10) 2、利用脉冲响应不变法设计一个BW型低通数字滤波器。(课本例4-12) 3、利用双线性变换法设计一个CBⅠ型低通数字滤波器。(课本例4-13) 实验五、FIR滤波器设计。 (一)实验目的:

1、掌握用窗函数法及频率采样法设计滤波器的方法; 2、熟悉线性相位FIR数字滤波器的特性; 3、了解厂函数及频率取样对滤波器的影响。 (二)实验内容:

1、利用窗函数法设计一个满足一定条件的Ⅰ型线性相位FIR高通滤波器。(课本例5-4)

2、利用频率取样法设计一个满足一定条件的Ⅱ型线性相位FIR低通滤波器。(课本例5-6) 实验六、抽取及内插滤波器的设计。 (一)实验目的: (二)实验内容: 1、抽取滤波器

输入信号x(n)由归一化频率为f1=0.043,f2=0.31的两个正弦信号叠加而成,长度N=100,抽取因子M=2。(1)不使用低通滤波器;(2)使用低通滤波器。分别画出输入及输出序列在时域和频域的图形。 clear;

N=100; %输入序列为100点

M=2; 抽取率为2

f1=0.043; %标准频率为0.043 f2=0.31; %标准频率为0.31 n=0:N-1;

x=sin(2*pi*f1*n)+ sin(2*pi*f2*n); %产生输入序列 y1=x(1:2:100); %产生直接抽取的序列 y2=decimate(x, M, ‘fir’); %采样率降低 %画出输入序列 figure(1);

stem(n,x(1:N));

title(‘input sequence’); xlabel (‘n’);ylabel (‘幅度’);

%画出抽取不经过滤波的输出序列 figure(2); n=0:N/2-1; stem(n,y1);

title(‘output sequence without LP’); xlabel (‘n’);ylabel (‘幅度’);

%画出抽取滤波后的输出序列 figure(3); m=0:N/M-1;

stem(m,y2(1:N/M));

title(‘output sequence with LP’); xlabel (‘n’);ylabel (‘幅度’);

%画出输入序列的频谱 figure(4);

[h,w]=freqz(x);

plot(w(1;512),abs(h(1:512)));

title(‘frequency spectrum of the input sequence’); xlabel (‘w ’);ylabel (‘幅度’);

%画出抽取不经过滤波的输出序列的频谱 figure(5);

[h,w]=freqz(y1);

plot(w(1;512),abs(h(1:512)));

title(‘frequency spectrum of the output sequence without LP’); xlabel (‘w’);ylabel (‘幅度’);

%画出抽取滤波后输出序列的频谱 figure(6);

[h,w]=freqz(y2); plot(w(1:512), abs(h(1:512)));

title('frequency spectrum of the output sequence with LP'); xlabel ('w'); ylabel ('幅度');

2、内插滤波器

输入信号x(n)由归一化频率为f1=0.043,f2=0.31的两个正弦信号叠加而成,长度N=50,内插因子N=2。(1)不使用低通滤波器;(2)使用低通滤波器。分别画出输入及输出序列在时域和频域的图形。 clear;

N=50; %输入序列为50点 L=2; %内插率为2

f1=0.043; %标准频率为0.043 f2=0.31; %标准频率为0.31 n=0:N-1;

x=sin(2*pi*f1*n)+sin(2*pi*f2*n); %产生输入序列 %画出输入序列 figure(1);

stem(n,x(1:N));

title('input sequence'); xlabel ('n'); ylabel ('幅度');

%不经过抗混叠滤波器的内插输出序列 y1=zeros(1,N*2); y1 (1:2:N*2)=x;

%画输出序列 figure(2); m=0:N*L-1;

stem(m,y1(1:N*L)); title('output sequence'); xlabel ('n');ylabel ('幅度');

%使用interp函数得到内插输出序列 y2=interp(x,L);

%画输出序列 figure(3); m=0:N*L-1;

stem(m,y2(1:N*L)); title('output sequence'); %xlable ('n');ylable('幅度');

%画出输入序列的频谱 figure(4);

[h,w]=freqz( x);

plot(w(1:512),abs(h(1:512)));

title('frequency spectrum of the input sequence'); %xlable ('w');ylable('幅度');

%画出内插后输出序列的频谱 figure(5);

[h,w]=freqz(y1);

plot(w(1:512),abs(h(1:512)));

title('frequency spectrum of the output sequence'); % xlable('w');ylable('幅度');

%画出内插后输出序列的频谱 figure(6);

[h,w]=freqz(y2);

plot(w(1:512),abs(h(1:512)));

title('frequency spectrum of the output sequence'); xlable('w');ylable('幅度');

实验七、利用matlab验证离散小波变换及逆变换的功能。(选作) (一)实验目的: (二)实验内容:

1、离散小波变换(课本例8-7) 2、离散小波逆变换(课本例8-8)


数字信号处理实验指导.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:大学普通化学习题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: