数字信号处理实验答案

时间:2024.4.20

第十章 上机实验

  

数字信号处理是一门理论和实际密切结合的课程,为深入掌握课程内容,最好在学习理论的同时,做习题和上机实验。上机实验不仅可以帮助读者深入的理解和消化基本理论,而且能锻炼初学者的独立解决问题的能力。本章在第二版的基础上编写了六个实验,前五个实验属基础理论实验,第六个属应用综合实验。

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

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

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

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

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

实验六 应用实验——数字信号处理在双音多频拨号系统中的应用

  

任课教师根据教学进度,安排学生上机进行实验。建议自学的读者在学习完第一章后作实验一;在学习完第三、四章后作实验二和实验三;实验四IIR数字滤波器设计及软件实现在。学习完第六章进行;实验五在学习完第七章后进行。实验六综合实验在学习完第七章或者再后些进行;实验六为综合实验,在学习完本课程后再进行。

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

1.实验目的

(1)掌握 求系统响应的方法。

(2)掌握时域离散系统的时域特性。

(3)分析、观察及检验系统的稳定性。

2.实验原理与方法

在时域中,描写系统特性的方法是差分方程和单位脉冲响应,在频域可以用系统函数描述系统特性。已知输入信号可以由差分方程、单位脉冲响应或系统函数求出系统对于该输入信号的响应,本实验仅在时域求解。在计算机上适合用递推法求差分方程的解,最简单的方法是采用MATLAB语言的工具箱函数filter函数。也可以用MATLAB语言的工具箱函数conv函数计算输入信号和系统的单位脉冲响应的线性卷积,求出系统的响应。

系统的时域特性指的是系统的线性时不变性质、因果性和稳定性。重点分析实验系统的稳定性,包括观察系统的暂态响应和稳定响应。

系统的稳定性是指对任意有界的输入信号,系统都能得到有界的系统响应。或者系统的单位脉冲响应满足绝对可和的条件。系统的稳定性由其差分方程的系数决定。

实际中检查系统是否稳定,不可能检查系统对所有有界的输入信号,输出是否都是有界输出,或者检查系统的单位脉冲响应满足绝对可和的条件。可行的方法是在系统的输入端加入单位阶跃序列,如果系统的输出趋近一个常数(包括零),就可以断定系统是稳定的[19]。系统的稳态输出是指当

时,系统的输出。如果系统稳定,信号加入系统后,系统输出的开始一段称为暂态效应,随n的加大,幅度趋于稳定,达到稳态输出。

注意在以下实验中均假设系统的初始状态为零。

3.实验内容及步骤

(1)编制程序,包括产生输入信号、单位脉冲响应序列的子程序,用filter函数或conv函数求解系统输出响应的主程序。程序中要有绘制信号波形的功能。

(2)给定一个低通滤波器的差分方程为

     

     输入信号 

              

     a) 分别求出系统对 和 的响应序列,并画出其波形。

     b) 求出系统的单位冲响应,画出其波形。

(3)给定系统的单位脉冲响应为

       

       

     用线性卷积法分别求系统h1(n)和h2(n)对 的输出响应,并画出波形。

(4)给定一谐振器的差分方程为

        

    令  ,谐振器的谐振频率为0.4rad。

    a) 用实验方法检查系统是否稳定。输入信号为 时,画出系统输出波形。

    b) 给定输入信号为

        

       求出系统的输出响应,并画出其波形。

4.思考题

(1) 如果输入信号为无限长序列,系统的单位脉冲响应是有限长序列,可否用线性卷积法求系统的响应? 如何求?

   (2)如果信号经过低通滤波器,把信号的高频分量滤掉,时域信号会有何变化,用前面      第一个实验结果进行分析说明。

5.实验报告要求

(1)简述在时域求系统响应的方法。

(2)简述通过实验判断系统稳定性的方法。分析上面第三个实验的稳定输出的波形。  

(3)对各实验所得结果进行简单分析和解释。

(4)简要回答思考题。

(5)打印程序清单和要求的各信号波形。

10.1.2 实验程序清单

%实验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)';stem(hn);    %调用函数stem绘图

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

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

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

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

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

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

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)';stem(h1n);    %调用函数stem绘图

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

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

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

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

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

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

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)';stem(y31n);

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

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

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

10.1.3 实验程序运行结果及分析讨论

程序运行结果如图10.1.1所示。

实验内容(2)系统的单位冲响应、系统对 和 的响应序列分别如图(a)、(b)和(c)所示;

实验内容(3)系统h1(n)和h2(n)对 的输出响应分别如图(e)和(g)所示;

实验内容(4)系统对 和 的响应序列分别如图(h)和(i)所示。由图(h)可见,系统对 的响应逐渐衰减到零,所以系统稳定。由图(i)可见,系统对

的稳态响应近似为正弦序列 ,这一结论验证了该系统的谐振频率是0.4 rad。

图10.1.1

10.1.4  简答思考题

(1)

如果输入信号为无限长序列,系统的单位脉冲响应是有限长序列,可否用线性卷积法求系统的响应。①对输入信号序列分段;②求单位脉冲响应h(n)与各段的卷积;③将各段卷积结果相加。具体实现方法有第三章介绍的重叠相加法和重叠保留法。

 

(2)如果信号经过低通滤波器,把信号的高频分量滤掉,时域信号的剧烈变化将被平滑,由实验内容(1)结果图10.1.1(a)、(b)和(c)可见,经过系统低通滤波使输入信号

、 和 的阶跃变化变得缓慢上升与下降。

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

10.2.1 实验指导

1. 实验目的

时域采样理论与频域采样理论是数字信号处理中的重要理论。要求掌握模拟信号采样前后频谱的变化,以及如何选择采样频率才能使采样后的信号不丢失信息;要求掌握频率域采样会引起时域周期化的概念,以及频率域采样定理及其对频域采样点数选择的指导作用。

2. 实验原理与方法

 时域采样定理的要点是:

a) 对模拟信号 以间隔T进行时域等间隔理想采样,形成的采样信号的频谱 是原模拟信号频谱 以采样角频率 ( )为周期进行周期延拓。公式为:

    

b) 采样频率 必须大于等于模拟信号最高频率的两倍以上,才能使采样信号的

   频谱不产生频谱混叠。

 利用计算机计算上式并不方便,下面我们导出另外一个公式,以便用计算机上进行实验。

 理想采样信号 和模拟信号 之间的关系为:

           

对上式进行傅立叶变换,得到:

           

           

在上式的积分号内只有当 时,才有非零值,因此:

            

上式中,在数值上 = ,再将 代入,得到:

                                           

上式的右边就是序列的傅立叶变换 ,即

                                             

上式说明理想采样信号的傅立叶变换可用相应的采样序列的傅立叶变换得到,只要将自变量ω用 代替即可。

   频域采样定理的要点是:

a) 对信号x(n)的频谱函数X(ejω)在[0,2π]上等间隔采样N点,得到

则N点IDFT[ ]得到的序列就是原序列x(n)以N为周期进行周期延拓后的主值区序列,公式为:

                

b) 由上式可知,频域采样点数N必须大于等于时域离散信号的长度M(即N≥M),才能使时域不产生混叠,则N点IDFT[ ]得到的序列 就是原序列x(n),即

=x(n)。如果N>M, 比原序列尾部多N-M个零点;如果N<M,z则 =IDFT[ ]发生了时域混叠失真,而且 的长度N也比x(n)的长度M短,因此。

与x(n)不相同。

   在数字信号处理的应用中,只要涉及时域或者频域采样,都必须服从这两个采样理论的要点。

  

对比上面叙述的时域采样原理和频域采样原理,得到一个有用的结论,这两个采样理论具有对偶性:“时域采样频谱周期延拓,频域采样时域信号周期延拓”。因此放在一起进行实验。

3. 实验内容及步骤

(1)时域采样理论的验证。

给定模拟信号,                      

式中A=444.128, =50 π, =50 πrad/s,它的幅频特性曲线如图10.2.1

         

                  图10.2.1   的幅频特性曲线

    现用DFT(FFT)求该模拟信号的幅频特性,以验证时域采样理论。

    安照 的幅频特性曲线,选取三种采样频率,即 =1kHz,300Hz,200Hz。观测时间选 。

   为使用DFT,首先用下面公式产生时域离散信号,对三种采样频率,采样序列按顺序用 , , 表示。

        

因为采样频率不同,得到的 , , 的长度不同, 长度(点数)用公式 计算。选FFT的变换点数为M=64,序列长度不够64的尾部加零。

X(k)=FFT[x(n)] ,  k=0,1,2,3,-----,M-1

式中k代表的频率为  。

要求: 编写实验程序,计算 、 和 的幅度特性,并绘图显示。观察分析频谱混叠失真。

(2)频域采样理论的验证。

给定信号如下:

   

编写程序分别对频谱函数 在区间 上等间隔采样32

和16点,得到 :

               

    

再分别对 进行32点和16点IFFT,得到 :

    

    

分别画出 、 的幅度谱,并绘图显示x(n)、 的波形,进行对比和分析,验证总结频域采样理论。

提示:频域采样用以下方法容易变程序实现。

① 直接调用MATLAB函数fft计算 就得到 在 的32点频率域采样

② 抽取 的偶数点即可得到 在 的16点频率域采样 ,即 。

○3 当然也可以按照频域采样理论,先将信号x(n)以16为周期进行周期延拓,取其主值区(16点),再对其进行16点DFT(FFT),得到的就是 在

的16点频率域采样 。

   4.思考题:

 如果序列x(n)的长度为M,希望得到其频谱 在 上的N点等间隔采样,当N<M时, 如何用一次最少点数的DFT得到该频谱采样?

5. 实验报告及要求

a) 运行程序打印要求显示的图形,。

        b) 分析比较实验结果,简述由实验得到的主要结论

c) 简要回答思考题

d) 附上程序清单和有关曲线。

10.2.2 实验程序清单

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

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

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

%产生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);

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

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])

10.2.3 实验程序运行结果

1

时域采样理论的验证程序运行结果exp2a.m如图10.3.2所示。由图可见,采样序列的频谱的确是以采样频率为周期对模拟信号频谱的周期延拓。当采样频率为1000Hz时频谱混叠很小;当采样频率为300Hz时,在折叠频率150Hz附近频谱混叠很严重;当采样频率为200Hz时,在折叠频率110Hz附近频谱混叠更很严重。

图10.2.2

2 时域采样理论的验证程序exp2b.m运行结果如图10.3.3所示。

图10.3.3

该图验证了频域采样理论和频域采样定理。对信号x(n)的频谱函数X(ejω)在[0,2π]上等间隔采样N=16时, N点IDFT[

]得到的序列正是原序列x(n)以16为周期进行周期延拓后的主值区序列:

由于N<M,所以发生了时域混叠失真,因此。

与x(n)不相同,如图图10.3.3(c)和(d)所示。当N=32时,如图图10.3.3(c)和(d)所示,由于N>M,频域采样定理,所以不存在时域混叠失真,因此。

与x(n)相同。

 10.2.4  简答思考题

 先对原序列x(n)以N为周期进行周期延拓后取主值区序列,

再计算N点DFT则得到N点频域采样:

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

10.3.1 实验指导

1.实验目的

     学习用FFT对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析

   误差及其原因,以便正确应用FFT。

2. 实验原理

用FFT对信号作频谱分析是学习数字信号处理的重要内容。经常需要进行谱分析的信号是模拟信号和时域离散信号。对信号进行谱分析的重要问题是频谱分辨率D和分析误差。频谱分辨率直接和FFT的变换区间N有关,因为FFT能够实现的频率分辨率是

,因此要求

。可以根据此式选择FFT的变换区间N。误差主要来自于用FFT作频谱分析时,得到的是离散谱,而信号(周期信号除外)是连续谱,只有当N较大时离散谱的包络才能逼近于连续谱,因此N要适当选择大一些。

周期信号的频谱是离散谱,只有用整数倍周期的长度作FFT,得到的离散谱才能代表周期信号的频谱。如果不知道信号周期,可以尽量选择信号的观察时间长一些。

对模拟信号进行谱分析时,首先要按照采样定理将其变成时域离散信号。如果是模拟周期信号,也应该选取整数倍周期的长度,经过采样后形成周期序列,按照周期序列的谱分析进行。

3.实验步骤及内容

(1)对以下序列进行谱分析。

      

   选择FFT的变换区间N为8和16 两种情况进行频谱分析。分别打印其幅频特性曲线。 并进行对比、分析和讨论。

(2)对以下周期序列进行谱分析。

            

            

选择FFT的变换区间N为8和16 两种情况分别对以上序列进行频谱分析。分别打印其幅频特性曲线。并进行对比、分析和讨论。

(3)对模拟周期信号进行谱分析

             

选择 采样频率 ,变换区间N=16,32,64 三种情况进行谱分析。分别打印其幅频特性,并进行分析和讨论。

4.思考题

(1)对于周期序列,如果周期不知道,如何用FFT进行谱分析?

(2)如何选择FFT的变换区间?(包括非周期信号和周期信号)

(3)当N=8时, 和 的幅频特性会相同吗?为什么?N=16 呢?

5.实验报告要求

(1)完成各个实验任务和要求。附上程序清单和有关曲线。

(2)简要回答思考题。

 10.3.2 实验程序清单

%第10章实验3程序exp3.m

% 用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);        %计算x1n的8点DFT

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

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

X3k16=fft(x3n,16);        %计算x1n的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);       %计算x4n的8点DFT

X5k8=fft(x5n);       %计算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=64;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=64;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)64点采样

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

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

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(X6k64),'.'); box on%绘制8点DFT的幅频特性图

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

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

10.3.3 实验程序运行结果

实验3程序exp3.m运行结果如图10.3.1所示。

图10.3.1

程序运行结果分析讨论:

请读者注意,用DFT(或FFT)分析频谱,绘制频谱图时,最好将X(k)的自变量k换算成对应的频率,作为横坐标便于观察频谱。

为了便于读取频率值,最好关于π归一化,即以 作为横坐标。

1、实验内容(1)

图(1a)和(1b)说明 的8点DFT和16点DFT分别是 的频谱函数的8点和16点采样;

因为 ,所以, 与 的8点DFT的模相等,如图(2a)和(3a)。但是,当N=16时, 与 不满足循环移位关系,所以图(2b)和(3b)的模不同。

2、实验内容(2),对周期序列谱分析

 的周期为8,所以N=8和N=16均是其周期的整数倍,得到正确的单一频率正弦波的频谱,仅在0.25π处有1根单一谱线。如图(4b)和(4b)所示。

的周期为16,所以N=8不是其周期的整数倍,得到的频谱不正确,如图(5a)所示。N=16是其一个周期,得到正确的频谱,仅在0.25π和0.125π处有2根单一谱线,

如图(5b)所示。

  3、实验内容(3),对模拟周期信号谱分析

         

 有3个频率成分, 。所以 的周期为0.5s。 采样频率 。变换区间N=16时,观察时间Tp=16T=0.25s,不是

的整数倍周期,所以所得频谱不正确,如图(6a)所示。变换区间N=32,64 时,观察时间Tp=0.5s,1s,是

的整数周期,所以所得频谱正确,如图(6b)和(6c)所示。图中3根谱线正好位于 处。变换区间N=64 时频谱幅度是变换区间N=32

时2倍,这种结果正好验证了用DFT对中期序列谱分析的理论。

注意:

(1)用DFT(或FFT)对模拟信号分析频谱时,最好将X(k)的自变量k换算成对应的模拟频率fk,作为横坐标绘图,便于观察频谱。这样,不管变换区间N取信号周期的几倍,画出的频谱图中有效离散谐波谱线所在的频率值不变,如图(6b)和(6c)所示。

(2)本程序直接画出采样序列N点DFT的模值,实际上分析频谱时最好画出归一化幅度谱,这样就避免了幅度值随变换区间N变化的缺点。本实验程序这样绘图只要是为了验证了用DFT对中期序列谱分析的理论。

10.3.4  简答思考题

思考题(1)和(2)的答案请读者在教材3.?节找,思考题(3)的答案在程序运行结果分析讨论已经详细回答。

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

   10.4.1 实验指导

1.实验目的

(1)熟悉用双线性变换法设计IIR数字滤波器的原理与方法;

(2)学会调用MATLAB信号处理工具箱中滤波器设计函数(或滤波器设计分析工具fdatool)设计各种IIR数字滤波器,学会根据滤波需求确定滤波器指标参数。

(3)掌握IIR数字滤波器的MATLAB实现方法。

(3)通过观察滤波器输入输出信号的时域波形及其频谱,建立数字滤波的概念。

2.实验原理

设计IIR数字滤波器一般采用间接法(脉冲响应不变法和双线性变换法),应用最广泛的是双线性变换法。基本设计过程是:①先将给定的数字滤波器的指标转换成过渡模拟滤波器的指标;

②设计过渡模拟滤波器;③将过渡模拟滤波器系统函数转换成数字滤波器的系统函数。MATLAB信号处理工具箱中的各种IIR数字滤波器设计函数都是采用双线性变换法。第六章介绍的滤波器设计函数butter、cheby1

、cheby2 和ellip可以分别被调用来直接设计巴特沃斯、切比雪夫1、切比雪夫2和椭圆模拟和数字滤波器。本实验要求读者调用如上函数直接设计IIR数字滤波器。

本实验的数字滤波器的MATLAB实现是指调用MATLAB信号处理工具箱函数filter对给定的输入信号x(n)进行滤波,得到滤波后的输出信号y(n)。

3. 实验内容及步骤

(1)调用信号产生函数mstg产生由三路抑制载波调幅信号相加构成的复合信号st,该函数还会自动绘图显示st的时域波形和幅频特性曲线,如图10.4.1所示。由图可见,三路信号时域混叠无法在时域分离。但频域是分离的,所以可以通过滤波的方法在频域分离,这就是本实验的目的。

图10.4.1  三路调幅信号st的时域波形和幅频特性曲线

(2)要求将st中三路调幅信号分离,通过观察st的幅频特性曲线,分别确定可以分离st中三路抑制载波单频调幅信号的三个滤波器(低通滤波器、带通滤波器、高通滤波器)的通带截止频率和阻带截止频率。要求滤波器的通带最大衰减为0.1dB,阻带最小衰减为60dB。

提示:抑制载波单频调幅信号的数学表示式为

其中, 称为载波,fc为载波频率, 称为单频调制信号,f0为调制正弦波信号频率,且满足

。由上式可见,所谓抑制载波单频调幅信号,就是2个正弦信号相乘,它有2个频率成分:和频 和差频

,这2个频率成分关于载波频率fc对称。所以,1路抑制载波单频调幅信号的频谱图是关于载波频率fc对称的2根谱线,其中没有载频成分,故取名为抑制载波单频调幅信号。容易看出,图10.4.1中三路调幅信号的载波频率分别为250Hz、500Hz、1000Hz。如果调制信号m(t)具有带限连续频谱,无直流成分,则

就是一般的抑制载波调幅信号。其频谱图是关于载波频率fc对称的2个边带(上下边带),在专业课通信原理中称为双边带抑制载波 (DSB-SC) 调幅信号,简称双边带

(DSB) 信号。如果调制信号m(t)有直流成分,则 就是一般的双边带调幅信号。其频谱图是关于载波频率fc对称的2个边带(上下边带),并包含载频成分。

(3)编程序调用MATLAB滤波器设计函数ellipord和ellip分别设计这三个椭圆滤波器,并绘图显示其幅频响应特性曲线。

(4)调用滤波器实现函数filter,用三个滤波器分别对信号产生函数mstg产生的信号st进行滤波,分离出st中的三路不同载波频率的调幅信号y1(n)、y2(n)和y3(n),

并绘图显示y1(n)、y2(n)和y3(n)的时域波形,观察分离效果。

4.信号产生函数mstg清单

function st=mstg

%产生信号序列向量st,并显示st的时域波形和频谱

%st=mstg 返回三路调幅信号相加形成的混合信号,长度N=1600

N=1600   %N为信号st的长度。

Fs=10000;T=1/Fs;Tp=N*T; %采样频率Fs=10kHz,Tp为采样时间

t=0:T:(N-1)*T;k=0:N-1;f=k/Tp;

fc1=Fs/10;  %第1路调幅信号的载波频率fc1=1000Hz,

fm1=fc1/10;    %第1路调幅信号的调制信号频率fm1=100Hz

fc2=Fs/20;   %第2路调幅信号的载波频率fc2=500Hz

fm2=fc2/10;    %第2路调幅信号的调制信号频率fm2=50Hz

fc3=Fs/40;  %第3路调幅信号的载波频率fc3=250Hz,

fm3=fc3/10;    %第3路调幅信号的调制信号频率fm3=25Hz

xt1=cos(2*pi*fm1*t).*cos(2*pi*fc1*t); %产生第1路调幅信号

xt2=cos(2*pi*fm2*t).*cos(2*pi*fc2*t); %产生第2路调幅信号

xt3=cos(2*pi*fm3*t).*cos(2*pi*fc3*t); %产生第3路调幅信号

st=xt1+xt2+xt3;         %三路调幅信号相加

fxt=fft(st,N);          %计算信号st的频谱

%====以下为绘图部分,绘制st的时域波形和幅频特性曲线====================

subplot(3,1,1)

plot(t,st);grid;xlabel('t/s');ylabel('s(t)');

axis([0,Tp/8,min(st),max(st)]);title('(a) s(t)的波形')

subplot(3,1,2)

stem(f,abs(fxt)/max(abs(fxt)),'.');grid;title('(b) s(t)的频谱')

axis([0,Fs/5,0,1.2]);

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

5.实验程序框图如图10.4.2所示,供读者参考。

图10.4.2  实验4程序框图

6.思考题

(1)请阅读信号产生函数mstg,确定三路调幅信号的载波频率和调制信号频率。

(2)信号产生函数mstg中采样点数N=800,对st进行N点FFT可以得到6根理想谱线。如果取N=1000,可否得到6根理想谱线?为什么?N=2000呢?请改变函数mstg中采样点数N的值,观察频谱图验证您的判断是否正确。

(3)修改信号产生函数mstg,给每路调幅信号加入载波成分,产生调幅(AM)信号,重复本实验,观察AM信号与抑制载波调幅信号的时域波形及其频谱的差别。

提示:AM信号表示式: 。

7.实验报告要求

(1)简述实验目的及原理。

(2)画出实验主程序框图,打印程序清单。

(3)绘制三个分离滤波器的损耗函数曲线。

(4)绘制经过滤波分理出的三路调幅信号的时域波形。

(5)简要回答思考题。

10.4.2 滤波器参数及实验程序清单

1、滤波器参数选取

观察图10.4.1可知,三路调幅信号的载波频率分别为250Hz、500Hz、1000Hz。带宽(也可以由信号产生函数mstg清单看出)分别为50Hz、100Hz、200Hz。所以,分离混合信号st中三路抑制载波单频调幅信号的三个滤波器(低通滤波器、带通滤波器、高通滤波器)的指标参数选取如下:

对载波频率为250Hz的条幅信号,可以用低通滤波器分离,其指标为

带截止频率 Hz,通带最大衰减 dB;

阻带截止频率 Hz,阻带最小衰减 dB,

对载波频率为500Hz的条幅信号,可以用带通滤波器分离,其指标为

带截止频率 Hz, Hz,通带最大衰减 dB;

阻带截止频率 Hz, Hz,Hz,阻带最小衰减 dB,

对载波频率为1000Hz的条幅信号,可以用高通滤波器分离,其指标为

带截止频率 Hz,通带最大衰减 dB;

阻带截止频率 Hz,阻带最小衰减 dB,

说明:(1)为了使滤波器阶数尽可能低,每个滤波器的边界频率选择原则是尽量使滤波器过渡带宽尽可能宽。

(2)与信号产生函数mstg相同,采样频率Fs=10kHz。

(3)为了滤波器阶数最低,选用椭圆滤波器。

按照图10.4.2 所示的程序框图编写的实验程序为exp4.m。

2、实验程序清单

%实验4程序exp4.m

% 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=890;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);     %滤波器软件实现

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

10.4.3 实验程序运行结果

实验4程序exp4.m运行结果如图104.2所示。由图可见,三个分离滤波器指标参数选取正确,算耗函数曲线达到所给指标。分离出的三路信号y1(n),y2(n)和y3(n)的波形是抑制载波的单频调幅波。

(a) 低通滤波器损耗函数及其分离出的调幅信号y1(t)

(b) 带通滤波器损耗函数及其分离出的调幅信号y2(t)

(c)高通滤波器损耗函数及其分离出的调幅信号y3(t)

 图104. 实验4程序exp4.m运行结果

10.4.4 简要回答思考题

思考题(1)已经在10.4.2节解答。思考题(3)很简单,请读者按照该题的提示修改程序,运行观察。

思考题(3)

因为信号st是周期序列,谱分析时要求观察时间为整数倍周期。所以,本题的一般解答方法是,先确定信号st的周期,在判断所给采样点数N对应的观察时间Tp=NT是否为st的整数个周期。但信号产生函数mstg产生的信号st共有6个频率成分,求其周期比较麻烦,故采用下面的方法解答。

分析发现,st的每个频率成分都是25Hz的整数倍。采样频率Fs=10kHz=25×400Hz,即在25Hz的正弦波的1个周期中采样400点。所以,当N为400的整数倍时一定为st的整数个周期。因此,采样点数N=800和N=2000时,对st进行N点FFT可以得到6根理想谱线。如果取N=1000,不是400的整数倍,不能得到6根理想谱线。

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

10.5.1 实验指导

1.实验目的

(1)掌握用窗函数法设计FIR数字滤波器的原理和方法。

(2)掌握用等波纹最佳逼近法设计FIR数字滤波器的原理和方法。

(3)掌握FIR滤波器的快速卷积实现原理。

(4)学会调用MATLAB函数设计与实现FIR滤波器。

2. 实验内容及步骤

(1)认真复习第七章中用窗函数法和等波纹最佳逼近法设计FIR数字滤波器的原理;

(2)调用信号产生函数xtg产生具有加性噪声的信号xt,并自动显示xt及其频谱,如图10.5.1所示;

图10.5.1 具有加性噪声的信号x(t)及其频谱如图

(3)请设计低通滤波器,从高频噪声中提取xt中的单频调幅信号,要求信号幅频失真小于0.1dB,将噪声频谱衰减60dB。先观察xt的频谱,确定滤波器指标参数。

(4)根据滤波器指标选择合适的窗函数,计算窗函数的长度N,调用MATLAB函数fir1设计一个FIR低通滤波器。并编写程序,调用MATLAB快速卷积函数fftfilt实现对xt的滤波。绘图显示滤波器的频响特性曲线、滤波器输出信号的幅频特性图和时域波形图。

(4)重复(3),滤波器指标不变,但改用等波纹最佳逼近法,调用MATLAB函数remezord和remez设计FIR数字滤波器。并比较两种设计方法设计的滤波器阶数。

提示:○1MATLAB函数fir1和fftfilt的功能及其调用格式请查阅本书第7章和第?章;

○2采样频率Fs=1000Hz,采样周期T=1/Fs;

○3根据图10.6.1(b)和实验要求,可选择滤波器指标参数:通带截止频率fp=120Hz,阻带截至频率fs=150Hz,换算成数字频率,通带截止频率

,通带最大衰为0.1dB,阻带截至频率 ,阻带最小衰为60dB。]

○4实验程序框图如图10.5.2所示,供读者参考。

图10.5.2  实验程序框图

4.思考题

(1)如果给定通带截止频率和阻带截止频率以及阻带最小衰减,如何用窗函数法设计线性相位低通滤波器?请写出设计步骤.

(2)如果要求用窗函数法设计带通滤波器,且给定通带上、下截止频率为 和 ,阻带上、下截止频率为 和 ,试求理想带通滤波器的截止频率 。

(3)解释为什么对同样的技术指标,用等波纹最佳逼近法设计的滤波器阶数低?

5.实验报告要求

(1)对两种设计FIR滤波器的方法(窗函数法和等波纹最佳逼近法)进行分析比较,简述其优缺点。

(2)附程序清单、打印实验内容要求绘图显示的曲线图。

(3)分析总结实验结果。

(4)简要回答思考题。

 6.信号产生函数xtg程序清单

function xt=xtg(N)

%实验五信号x(t)产生,并显示信号的幅频特性曲线

%xt=xtg(N) 产生一个长度为N,有加性高频噪声的单频调幅信号xt,采样频率Fs=1000Hz

%载波频率fc=Fs/10=100Hz,调制正弦波频率f0=fc/10=10Hz.

Fs=1000;T=1/Fs;Tp=N*T;

t=0:T:(N-1)*T;

fc=Fs/10;f0=fc/10; %载波频率fc=Fs/10,单频调制信号频率为f0=Fc/10;

mt=cos(2*pi*f0*t);  %产生单频正弦波调制信号mt,频率为f0

ct=cos(2*pi*fc*t);  %产生载波正弦波信号ct,频率为fc

xt=mt.*ct;          %相乘产生单频调制信号xt

nt=2*rand(1,N)-1;   %产生随机噪声nt

%=======设计高通滤波器hn,用于滤除噪声nt中的低频成分,生成高通噪声=======

fp=150; fs=200;Rp=0.1;As=70; % 滤波器指标

fb=[fp,fs];m=[0,1];     % 计算remezord函数所需参数f,m,dev

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

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

hn=remez(n,fo,mo,W);   % 调用remez函数进行设计,用于滤除噪声nt中的低频成分

yt=filter(hn,1,10*nt);      %滤除随机噪声中低频成分,生成高通噪声yt

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

xt=xt+yt;           %噪声加信号

fst=fft(xt,N);k=0:N-1;f=k/Tp;

subplot(3,1,1);plot(t,xt);grid;xlabel('t/s');ylabel('x(t)');

axis([0,Tp/5,min(xt),max(xt)]);title('(a) 信号加噪声波形')

subplot(3,1,2);plot(f,abs(fst)/max(abs(fst)));grid;title('(b) 信号加噪声的频谱')

axis([0,Fs/2,0,1.2]);xlabel('f/Hz');ylabel('幅度')

10.5.2 滤波器参数及实验程序清单

1、滤波器参数选取

根据10.5.1

节实验指导的提示③选择滤波器指标参数:通带截止频率fp=120Hz,阻带截至频率fs=150Hz。代入采样频率Fs=1000Hz,换算成数字频率,通带截止频率

,通带最大衰为0.1dB,阻带截至频率 ,阻带最小衰为60dB。所以选取blackman窗函数。与信号产生函数xtg相同,采样频率Fs=1000Hz。

按照图10.5.2 所示的程序框图编写的实验程序为exp5.m。

2、实验程序清单

%《数字信号处理(第三版)学习指导》第10章实验5程序exp5.m

% 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)波形)

%省略

10.5.3 实验程序运行结果

用窗函数法设计滤波器,滤波器长度 Nb=184。滤波器损耗函数和滤波器输出yw(nT)分别如图10.5.3(a)和(b)所示。

用等波纹最佳逼近法设计滤波器,滤波器长度 Ne=83。滤波器损耗函数和滤波器输出ye(nT)分别如图10.5.3(c)和(d)所示。

两种方法设计的滤波器都能有效地从噪声中提取信号,但等波纹最佳逼近法设计的滤波器阶数低得多,当然滤波实现的运算量以及时延也小得多,从图10.5.3(b)和(d)可以直观地看出时延差别。

图10.5.3

10.5.4 简答思考题

(1) 用窗函数法设计线性相位低通滤波器的设计步骤教材中有详细的介绍.

(2) 希望逼近的理想带通滤波器的截止频率 分别为:

(3)解释为什么对同样的技术指标,用等波纹最佳逼近法设计的滤波器阶数低?

 ①用窗函数法设计的滤波器,如果在阻带截止频率附近刚好满足,则离开阻带截止频率越远,阻带衰减富裕量越大,即存在资源浪费;

 ②

几种常用的典型窗函数的通带最大衰减和阻带最小衰减固定,且差别较大,又不能分别控制。所以设计的滤波器的通带最大衰减和阻带最小衰减通常都存在较大富裕。如本实验所选的blackman窗函数,其阻带最小衰减为74dB,而指标仅为60dB。

 ③ 用等波纹最佳逼近法设计的滤波器,其通带和阻带均为等波纹特性,且通带最大衰减和阻带最小衰减可以分别控制,所以其指标均匀分布,没有资源浪费,所以期阶数低得多。

10.6    实验六  数字信号处理在双音多频拨号系统中的应用

 10.6.1   实验指导

 1、引言

       双音多频(Dual Tone Multi Frequency,

DTMF)信号是音频电话中的拨号信号,由美国AT&T贝尔公司实验室研制,并用于电话网络中。这种信号制式具有很高的拨号速度,且容易自动监测识别,很快就代替了原有的用脉冲计数方式的拨号制式。这种双音多频信号制式不仅用在电话网络中,还可以用于传输十进制数据的其它通信系统中,用于电子邮件和银行系统中。这些系统中用户可以用电话发送DTMF信号选择语音菜单进行操作。

  

DTMF信号系统是一个典型的小型信号处理系统,它要用数字方法产生模拟信号并进行传输,其中还用到了D/A变换器;在接收端用A/D变换器将其转换成数字信号,并进行数字信号处理与识别。为了系统的检测速度并降低成本,还开发一种特殊的DFT算法,称为戈泽尔(Goertzel)算法,这种算法既可以用硬件(专用芯片)实现,也可以用软件实现。下面首先介绍双音多频信号的产生方法和检测方法,包括戈泽尔算法,最后进行模拟实验。下面先介绍电话中的DTMF信号的组成。

在电话中,数字0~9的中每一个都用两个不同的单音频传输,所用的8个频率分成高频带和低频带两组,低频带有四个频率:679Hz,770Hz,852Hz和941Hz;高频带也有四个频率:1209Hz,1336Hz,1477Hz和1633Hz.。每一个数字均由高、低频带中各一个频率构成,例如1用697Hz和1209Hz两个频率,信号用

表示,其中 , 。这样8个频率形成16种不同的双频信号。具体号码以及符号对应的频率如表10.6.1所示。表中最后一列在电话中暂时未用。

               表10.6.1   双频拨号的频率分配

    列

行 1209Hz 1336Hz

 1477Hz 633Hz

697Hz    1 2 3 A

770Hz    4  5    6     B

852Hz    7    8    9 C

942Hz    *    0    #    D

  DTMF信号在电话中有两种作用,一个是用拨号信号去控制交换机接通被叫的用户电话机,另一个作用是控制电话机的各种动作,如播放留言、语音信箱等。

  2  电话中的双音多频(DTMF)信号的产生与检测

(1)双音多频信号的产生

假设时间连续的 DTMF信号用 表示,式中 是按照表10.10.1选择的两个频率, 代表低频带中的一个频率,

代表高频带中的一个频率。显然采用数字方法产生DTMF信号,方便而且体积小。下面介绍采用数字方法产生DTMF信号。规定用8KHz对DTMF信号进行采样,采样后得到时域离散信号为

           

 

形成上面序列的方法有两种,即计算法和查表法。用计算法求正弦波的序列值容易,但实际中要占用一些计算时间,影响运行速度。查表法是预先将正弦波的各序列值计算出来,寄存在存储器中,运行时只要按顺序和一定的速度取出便可。这种方法要占用一定的存储空间,但是速度快。

   

因为采样频率是8000Hz,因此要求每125ms输出一个样本,得到的序列再送到D/A变换器和平滑滤波器,输出便是连续时间的DTMF信号。DTMF信号通过电话线路送到交换机。

   (2)双音多频信号的检测

在接收端,要对收到的双音多频信号进行检测,检测两个正弦波的频率是多少,以判断所对应的十进制数字或者符号。显然这里仍然要用数字方法进行检测,因此要将收到的时间连续

DTMF信号经过A/D变换,变成数字信号进行检测。检测的方法有两种,一种是用一组滤波器提取所关心的频率,根据有输出信号的2个滤波器判断相应的数字或符号。另一种是用DFT(FFT)对双音多频信号进行频谱分析,由信号的幅度谱,判断信号的两个频率,最后确定相应的数字或符号。当检测的音频数目较少时,用滤波器组实现更合适。FFT是DFT的快速算法,但当DFT的变换区间较小时,FFT快速算法的效果并不明显,而且还要占用很多内存,因此不如直接用DFT合适。下面介绍Goertzel算法,这种算法的实质是直接计算DFT的一种线性滤波方法。这里略去Goertzel算法的介绍(请参考文献[19]),可以直接调用MATLAB信号处理工具箱中戈泽尔算法的函数Goertzel,计算N点DFT的几个感兴趣的频点的值。

  3   检测DTMF信号的DFT参数选择

  

用DFT检测模拟DTMF信号所含有的两个音频频率,是一个用DFT对模拟信号进行频谱分析的问题。根据第三章用DFT对模拟信号进行谱分析的理论,确定三个参数:(1)采样频率

,(2)DFT的变换点数N,(3)需要对信号的观察时间的长度 。这三个参数不能随意选取,要根据对信号频谱分析的要求进行确定。这里对信号频谱分析也有三个要求: 

(1)频率分辨率,(2)谱分析的频谱范围,(3)检测频率的准确性。

    1. 频谱分析的分辨率。

观察要检测的8个频率,相邻间隔最小的是第一和第二个频率,间隔是73Hz,要求DFT最少能够分辨相隔73Hz的两个频率,即要求 。DFT的分辨率和对信号的观察时间

有关,  。考虑到可靠性,留有富裕量,要求按键的时间大于40ms。

   2  频谱分析的频率范围

  

要检测的信号频率范围是697~1633Hz,但考虑到存在语音干扰,除了检测这8个频率外,还要检测它们的二次倍频的幅度大小,波形正常且干扰小的正弦波的二次倍频是很小的,如果发现二次谐波很大,则不能确定这是DTMF信号。这样频谱分析的频率范围为697~3266Hz。按照采样定理,最高频率不能超过折叠频率,即

,由此要求最小的采样频率应为7.24KHz。因为数字电话总系统已经规定 =8KHz,因此对频谱分析范围的要求是一定满足的。按照 ,

=8KHz,算出对信号最少的采样点数为 。

 3  检测频率的准确性

   这是一个用DFT检测正弦波频率是否准确的问题。序列的N点DFT是对序列频谱函数在0~

区间的N点等间隔采样,如果是一个周期序列,截取周期序列的整数倍周期,进行DFT,其采样点刚好在周期信号的频率上,DFT的幅度最大处就是信号的准确频率。分析这些DTMF信号,不可能经过采样得到周期序列,因此存在检测频率的准确性问题。

  DFT的频率采样点频率为 (k=0,1,2,---,N-1),相应的模拟域采样点频率为

(k=0,1,2,---,N-1),希望选择一个合适的N,使用该公式算出的 能接近要检测的频率,或者用8个频率中的任一个频率 代入公式

中时,得到的k值最接近整数值,这样虽然用幅度最大点检测的频率有误差,但可以准确判断所对应的DTMF频率,即可以准确判断所对应的数字或符号。经过分析研究认为N=205是最好的。按照

=8KHz,N=205,算出8个频率及其二次谐波对应k值,和k取整数时的频率误差见表10.6.2。

                       表10.6.2 

8个基频

Hz 最近的整数k值 DFT的

k值 绝对误差 二次谐波

Hz 对应的

k值 最近的

整数k值 绝对误差

697 17.861 18 0.139 1394 35.024 35 0.024

  770 19.531 20 0.269 1540 38.692 39 0.308

  852 21.833 22 0.167 1704 42.813 43 0.187

  941 24.113 24 0.113 1882 47.285 47 0.285

 1209 30.981 31 0.019 2418 60.752 61 0.248

 1336 34.235 34 0.235 2672 67.134 67 0.134

 1477 37.848 38 0.152 2954 74.219 74 0.219

 1633 41.846 42 0.154 3266 82.058 82 0.058

通过以上分析,确定 =8KHz,N=205, 。

   4  DTMF信号的产生与识别仿真实验

下面先介绍MATLAB工具箱函数goertzel,然后介绍DTMF信号的产生与识别仿真实验程序。Goerztel函数的调用格式额为

Xgk=goertzel(xn,K)

xn是被变换的时域序列,用于DTMF信号检测时,xn就是DTMF信号的205个采样值。

K是要求计算的DFT[xn]的频点序号向量,用N表示xn的长度,则要求1≤K≤N。由表10.2.2可知,如果只计算DTMF信号8个基频时,

K=[18,20,22,24,31,34,38,42],

如果同时计算8个基频及其二次谐波时,

K=[18,20,22,24,31,34,35,38,39,42,43,47,61,67,74,82]。

Xgk是变换结果向量,其中存放的是由K指定的频率点的DFT[x(n)]的值。设X(k)= DFT[x(n)],则 。

   

DTMF信号的产生与识别仿真实验在MATLAB环境下进行,编写仿真程序,运行程序,送入6位电话号码,程序自动产生每一位号码数字相应的DTMF信号,并送出双频声音,再用DFT进行谱分析,显示每一位号码数字的DTMF信号的DFT幅度谱,安照幅度谱的最大值确定对应的频率,再安照频率确定每一位对应的号码数字,最后输出6位电话号码。

   

本实验程序较复杂,所以将仿真程序提供给读者,只要求读者读懂程序,直接运行程序仿真。程序名为exp6。程序分四段:第一段(2—7行)设置参数,并读入6位电话号码;第二段(9—20行)根据键入的6位电话号码产生时域离散DTMF信号,并连续发出6位号码对应的双音频声音;第三段(22—25行)对时域离散DTMF信号进行频率检测,画出幅度谱;第四段(26—33行)根据幅度谱的两个峰值,分别查找并确定输入6位电话号码。根据程序中的注释很容易分析编程思想和处理算法。程序清单如下:

%《数字信号处理(第三版)》第十章 实验6程序:exp6.m

% DTMF双频拨号信号的生成和检测程序

%clear all;clc;

tm=[1,2,3,65;4,5,6,66;7,8,9,67;42,0,35,68];   % DTMF信号代表的16个数

N=205;K=[18,20,22,24,31,34,38,42];

f1=[697,770,852,941];                   % 行频率向量

f2=[1209,1336,1477,1633];               % 列频率向量

TN=input('键入6位电话号码= ');          % 输入6位数字

TNr=0;                                  %接收端电话号码初值为零

for l=1:6;

    d=fix(TN/10^(6-l));

    TN=TN-d*10^(6-l);

    for p=1:4;

        for q=1:4;

            if tm(p,q)==abs(d); break,end       % 检测码相符的列号q

        end

        if tm(p,q)==abs(d); break,end      % 检测码相符的行号p

    end

    n=0:1023;                               % 为了发声,加长序列

    x = sin(2*pi*n*f1(p)/8000) + sin(2*pi*n*f2(q)/8000);% 构成双频信号

    sound(x,8000);                               % 发出声音

    pause(0.1)

    % 接收检测端的程序

    X=goertzel(x(1:205),K+1);              % 用Goertzel算法计算八点DFT样本

    val = abs(X);                           % 列出八点DFT向量

    subplot(3,2,l);

    stem(K,val,'.');grid;xlabel('k');ylabel('|X(k)|') % 画出DFT(k)幅度

    axis([10 50 0 120])

    limit = 80;                 %

    for s=5:8;

        if val(s) > limit, break, end       % 查找列号

    end

    for r=1:4;

        if val(r) > limit, break, end       % 查找行号

    end

    TNr=TNr+tm(r,s-4)*10^(6-l);

end

disp('接收端检测到的号码为:')         % 显示接收到的字符

disp(TNr)

运行程序,根据提示键入6位电话号码123456,回车后可以听见6位电话号码对应的DTMF信号的声音,并输出相应的6幅频谱图如图10.10.1所示,左上角的第一个图在k=18和k=31两点出现峰值,所以对应第一位号码数字1。最后显示检测到的电话号码123456。

图10.6.1  6位电话号码123456的DTMF信号在8个近似基频点的DFT幅度

(1) 实验内容

    ① 

运行仿真程序exp6.m,任意送入6位电话号码,打印出相应的幅度谱。观察程序运行结果,对照表10.10.1和表10.10.2,判断程序谱分析的正确性。

    ②  分析该仿真程序,将产生、检测和识别6位电话号码的程序改为能产生、检测和识别8位电话号码的程序,并运行一次,打印出相应的幅度谱和8位电话号码。

    5. 实验报告

(1) 分析程序exp8.m,画出仿真程序流程图。

(2) 打印6位和8位电话号码DTMF信号的幅度谱。

(3) 简述DTMF信号的参数:采样频率、DFT的变换点数以及观测时间的确定原则。

10.6.2 实验程序清单及运行结果

   1、实验内容①  

6位电话号码的DTMF双频拨号信号的生成和检测程序清单exp6.m已经在实验指导中给出。运行程序,并输入6位电话号码123456,则输出相应的6幅频谱图如图10.10.1所示,左上角的第一个图在k=18和k=31两点出现峰值,所以对应第一位号码数字1。其他5个图请读者对照表10.10.1和表10.10.2,确定确定其对应的数字,验证程序输出的电话号码“123456”是正确的。

        2、实验内容②  只要对6位电话号码检测程序exp6.m作如下修改,即可产生、检测和识别8位电话号码。

  (1)将第8行改为TN=input('键入8位电话号码= ');

  (2)将第10~12行改为

for l=1:8;

  d=fix(TN/10^(8-l)); 

  TN=TN-d*10^(8-l); 

(3)将第26行改为 subplot(4,2,l);

(4)将第36行改为TNr=TNr+tm(r,s-4)*10^(8-l);

修改后的程序为exp6_8.m,程序清单见程序集。运行程序exp6_8.m,输入输入8位电话号码87654321,则输出相应的8幅频谱图如图10.10.2所示。最后显示检测到的电话号码87654321。

图10.6.1  8位电话号码87654321的DTMF信号在8个近似基频点的DFT幅度

更多相关推荐:
数字信号处理实验报告

南京信息工程大学数字信号处理实验报告学院:电子与信息工程学院班级:11通信1班学号:XXX姓名:XX指导教师:XX20XX/12/6实验一Matlab基本知识和信号处理工具箱一、实验目的1、了解Matlab的基…

数字信号处理实验报告

数字信号处理实验报告专业电子信息工程学号111308336姓名张强伟实验一数字滤波器的结构一实验目的1加深对数字滤波器分类与结构的了解2明确数字滤波器的基本结构及其相互间的转换方法3掌握用MATLAB进行数字滤...

数字信号处理实验报告一

西南大学学生实验报告姓名杨剑学号2220xx3220xx058班级1班专业电科实验日期20xx年9月29日实验学时2学时实验名称基本信号的产生和序列的基本运算实验目的学习使用MATLAB产生基本信号绘制信号波形...

数字信号处理实验报告实验十

数字信号处理实验报告实验名称学生姓名学生学号学生班级上课时间周三上午一实验目的1掌握数字滤波器的计算机仿真方法2通过观察对实际心电图信号的滤波作用获得数字滤波器的感性知识二实验内容及其要求1编写FIR数字滤波器...

中南大学数字信号处理实验报告

中南大学数字信号处理实验报告学生姓名学号指导教师学院专业班级完成时间2目录实验一实验二常见离散时间信号的产生和频谱分析3实验结果与分析5数字滤波器的设计14实验结果与分析173实验一常见离散时间信号的产生和频谱...

数字信号处理实验报告

实验一信号系统及系统响应1实验目的熟悉连续信号经过理想抽样前后的频谱变化关系加深对时域抽样定理的理解熟悉时域离散系统的时域特性利用卷积方法观察分析系统的时域特性掌握序列傅里叶变换的计算机实验方法利用序列的傅里叶...

数字信号处理实验报告

北京信息科技大学实验报告课程名称数字信号处理实验项目IIR数字滤波器设计实验仪器计算机MATLAB软件学院信息与通信工程学院班级姓名学号实验日期指导老师实验成绩实验二IIR数字滤波器设计一实验目的1熟悉用双线性...

数字信号处理实验八

数字信号处理实验报告实验名称用窗口法设计FIR数字滤波器姓名周云杰学号120xx437指导老师杨萌黄怡实验时间20xx1222选课时间周一35节实验目的了解一个实际滤波器的设计过程加深掌握窗口法设计FIR数字滤...

数字信号处理实验报告

实验报告课程名称姓名学号实验二基于MATLAB的数字滤波器的设计1实验目的1熟悉IIR数字滤波器设计的原理与方法2熟悉用窗函数法设计FIR数字滤波器设计的原理与方法3掌握IIR和FIR数字滤波器的计算机仿真方法...

数字信号处理实验四报告

实验四IIR数字滤波器设计及软件实现一实验目的1熟悉用双线性变换法设计IIR数字滤波器的原理与方法2学会调用MATLAB信号处理工具箱中滤波器设计函数或滤波器设计分析工具fdatool设计各种IIR数字滤波器学...

数字信号处理第二次实验报告

数字信号处理实验报告第二次实验IIR数字滤波器的设计姓名陈桐学号04004316实验日期20xx年11月14日一实验目的1掌握双线形变换法及脉冲响应不变法设计IIR数字滤波器的具体设计方法及其原理熟悉用双线形变...

哈工程数字信号处理实验报告5

数字信号处理实验实验五谱分析班级姓名学号指导老师年10月20xx实验五谱分析1实验原理2实验内容1w1boxcar20subplot221stemw1title39boxcar39xlabel39t39ylab...

数字信号处理实验总结(34篇)