1、第二级,第三级,第四级,第五级,第,11,章,DSP,Blockset,11.1 DSP,处理单元:帧,11.2 DSP,Blockset,模块库介绍,11.1 DSP,处理单元:帧,11.1.1,基于帧的信号处理,大多数实时的数字信号处理系统都采用基于帧的处理方式,以提高系统性能,这里每帧包含相邻的多个或者一组信号采样。采用基于帧的处理方式更适合多数的数字信号处理算法,另外也可降低系统对数据采集硬件的要求。缺省情况下,,Simulink,所有信号都是基于采样的。,表,11.1,基于采样的信号和基于帧的信号,基于采样的信号,基于帧的信号,每个时间步处理一个采样点,每个时间步处理含有,N,个采
2、样点的一帧,仿真步长,=,采样周期,=,T,s,仿真步长,=,帧周期,=,N,*,T,s,采样频率,F,s,=1/,T,s,帧频率,=,F,s,/,N,采样步长可变,帧的大小可变,可以是工作区中的一个变量,之所以采用基于帧的处理主要是考虑到数字信号处理本身的要求和数据通讯的开销。显然,基于帧的信号处理应当比基于采样的处理要复杂得多,但是,Simulink,利用,MATLAB,的矩阵功能极大地提高了处理的效率。通过基于帧的处理,减少了块与块之间的通讯,从而比使用基于采样的信号进行仿真快得多。总之,利用基于帧的信号提高了仿真速度。而且,由于同样的原因,大多数,DSP,系统也采用基于帧的处理。除此之
3、外,基于帧的处理提供了在仿真中进行频域分析的能力。,Simulink,的所有模块都支持基于帧的处理,使得用户可以方便地采用基于帧的信号进行算法仿真以及结合,RTW,产生实时代码。,图,11.1,说明了从连续信号经过,AD,采样得到采样信号,然后将采样信号组织成帧,送往,Simulink,处理的过程。,图,11.1,基于帧的信号处理,1.,缓冲和解缓冲,在,Simulink,中采样信号和帧信号之间的转换是通过缓冲模块(,Buffer,),来实现的。,Buffer,块有两种用途:一是接受采样输入并产生一定帧大小的帧输入;二是接受帧输入,修改帧的大小,这种情况下必须使用缓冲模块。这两种情况下都涉及到
4、帧之间的重叠和帧的初始值的设置问题,。,当通过采样产生帧时,缓冲使用输入标量生成一个列向量,如图,11.2,所示。如果需要从一个帧信号产生一个采样信号,则应使用,Unbuffer,模块。,Source,库中的许多信号源模块同样提供基于帧的输出,当然使用这些模块作为输入信号时,就无需使用,Buffer,块,只需设置块的帧长参数就可以了。,图,11.2,缓冲模块,2.,帧的表示,通常,一帧是通过一个矩阵表示的。在帧矩阵中,每个通道的信号对应矩阵中的一列,每个采样对应其中的一行(如图,11.3,所示)。在基于帧的处理中,各个模块沿着输入的每一列(通道)进行运算。图,11.3,中有四个信号通道,每帧有
5、两个采样,帧和帧之间没有重叠。通常每帧的采样数是,2,的幂次,以满足,FFT,变换的需要。,图,11.3,帧矩阵,3.,生成基于帧的信号,主要有三种方法用来生成基于帧的多通道信号。,(1)DSP,模块库中信号源库,DSP Sources,中的块提供了信号源块,用于生成基于帧的信号。,(2),所有的信号都可以通过缓冲块成为帧。,(3),将从若干个基于帧的信号源来的信号通过矩阵 拼接成一个帧矩阵,形成一个多路信号。,图,11.4 DSP Constant,模块设置,4.,观察基于帧的信号,用户可以使用,DSP,blockset,提供的专门的显示模块来观察基于帧的信号。这些模块中最常用的是,Matr
6、ix Viewer,(,矩阵浏览器)和,Vector Scope,(,向量示波器)。,Matrix Viewer,将输入矩阵的行和列作为坐标轴,使用不同颜色表示矩阵元素的值,还可以根据需要自己建立一个颜色表。,Vector Scope,显示输入的每一列(通道),按照指定帧的数目每次显示整个数据。,Vector Scope,可以显示时域或频域信号。图,11.5,是基于帧的三个正弦信号(三个通道)分别用,Matrix Viewer,和,Vector Scope,显示的结果。此外还有内置,FFT,变换的,Spectrum Scope,用来直接显示时域信号的频谱。,图,11.5 Matrix View
7、er&Vector Scope,5.,使用基于帧的信号,当一个信号线表示基于帧的信号时,,Simulink,用双线来绘制。基于帧的信号处理可以使用,Simulink,中对输入的每个元素进行处理的块,但是不能使用,Simulink,中对向量处理的模块(例如,Unit Delay,和,Mux,)。,实际上这些模块中许多模块在,DSP,Blockset,中都有一个与之对应,专门用来做基于帧的信号处理的版本。例如,在,DSP,Blockset,中等价于,Unit Delay,的模块是,Integer Delay,模块,与,Mux,等价的模块是,Matrix Concatenation,模块。图,11.
8、6,所示的框图是对随机信号延迟,30,个步长后进行卷积处理。下面给出一个具有回响功能的声学例子,读者不妨一试。,图,11.6,基于帧的信号处理,【,例,11.1,】,试建立一个圆形剧场的声学模型,假设有,70%,的信号被反射回来。,解,:使用,DSP SourcesFrom Wave File,模块加载一个声音文件,(*.wav),,,采样频率为,8000 Hz,。,圆形剧场的回声效果导致,70%,的信号在,2s,之后反射回来,这里用一个增益为,0.7,的,Gain,模块表示。其中使用一个,Integer Delay,模块产生,28000,的采样延迟。最后使用一个,DSP SinksTo Wa
9、ve Device,模块听一下效果。回声系统模型如图,11.7,所示。注意,,To Wave Device,模块只能在,PC,平台上使用。,图,11.7,回声系统模型,11.1.2,设置,Simulink,进行,DSP,仿真,对于一般系统而言,,Simulink,的默认设置认为信号是连续的,而且使用连续变步长求解器对系统进行求解。如果系统中包含连续信号和离散信号,应当使用此配置。但是对于纯离散的数字信号处理系统的设计、仿真与分析而言,需要对,Simulink,重新配置,使其能够适用于数字信号处理。,用户可以使用,M,文件,dspstartup,来配置,Simulink,,,使之适用于数字信号处
10、理。设置的内容包括:使用固定步长求解器、在采样之间信号没有定义(避免两个不同采样率信号之间的操作)、结束时间设为无穷大、仿真时间和数据不保存到工作区以节省内存等等。此外,用户还可以根据需要修改,dspstartup.m,文件以加入定制的设置。图,11.8,为设置好的,DSP,仿真参数页面。,如果经常需要进行,DSP,仿真,用户可以在,startup.m,文件中加入,dspstartup,命令,,MATLAB,在启动后自动运行,startup,,,这样就无需每次仿真都运行,dspstartup,命令了。,图,11.8,设置,Simulink,进行,DSP,仿真,11.2 DSP,Blockset
11、模块库介绍,DSP,Blockset,库提供了极为丰富的,DSP,模块资源,它们封装了几乎所有基本的数字信号处理操作和算法,其中的许多模块在信号处理工具箱中都有对应的函数。用户可以利用这些模块方便地完成自己的数字信号处理系统仿真和分析。图,11.9,列出了展开后的,DSP,Blockset,模块库。这一节将分别介绍各个子库并给出一些简单的例子。,图,11.9 DSP,Blockset,模块库,11.2.1,信号的操作和管理,一般的信号操作如加窗和补零可以通过,Signal Operations,模块库完成。这个库中还包含,Variable,Interge,Delay,模块,这里延迟的大小是通
12、过第二个输入信号指定的。表,11.2,列出了各个,Signal Operations,库中各个模块及其功能描述。,表,11.2 Signal Operations,库,模块名称,模块功能描述,Convolution,计算两个输入的卷积,Downsample,抽取操作,Upsamole,插值操作,Interger,Delay,延迟操作,Pad,补值操作,Zero Pad,补零操作,Repeat,重复操作,重复输入采样,N,次,Sample and Hold,当收到一个触发信号后,对输入信号采样并保持直到收到下一个触发信号,Unwrap,展开信号的相位,Variable Fractional De
13、lay,按照一个变量的值延迟每个通道的信号,该变量可以是分数,Variable Integer Delay,按照一个变量的值延迟每个通道的信号,该变量是整数,Window Function,加窗操作,可以选择不同的窗类型,信号可以通过在,Signal Management,下的四个库进行一些管理操作,它包括缓冲、索引、信号属性、切换与计数四个部分,如表,11.3,所示。,表,11.3 Signal Management,库,子库名称,模块名称,模块功能描述,Buffers,Buffer,缓冲,Unbuffer,解缓冲,Delay line,重新缓冲信号,每次更新一个采样,Queue,FIFO,
14、先入先出)寄存器,Stack,实现一个栈,或者先入后出寄存器,Triggered,Dealy,line,带有使能端的,Delay line,Indexing,Flip,按行或者按列倒置矩阵或者向量,Selector,从矩阵或者向量中选择元素,Multiport Selector,从矩阵或者向量中选择多组元素,Variable Selector,按照输入变量选择元素,Submatrix,从一个矩阵中选择一个子矩阵,Signal Attributes,Check Signal Attributes,检查信号的属性是否符合设置,Contiguous Copy,将非连续存储的信号转换为连续存储的信
15、号,Convert 1-D to 2-D,将一维信号转换为二维信号,Convert 2-D to 1-D,将二维信号转换为一维信号,Frame Status Conversion,设置输出帧的状态,Inherit Complexity,根据参考信号改变输入信号的表示形式(复数或实数形式),Switch and Counters,Counter,脉冲计数器,Edger Detector,边缘检测器,当信号变为,0,,或者从,0,变为其它值时,输出,1,Event-Count Comparator,统计非零输入的个数,当大于设置的数目时,输出变为,1,Multiphase Clock,产生相位依次
16、移动的时钟信号阵列,N-Sample Enable,经过,N,个采样后输出从,0,变为,1,N-Sample Switch,经过,N,个采样后输出从下端口输入变为上端口输入,信号的速率转换可以通过,Signal Operations,中的,Upsample,和,Downsample,模块来进行。,Upsample,通过在新的数据点上补零来实现,,Downsample,通过间隔去除部分采样点来降低采样速率。如图,11.10,所示,用一个,probe,模块来探测信号的采样速率,原始采样信号为,1000 Hz,,,经过二抽取后变为,500 Hz,,,经过插值后变为,2000 Hz,。,图,11.10
17、改变信号的速率,11.2.2,信号变换,使用基于帧的信号的一个好处就是能够进行各种变换处理,这意味着可以得到关于信号特性的更多信息。,Simulink,DSP,Blockset,提供了时域至频域,频域至时域(逆变换)和时域至时域的转换模块。需要注意的是,这些变换模块只能用于基于帧的输入的场合。表,11.4,列出了,Transform,库中的模块及其功能描述。,表,11.4 Transform,库,模块名称,模块功能描述,DCT,计算每个通道的离散余弦变换,FFT,计算每个通道的快速傅立叶变换,IDCT,计算每个通道的离散余弦反变换,IFFT,计算每个通道的离散傅立叶反变换,Analytic
18、Signal,计算每个通道的分析信号,Complex,Cepstrum,计算每个通道的复倒谱,Real,Cepstrum,计算每个通道的实倒谱,Magnitude FFT,计算每个通道输入的幅度谱或者幅平方谱,【,例,11.2,】,计算信号的频率响应。,解,:有两种简单的方法可以用来计算信号的频率响应。一种是对输入信号做,FFT,变换,然后在一个,Vector Scope,中观察变换的结果,这时,Vector Scope,的输入域应设置为,Frequency,。在,Vector Scope,模块前需要插入一个,Complex to Magnitude,模块,因为向量示波器期待的是一个实型输入。
19、另外一个方法是将信号直接接到一个,FFT,示波器上,这个示波器先进行,FFT,变换和求平方,然后再显示。计算信号的频率响应的框图如图,11.11,所示。输入信号是两个频率分别为,50 Hz,和,100 Hz,的正弦信号:,各个模块的参数设置如下:,(1)Sine wave,模块:,Frequency(Hz),设置为,50 100,。,(2)Gain,模块:,Gain,设置为,0.5,。,(3)Complex to Magnitude,模块:,Output,设置为,Magnitude,。,(4)Vector Scope,:,Input domain,设置为,Frequency,。,其它使用缺省设
20、置。,图,11.11,计算信号的频率响应,11.2.3,滤波器设计与频率分析,有关滤波器设计和分析的内容非常丰富,在此仅对,Simulink,DSP,Blockset,filtering,库中的模块进行简单的介绍,然后利用,Simulink,所提供的工具设计一个最简单的低通滤波器。,1.,设计一个滤波器,DSP,Blockset,库中有丰富的滤波器设计模块,可以设计数字,FIR,和,IIR,滤波器、模拟,IIR,滤波器。对于滤波器设计,应给出滤波器阶数和截止频率。实际上滤波器设计模块是通过信号处理工具箱,(Signal Processing Toolbox),进行滤波器设计的,然后返回一系列滤
21、波器系数。,Simulink,4.0,为用户提供了两个非常好用的模块用于模拟滤波器和数字滤波器的设计。,Analog Filter Design,模块用于模拟滤波器的设计,只需在模块对话框中选择要设计的滤波器类型和方法及其它阶数等信息就可以了。,Digital Filter Design,模块用于数字滤波器的设计,双击该模块可以看见如图,11.12,所示的图形化的设计界面,通过它用户可以方便地进行各种常用数字滤波器的设计和分析,设计完后可以直接作为滤波器的实现模块在仿真中使用,图,11.12,滤波器设计工具:,FDATool,【,例,11.3,】,设计一个滤波器滤除正弦信号中的噪声,还原正弦信
22、号。正弦信号为,sin100,t,,,噪声信号是均值为,0,、方差为,1,的高斯白噪声。信号采样频率为,2000 Hz,。,解,:,(1),首先用,Digital Filter Design,模块,设计,Butterworth,带通滤波器。各个选项参数的设置如图,11.12,所示。然后单击,Design Filter,按钮,完成滤波器的设计。,(2),按照图,11.13,选择和连接好其余各个模块。各个模块的设置如下:,Samples per fame,设置为,256,。,Sine Wave,模块:,Frequency,设置为,100,,,Sample Time,设置为,1/2000,,,Sam
23、ples per fame,设置为,256,。,Vector Scope,模块:为缺省设置。,运行仿真,产生的结果如图,11.13,所示。从图中可以看出,正弦信号被清楚地还原了出来。,图,11.13,带通滤波器结果输出,2.,实现一个滤波器,通过一个给定的传递函数表达的滤波器,可以只采用延迟和增益模块来实现。这个实现不是唯一的,而且对于,FIR,和,IIR,滤波器有不同的实现方法。滤波器系数可以直接在滤波器实现块中输入,或者使用,Signal Processing Toolbox,中的函数,butter,、,fir1,等产生。注意,设计这些滤波器时,截止频率往往是通过归一化频率来表示的。,11
24、2.4,功率谱估计,非参数估计方法和参数估计方法。非参数估计方法直接使用信号进行功率谱估计;参数估计方法试图建立一个等效系统并估计出系数。,DSP,Blockset,EstimationParametric Estimation,库给出了几种,AR,模型参数估计方法;,DSP,Blockset,EstimationPower Spectrum Estimation,库则给出了利用,Parametric Estimation,库中的参数估计模块进行功率谱估计的模块,以及两种利用非参数估计方法估计信号功率谱的模块。,表,11.5 Statistics,库,模块名称,模块功能描述,Autocorr
25、elation LPC,自相关线性预测,Yule-Walker AR Estimator,利用,Yule-Walker,方法估计,AR,模型参数,它使用,Levinson-Durbin,递推算法解,Yule-Walker,方程,Burg AR Estimator,利用,Burg,方法估计,AR,模型参数,Covariance AR Estimator,利用协方差方法估计,AR,模型参数,Modified Covariance AR Estimator,利用改进的协方差法估计,AR,模型参数,Burg Method,利用,Burg,方法估计信号功率谱,它用到了,Burg AR Estimator
26、块,Covariance Method,利用协方差方法估计,AR,模型参数,它用到了,Covariance AR Estimator,块,Modified Covariance Method,利用改进的协方差方法估计,AR,模型参数,它用到了,Modified Covariance AR Estimator,块,Yule-Walker Method,利用,Yule-Walker,方法估计信号功率谱,它用到了,Yule-Walker AR Estimator,块,Magnitude FFT,利用直接法(周期图法)估计信号功率谱,Short-Time FFT,利用短时傅立叶变换估计信号功率谱,【
27、例,11.4,】,让一段零均值功率为的白噪声通过一,AR,模型:,得到输出 ,再加上一个频率为,350 Hz,的实正弦信号 ,然后利用,Power Spectrum Estimation,库中的各种方法估计上述信号的功率谱。,图,11.14,功率谱估计,11.2.5,统计,Statistics,库提供了一些常用统计操作模块,如求最小值、最大值、平均值、方差等。大部分模块都支持两种模式:基本模式和运行期模式。基本模式的统计对象是当前仿真周期内的输入,与之前的输入无关,这个输入可以是基于采样的也可以是基于帧的,当然对输入还涉及到过去的输入。,表,11.6 Statistics,库,模块名称,模块
28、功能描述,Maximum,求最大值,有基本模式和运行期模式两种模式,Minimum,求最小值,有基本模式和运行期模式两种模式,Median,求中间值,有基本模式和运行期模式两种模式,Sort,排序,使用快速排序算法,只有基本模式,Mean,求均值,有基本模式和运行期模式两种模式,Variance,求方差,有基本模式和运行期模式两种模式,Standard Deviation,求标准方差,有基本模式和运行期模式两种模式,RMS,求均方根,有基本模式和运行期模式两种模式,Correlation,求相关,只有基本模式,Autocorrelation,求自相关,只有基本模式,Histogram,统计直方
29、图,有基本模式和运行期模式两种模式,Detrend,去除信号中的趋势项,【,例,11.5,】,统计一个高斯分布的随机信号的方差、均值并绘制其直方图。,解,:,Simulink,框图如图,11.15,所示。所需的各个模块及其参数设置如下:,(1)Random Source,模块:,Source type,设置为,Gaussian,,,Samples per frame,设置为,100,。,(2),Histgram,模块:,Minimum value of input,设置为,-10,,,Maximum value of input,设置为,10,,,bin,设置为,21,。,图,11.15,信号
30、统计,11.2.6,矩阵操作与线性方程求解,数字信号处理中经常会遇到多通道信号,,DSP,Blockset,包含了一个,Math FunctionsMatrices and,LinearAlegbra,库实现对多通道信号(矩阵信号)的处理。常用的操作包括对行或列求和或求积、矩阵乘积和对角线提取等,这些操作包含在,Matrix Operations,库中,前面介绍的,Matrix Concatenation,模块也在这个库中。另外,,Matrix Factorizations,库实现了许多,MATLAB,矩阵分解算法供仿真使用;,Matrix Inverses,库封装了几种求矩阵逆的算法;,Li
31、near System Solvers,库包含求解,AX=B,类型的线性方程组的若干方法。表,11.7,11.9,列出了包含的模块及其功能描述。,表,11.7 Matrix Factorizations,库,模 块 名 称,算 法 描 述,LU Factorization,LU,矩阵分解,Cholesky,Factorization,Cholesky,矩阵分解,LDL Factorization,LDL,矩阵分解,QR Factorization,QR,矩阵分解,Singular Value Decomposition,SVD,矩阵分解,表,11.8 Matrix Inverses,库,模 块
32、 名 称,算 法 描 述,LU Inverse,利用,LU,分解算法求矩阵的逆,Cholesky,Inverse,利用,Cholesky,分解算法求矩阵的逆,LDL Inverse,利用,LDL,分解算法求矩阵的逆,Pseudoinverse,利用,SVD,分解算法求矩阵的伪逆,表,11.9 Linear System Solvers,库,模 块 名 称,算 法 描 述,LU Solver,利用,LU,分解算法解线性方程组,,A,阵必须为方阵,,B,必须与,A,有相同的行数,SVD Solver,利用,SVD,分解算法解线性方程组,如果,A,不是方阵,则所得解为最小二乘解,QR Solver,
33、利用,QR,分解算法解线性方程组,如果,A,不是方阵,则所得解为最小二乘解,Levinson-Durbin,利用,Levinson,递推算法求解,Toeplitz,型方程组,LDL Solver,利用,LDL,分解算法解线性方程组,,A,为对称正定的方阵,,B,与,A,有相同的行数,Cholesky,Solver,用,Cholesky,分解法求(即平方根法)解线性方程组,,A,为对称正定的方阵,,B,与,A,有相同的行数,Forward Substitution,前向替代法解线性方程组,其中,A,是下三角方阵,Backward Substitution,后向替代法解线性方程组,其中,A,是上三
34、角方阵,【,例,11.6,】,利用,LU,分解求解线性方程组,AX=B,的解。其中,A,1-2 3;4 0 6;2 1 5,B=1 0.225 1;1 2 3,。,解,:,(1),利用,DSP Constant,模块输入,A,阵和,B,阵。,(2),在,Linear System Solvers,库中选择,LU Solver,模块,它使用,LU,分解算法求解方程组的解。,(3),加入,display,模块用于显示方程组的解。,按照图,11.16,所示,连好连线,并仿真得到上述方程的解,并在,display,模块中显示出来。,注意由于,B,是,32,矩阵,所以求得两组解(两个列向量)。我们来验证一下解的正确性,将解代入,AX,,,这里用一个,Matrix Multiply,来实现矩阵的乘法,求得的结果显示在,display1,中,正是,B,阵。注意这些运算只需一个仿真步长就可以完成,所以仿真时间在这里就没有意义了,因为图,10.16,本身所表示的框图是一个静态系统,在数学上是一组代数方程。,






