第七讲Matlab在数字信号处理中的运用数字信号处理(DSP):是指利用计算机或专用处理设备,以数值计算的方法对信号进行采集、变换、综合、估值与识别等加工处理,借以达到提取信息和便于应用的目的。Matlab是数字信号处理技术实现的重要手段。通过Matlab,可以进行数字信号处理问题理论上的分析和算法开发;配合Simulink,用户可以进行数字信号处理系统的设计和仿真。本章内容:离散时间信号与系统数字滤波器概述IIR滤波器的设计信号连续信号指时间连续、幅度连续的信号,又称模拟信号,数学上表示为一个时间连续函数f(t);离散信号指时间离散,幅度仍然可以连续的信号。可由f(t)时域取样得到,数学上表示为一个时间离散函数f(n);数字信号指时间离散而且幅度也离散的信号,可对模拟信号处理获得:模拟信号→取样、量化、编码→数字信号上述过程又称为脉冲编码调制,这是一个典型的AD变换过程;计算机处理和存储的信号全部是数字信号,通常需要将数字信号还原为模拟信号,过程为:数字信号→解码、反量化、重建→模拟信号这个过程又称为DA变换。1.离散时间信号与系统1)离散信号及其Matlab实现单位抽样序列(单位冲激)δ(n):仅在n=0时取值为1.在Matlab中,产生N点的单位抽样序列,我们利用zeros函数来实现:x=zeros(1,N);x(1)=1;例7-1产生一个32点的,右移20各单位的冲击序列。程序如下:clearall;N=32;k=20;x=zeros(N);x(k)=1;xn=0:N-1;stem(xn,x);单位阶跃序列μ(n)Matlab实现:x=ones(1,N);右移m,则:正弦序列正弦序列定义:x(n)=Asin(2πfnTs+φ)Matlab实现:n=0:N-1;x=A*sin(2*pi*f*n*Ts+fai);μ(n-m)=1,n≥m0,nm例7-3:产生一个频率为150Hz,幅度为0.45,初始相位为35度的正弦波,信号持续时间为5s。Fs=2000;t=1/Fs:1/Fs:5;f=150;A=0.45;Fai=35/180*pi;X=A*sin(2*pi*f.*t+Fai);plot(t(1:100),X(1:100));xlabel('time(sec)');ylabel('sin2\pift');title('150Hzsinwave');disp('按任意键开始播出5秒的150Hz正弦波...');pause;sound(X,Fs);disp('播放结束,下面将音频数据存盘为C:\my50HzSIN.wav');wavwrite(X,Fs,'C:\my50HzSIN.wav');clear;[R,Rs]=wavread('C:\my50HzSIN.wav');sound(R,Rs);Matlab实现:n=0:N-1;x=a.^n;例:x(n)=实现程序:n=[0:10];x=(0.9).^n;stem(n,x)实指数序列:x(n)=nana100,)9.0(nn随机序列由于许多实际的序列并不能用数学式来描述,我们将这些序列成为随机序列,并用相应的概率密度函数来表示。Matlab提供了两个随机数产生函数:rand(1,N)——产生[0,1]上均匀分布的随机序列,N为长度;randn(1,N)——产生均值为0,方差为1的高斯随机序列,即白噪声序列。例7-4产生随机序列%generaterandomsequencen=200;xn1=rand(1,n);xn2=randn(1,n);subplot(2,2,1),stem(xn1);xlabel('n');ylabel('x(n)');title('rand');gridsubplot(2,2,2);hist(xn1,10);xlabel(‘n’);ylabel(‘x(n)’);title(‘均匀分布的概率密度');gridsubplot(2,2,3),stem(xn2);xlabel('n');ylabel('x(n)');title('randn');gridsubplot(2,2,4),hist(xn2,10);xlabel(‘n’);ylabel(‘x(n)’);title(‘高斯分布的概率密度')grid2)波形发生器Matlab内部提供了大量的函数用以产生噪声及常用的信号波形,这些信号在信号处理中非常重要。方波函数squaresquare函数有两种调用格式:x=square(t);x=square(t,duty);square函数产生周期为2*pi,幅度为1的方波。duty为占空比,即信号为正值的区域在一个周期内所占的百分比。例如:x=square(2*pi*f*t+fai,duty)%t为时间取样序列%f为方波的基频率%fai为方波的初始相位%duty为占空比,为0-100之间的数。例如duty=20,即占空比为20%%x返回的幅度为1的矩形波样值序列三角函数sawtooth:x=sawtooth(t);x=sawtooth(t,width);例如:x=sawtooth(2*pi*f*t+fai,width)%f为三角波的基频率%fai为三角波的初相位%width为宽度,为0-1之间取值的尺度参数。若width=0.3,表示在三角波的一个周期内上升沿占30%;若width=0.5,产生对称的三角波;若width=1,产生锯齿波。%返回的幅度为1的锯齿波样值序列其它波形发生函数:chirp——线性调频信号dirichlet——周期信号sinc——傅立叶反变换rectpuls——非周期的、单位高度的矩形信号gauspuls——高斯调制正弦脉冲tripuls——三角形脉冲信号pulstrain——高斯调制正弦脉冲、非周期矩形脉冲和非周期三角脉冲voc——压控振荡信号3)序列的操作信号相加:是一种对应的样本与样本之间的相加,表示为:{x1(n)}+{x2(n)}={x1(n)+x2(n)}用运算符“+”实现,要求参与运算的两个序列长度必须相等。信号相乘:对应采样值之间的相乘,表示为:{x1(n)}*{x2(n)}={x1(n)x2(n)}用数组运算符“.*”实现,要求参与运算的两个序列长度必须相等。倍率:每一个采样值乘以一个常数a,表示为a{x(n)}={ax(n)}用算术运算符“*”实现。折叠:x(n)的每个样本都对n=0翻转,得到一个折叠后的序列y(n)。y(n)={x(-n)}由flghr(x)实现。样本和:将n1和n2之间的所有样本x(n)加起来:由sum(x(n1):x(n2))函数实现。样本积:将n1和n2之间的所有样本x(n)乘起来:由prodx((n1:n2))函数实现。21)2(.....)1()(nnnnxnxnx21)2(.....)1()(nnnxnxnx21)2(.....)1()(nnnxnxnx4)线性系统及其Matlab实现线性系统的基本概念:连续时间线性时不变系统的表示:拉普拉斯变换描述的传递函数形式;一阶微分方程组描述的状态空间形式离散时间线性系统的表示:Z变换描述的传递函数形式;一阶差分方程组描述的状态空间形式时域响应工具箱函数当系统由传递函数、状态方程给出时,Matlab给出了专门求解系统单位冲激相应的函数:impulse(sys):计算连续系统的冲激响应dimpulse:计算离散系统的冲激响应例如:计算的冲激响应。sys=tf(1,[1,1,0.5])Transferfunction:1-------------s^2+s+0.5impulse(sys);5.01)(2sssH离散系统模型时域表示•filter函数:利用递归滤波器或非递归滤波器对数据进行滤波。因为一个离散系统可以看作是一个滤波器,系统的输出就是输入经过滤波器滤波的结果。y=filter(b,a,x);表示由向量b和a组成的系统对输入x进行滤波,系统的输出为y;[y,zf]=filter(b,a,x,zi);zi表示输出信号的初始状态,zf表示该函数返回的系统的最终状态向量。•impz函数:直接给出系统的单位冲激相应,调用格式:impz(b,a)例7-5:当系统的输入差分方程为:y(n)-0.8y(n-1)-0.5y(n-2)=0.7x(n)+0.3(n-1),分别利用filter函数和impz函数求系统的单位冲激相应。clearall;pulse=[1,zeros(1,63)];b=[0.7,0.3];a=[1,-0.8,-0.5];h1=filter(b,a,pulse);h2=impz(b,a,64);subplot(2,1,1),stem(h1),title('filterfuction');subplot(2,1,2),stem(h2),title('impzfuction');传递函数响应•freqs函数:用于计算并画出连续系统的幅频响应和相频响应。常用的调用格式为:h=freqs(b,a)h=freqs(b,a,w)其中:b为传递函数H(s)分子多项式系数,a为分母多项式系统,w是指定计算频率点序列,如果w省略,则自动取200个频率点作计算。h为返回值,是对应于频率点序列w的复频率响应。•freqz函数:用于计算并画出离散系统的幅频响应和相频响应。该函数使用基于FFT算法计算系统传递函数响应模型中的系数向量a和b。常用调用格式为:[h,f]=freqz(b,a,n,fs)其中:b为传递函数H(z)分子多项式系数,a为分母多项式系数,n为指定计算频率点数(由于采用FFT算法,n常取2的幂次方,以提高计算速度),fs为离散系统的采样频率,h为对应于频率点序列f的复频率响应。如无输出变量,则自动作出幅频响应和相频响应图,f为记录频率点数。2.数字滤波器概述1)数字滤波器的数学描述和分类数字滤波器(DF,DigitalFilter)在数字信号处理中起着重要的作用。在信号的处理,检测与参数的估计方面,数字滤波器是使用最为广泛的一种系统。由于信号通常夹杂噪声及无用信号成分,所以必须将这些干扰成分滤除。滤波器可以对信号进行筛选,只让特定信号通过。一般而言,噪声信号往往是高频信号。而经典滤波器正是假定有用信号与噪声具有不同的频段,所以利用经典的滤波器可以将噪声滤除。但是如果信号和噪声频谱相互重叠,那么利用经典的滤波器就不能发挥作用。现代滤波器的作用是从含有噪声的数据记录中估计除信号的某些特征或信号本身,那么估计出来的信号和源信号相比,就具有更高的信噪比。滤波是信号处理的基础,滤波运算是信号处理中的基本运算。因此,滤波器的实际问题也是数字信号处理中的主要问题。数字滤波器的本质是将一组输入的数字序列通过一定的运算后,转变成为另一组输出的数字序列。滤波器的数学描述有两种方法:•差分方程:•系统函数:NiiNiiinybinxany00)()()(MiiMiiNiiiNiiizdzcAzbzazH111100)1()1(1)(滤波器的分类•按计算方法:递归系统,非递归系统•按冲激响应长度:IIR,FIR•按频带分类:低通、高通、带通、带阻2)设计步骤按照实际需要确定滤波器的性能要求。用一个因果稳定的系统函数(传递函数)去逼近这个性能要求,这种传递函数可以分为两类:IIR和FIR。用一个有限精度的运算去实现这个传递函数。包括选择运算结构:如级联型、并联型、卷积型等。选择合适字长和有效的数字处理方法。3.IIR滤波器的设计一个N阶IIR滤波器的传递函数可以表示为:传递函数的设计就是确定系数ai、bi或零、极点ci、di,以使滤波器满足给定的性能要求。MiiMiiNiiiNiiizdzcAzbzazH111100)1()1(1)(利用模拟滤波器的理论:先设计一个合适的模拟滤波器,然后变换成满足预定指标的数字滤波器。由于模拟的网络综合理论已经