数字信号处理实验报告-MATLAB

实验题目:离散信号的时域运算与变换

实验目的:1. 熟悉MATLAB编程特点

          2. 了解离散序列的延迟、相加、相乘及平移、反折、及倒相变换

实验内容:1.设计一个实现序列移位的函数 

将序列x(n)={1,2,3,4,0,7},其中n=0:5的每一个样本都移动3个周期,移位后的序列y(n)=x(n-3)

2.序列的奇偶分解

将序列x(n)={0,1,2,3,4,3,2,1,0},其中n=-3:5进行奇偶分解

      

用函数stem显示其奇偶序列

3.序列的加法运算

      

设x1(n)={1,0.5,0.3,0.4}其中n=-1:2 ;x2(n)={0.2,0.3,0.4,0.5,0.8,1}其中n=-2:3

        4.实现2中序列的翻转

实验地点:4305

实验结果:1.将如下文件另存为:segshift.m文件,

function [y,n] = segshift(x,n,n0)

% 功能 y(n) = x(n-n0)

% [y,n] = segshift(x,n,n0)

n = n+n0; y = x;

在命令窗口输入:x=[1,2,3,4,0,7];n=0:5;n0=3;[y,n] = segshift(x,n,n0)按ENTER键得到如下结果,

y =

     1     2     3     4     0     7

n =

     3     4     5     6     7     8

再在命令窗口输入:[y,n] = segshift(x,n,n0);n=0:5;n0=3;stem(n,y)按ENTER键出图如下图1。

2. 在命令窗口输入: m = -fliplr(n);

m1 = min([m,n]); m2 = max([m,n]); m = m1:m2;

x1 =[ zeros(1,(length(m)-length(n))),x];

xe = 0.5*(x1 + fliplr(x1))

xo = 0.5*(x1 - fliplr(x1))

subplot(1,2,1),stem(m,xe),ylabel(xe),

subplot(1,2,2),stem(m,xo),ylabel(xo),

得下图二,

                                                                   图二

图一

3.将如下文件另存为:sigadd.m文件

function [y,n] = sigadd(x1,n1,x2,n2)

% 实现 y(n) = x1(n)+x2(n)

% -----------------------------

% [y,n] = sigadd(x1,n1,x2,n2)

%   y = 在包含n1 和 n2 的n点上求序列和,

%  x1 = 在 n1上的第一序列

%  x2 = 在 n2上的第二序列(n2可与 n1不等)

n = min(min(n1),min(n2)):max(max(n1),max(n2)); % y(n)的长度

y1 = zeros(1,length(n)); y2 = y1;              % 初始化

y1(find((n>=min(n1))&(n<=max(n1))==1))=x1;     % 具有y的长度的 x1

y2(find((n>=min(n2))&(n<=max(n2))==1))=x2;     % 具有y的长度的x2

y = y1+y2;       

在命令窗口输入:x1=[1,0.5,0.3,0.4];n1=-1:2;x2=[0.2,0.3,0.4,0.5,0.8,1];n2=-2:3; [y,n] = sigadd(x1,n1,x2,n2)

得:y =

    0.2000    1.3000    0.9000    0.8000    1.2000    1.0000

n =

-2    -1     0     1     2     3

再在命令窗口输入:x1=[1,0.5,0.3,0.4];n1=-1:2;x2=[0.2,0.3,0.4,0.5,0.8,1];n2=-2:3;[y,n]=sigadd(x1,n1,x2,n2) ;stem(n,y),得到下图:

4. 将如下文件另存为.m文件

n=-1:10;

x=sin(0.4*pi*n);

y=fliplr(x);

n1=-fliplr(n);

subplot(2,1,1),stem(n,x)                                

subplot(2,1,2),stem(n1,y

在命令窗口键入:

n=-1:10;

x=sin(0.4*pi*n);

y=fliplr(x);

n1=-fliplr(n);

subplot(2,1,1),stem(n,x)

subplot(2,1,2),stem(n1,y)

得到如右图,

结果分析结果如上

总结:运用MATLAB实现离散信号的时域运算与变换,主要包括两步,首先赋初值然后再调用函数,在带哦用函数时,注意不要把function复制进来了。。

实验报告(二)

姓名:      学号:        实验日期:8-12周

实验题目:因果离散线性系统的时域分析

实验目的:实现由差分方程构成的数字滤波器:

   

 

实验内容:1.用两种不同的程序计算数字滤波器的单位抽样响应

,

给定差分方程:y(n)-y(n-1)+0.9y(n-2)=x(n)

a.编制文件himpz.m,实现数字滤波器的单位抽样响应

b. 编制函数文件hfilter.m,实现数字滤波器的单位抽样响应

2.给定

计算此数字滤波器的单位阶跃响应

,并判断系统的稳定性。用stem(n,y)画出相应的图形。

实验地点:4305

实验结果:1.(1)在命令窗口键入:a=[1,-1,0.9];b=1;                           

impz(b,a)                                   

 title('单位抽样响应'),得到右图:

(2)在命令窗口键入:

a=[1,-1,0.9];b=1;                           

impz(b,a)                                   

 title(‘单位冲激响应’)                              

(2)hfilter.m

a=[1,-1,0.9];b=1;   

% 求h(n)

x=impuls (0,-10,100);n=[-10:100];

h=filter(b,a,x);

subplot(2,1,1);stem(n,h)

axis([-10,100,-1.1,1.1]) title(‘单位激响应’);xlabel(‘n’);ylabel(‘h(n)’)

得到右图   

2.在命令窗口输入:a=[1,-1,0.9];b=1;

x=[zeros(1,10),ones(1,101)];

n=-10:100;

s=filter(b,a,x);

subplot(2,1,2);stem(n,s)

axis([-10,100,-.5,2.5])

得到右图阶跃响应:                                        

在命令窗口键入:sum(abs(h))

z=roots(a);

magz=abs(z)

程序运行结果:

ans =

   14.8337

magz =

 0.9487

 0.9487

h(n)累加的结果是一个实数,说明系统稳定;magz说明极点的模小于1,所以系统稳定。

结果分析结果如上

总结:用MATLAB可以实现求冲击响应及阶跃响应。

                               实验报告(三)

姓名:        学号:        实验日期:8-12周

实验题目:DFT变换的性质及应用

实验目的:1.实现信号的DFT变换

          2. 了解DFT 应用:

(1)用DFT计算卷积

           (2)用DFT 对序列进行谱分析  

实验内容:1.用三种不同的DFT程序计算

的傅立叶变换X(k),并比较三种程序的计算机运行时间

2.给定

,

利用DFT实现两序列的线性卷积运算,并研究DFT的点数与混叠的关系,并用stem(n,y)画出相应的图形。

3. 讨论序列补零及增加数据长度对信号频谱的影响

(1)求出序列x(n)=cos(0.48 n)+cos(0.52 n)基于有限个样点n=10的频谱

(2) 求n=100时,取x(n)的前10个,后90个设为零,得到x(n)的频谱

(3) 增加x(n)有效的样点数,取100个样点得到x(n)的频谱

实验地点:4305

实验结果:1.(1)在命令窗口输入:

tic; [am,pha]=dft1(x)

N=length(x);

w=exp(-j*2*pi/N);

for k=1:N

sum=0;

for n=1:N

     sum=sum+x(n)*w^((k-1)*(n-1));

  end

  am(k)=abs(sum);

  pha(k)=angle(sum);

end

;toc

得到如下结果:

am =

  Columns 1 through 11

  120.0000   41.0066   20.9050   14.3996   11.3137    9.6215    8.6591    8.1567    8.0000    8.1567    8.6591

  Columns 12 through 16

    9.6215   11.3137   14.3996   20.9050   41.0066

pha =

  Columns 1 through 11

         0    1.7671    1.9635    2.1598    2.3562    2.5525    2.7489    2.9452    3.1416   -2.9452   -2.7489

  Columns 12 through 16

   -2.5525   -2.3562   -2.1598   -1.9635   -1.7671

Elapsed time is 0.047000 seconds.

(2)在命令窗口输入:

tic;[am,pha]=dft2(x)

N=length(x);

n=[0:N-1];

k=[0:N-1];

w=exp(-j*2*pi/N);

nk=n’*k;

wnk=w.^(nk);

Xk=x*wnk;

am= abs(Xk);

pha=angle(Xk);

toc

得到如下结果:

Elapsed time is 0.020000 seconds.

(3) 在命令窗口输入:

tic;[amfft,phafft]=dft3(x)

N=length(x);

Xk=fft(x);

amfft= abs(Xk);

phafft=angle(Xk);

toc

得到如下结果

Elapsed time is 0.016000 seconds.

所以,第三种时间最小,第一种时间最多。

2.在命令窗口键入:

%N1+N2-1=23<32

N=32;

x=[0:15];

xx=[x,zeros(1,16) ];

h=[ones(1,8),zeros(1,24)];

Xk=fft(xx,N);

Hk=fft(h,N);

Yk=Xk.* Hk;

y=ifft(Yk,N);

n=0:N-1;

stem(n,y);

hold on

%N=N1=16

N1=16;

x1=[0:15];

h1=[ones(1,8),zeros(1,8)];

Xk1=fft(x1,N1);

Hk1=fft(h1,N1);

Yk1=Xk1.* Hk1;

y1=ifft(Yk1,N1);

n1=0:N1-1;

stem(n1,y1,’.’,’m’);

得到下图,

3.(1) figure(1):在命令窗口键入:

n=[0:1:99];

x=cos(0.48*pi*n)+cos(0.52*pi*n);

n1=[0:1:9];y1=x(1:1:10);

subplot(2,1,1);stem(n1,y1);title('signal x(n), 0 <= n <= 9');xlabel('n')

axis([0,10,-2.5,2.5])

Y1=fft(y1);magY1=abs(Y1(1:1:6));

k1=0:1:5;w1=2*pi/10*k1;

subplot(2,1,2);stem(w1/pi,magY1);title(‘10DFT');

xlabel('w/pi')axis([0,1,0,10])

得到下图:figure(1)

(2)在命令窗口键入:

n3=[0:1:99];y3=[x(1:1:10) zeros(1,90)]; %90个零。得到100个数据

subplot(2,1,1);stem(n3,y3);title('signal x(n), 0 <= n <= 9 + 90 zeros');xlabel('n')

axis([0,100,-2.5,2.5])

Y3=fft(y3);magY3=abs(Y3(1:1:51));

k3=0:1:50;w3=2*pi/100*k3;

subplot(2,1,2);stem(w3/pi,magY3);title('100DFT');xlabel('w/pi')

axis([0,1,0,10])

得到下图figure(2)

(3)在命令窗口键入:

n=[0:1:99];

x=cos(0.48*pi*n)+cos(0.52*pi*n);

subplot(2,1,1);stem(n,x);title('signal x(n), 0 <= n <= 99');xlabel('n')

axis([0,100,-2.5,2.5])

X=fft(x);magX=abs(X(1:1:51));

k=0:1:50;w=2*pi/100*k;

subplot(2,1,2);stem(w/pi,magX);title('100点DFT);xlabel('w/pi')

axis([0,1,0,60])

得到下图figure(3)

结果分析结果如上

总结:利用matlab7.0可以实现DFT变换,并绘制图形。

实验报告(四)

姓名:        学号:        实验日期:8-12周

实验题目:数字低通巴特沃斯滤波器的设计

实验目的:掌握IIR数字滤波器的设计方法

实验内容:1.设计一个低通巴特沃斯模拟滤波器,绘制滤波器的的幅频响应及零极点图。指标如下:

通带截止频率:WP=1000HZ,  通带最大衰减:RP=3dB

阻带截止频率:Ws=2000HZ,  阻带最小衰减:Rs=40 dB

2. 用冲激响应不变法和双线性变换法将一模拟低通滤波器转换为数字低通滤波器

并图释H(S)和H(Z),采样频率Fs=1000Hz

实验地点:4305

实验结果:1.在命令窗口输入:subplot(1,2,1)               

wp=1000;ws=2000;rp=3;rs=40;   

[N,wn]=buttord(wp,ws,rp,rs,'s')  

[B,A]=butter(N,wn,'s');   

[Z,P,K]=buttap(N);      

 [h,w]=freqs(B,A,1024);   

plot(w,20*log10(abs(h)/abs(h(1))))

grid;

xlabel('频率Hz');ylabel('幅度(dB)')

title('巴特沃斯幅频响应')          

axis([0,3000, -40,3]);

line([0,2000],[-3,-3]);

line([1000,1000],[-40,3]);

subplot(1,2,2)                  

p=P';q=Z';

x=max(abs([p,q]));

x=x+0.1;y=x;

axis([-x,x,-y,y]);

axis('square')

plot([-x,x],[0,0]);hold on

plot([0,0],[-y,y]);hold on

plot(real(p),imag(p),'x')

得到如下结果:

N =

 7

wn =

1.0359e+003

2:在命令窗口键入:

b=1;a=[1,1000];

w=[0:1000]*2*pi;

[h,w]=freqs(b,a,w);

subplot(2,2,1)

plot(w/2/pi,abs(h)/abs(h(1)));grid;

title('模拟频率响应');

xlabel('f(Hz)');ylabel('幅度');                                    

Fs=1000;

[bz,az]=impinvar(b,a,Fs);                                      

[bzl,azl]=bilinear(b,a,Fs);  

wz=[0:pi/512:pi];

hz1=freqz(bz,az,wz);

hz2=freqz(bzl,azl,wz);

subplot(2,2,2);plot(wz/pi,abs(hz1)/hz1(1));grid;

axis([0,1,0,1])                            

title('冲激响应不变法数字频率响应')        

subplot(2,2,3);plot(wz/pi,abs(hz2)/hz2(1));grid;

axis([0,1,0,1])                             

title('双线性变换法数字频率响应');  

得到结果如右图::

                                                  

   

结果分析结果如上

总结:matlaB可以实现低通数字巴特沃斯滤波器的设计

实验报告(五)

姓名:        学号:         实验日期:8-12周

实验题目:窗函数设计FIR滤波器

实验目的:掌握利用窗函数法设计线性相位FIR数字滤波器的方法

实验内容:1. 利用窗生成函数boxcar,hanning,bartlett设计FIR低通数字滤波器,指标如下:采样频率Fs=1000Hz,截止频率ws=200Hz,滤波器阶数N=65,画出滤波器的幅度频率特性和窗的形状,参考程序chfir1.m

2. 用基于窗函数的滤波器设计函数fir1,重新设计上述滤波器

实验地点:4305

实验结果:在命令窗口键入:

wp=200/1000*2*pi;

n=1:65;

hd=sin(wp*(n-32))./(pi*(n-32));

hd(32)=wp/pi;                  

w1=boxcar(65);                

subplot(2,3,1)              

h1=hd.*rot90(w1);         

[mag1,r1]=freqz(h1);      

plot(r1,20*log(abs(mag1)));

title('矩形窗')          

w2=triang(65);             

subplot(2,3,2)

h2=hd.*rot90(w2);        

[mag2,r2]=freqz(h2);

plot(r2,20*log(abs(mag2)));

title('巴特里特窗')

w3=hanning(65);            

subplot(2,3,3)

h3=hd.*rot90(w3);           

[mag3,r3]=freqz(h3);

plot(r3,20*log(abs(mag3)));  

title('汉宁窗')

subplot(2,3,4);

plot(n,w1);   

subplot(2,3,5);

plot(n,w2);

subplot(2,3,6);

plot(n,w3);

得到右图结果:

结果分析结果如上

总结:matlab可以实现利用窗函数设计滤波器。

  • 18
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值