DSP系统应用研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DSP系统应用研究
姓名:宋健班级:电科0501 学号:200522340115 指导老师:雷学堂摘要:数字信号处理器是在模拟信号变换成数字信号以后进行高速实时处理的专用处理器,其处理速度比最快的CPU还快10-50倍。
在当今的数字化时代背景下,DSP已成为通信、计算机、消费类电子产品等领域的基础器件,被誉为信息社会革命的旗手。
业内人士预言,DSP将是未来集成电路中发展最快的电子产品,并成为电子产品更新换代的决定因素,它将彻底变革人们的工作、学习和生活方式。
由于DSP有先进的并行结构使其特别适合于信号处理,故已经越来越多的应用于工业控制领域和各类仪器仪表的开发设计。
本文通过研究DSP的各种特点和目前的发展情况,结合MATLAB,详细说明DSP在实际中的应用情况。
关键词:数字信号处理(DSP)信息安全MATLAB应用
一.DSP的特点
数字信号处理相对于模拟信号处理有很大的优越性,表现在精度高、灵活性大、可靠性好、易于大规模集成等方面。
随着人们对实时信号处理要求的不断提高和大规模集成电路技术的迅速发展,数字信号处理技术也发生着日新月异的变革。
实时数字信号处理技术的核心和标志是数字信号处理器。
自第一个微处理器问世以来,微处理器技术水平得到了十分迅速的提高,而快速傅立叶交换等实用算法的提出促进了专门实现数字信号处理的一类微处理器的分化和发展。
数字信号处理有别于普通的科学计算与分析,它强调运算处理的实时性,因此DSP除了具备普通微处理器所强调的高速运算和控制功能外,针对实时数字信号处理,在处理器结构、指令系统、指令流程上具有许多新的特征,其特点如下:
(1)算术单元
具有硬件乘法器和多功能运算单元,硬件乘法器可以在单个指令周期内完成乘法操作,这是DSP区别于通用的微处理器的一个重要标志。
多功能运算单元可以完成加减、逻辑、移位、数据传送等操作。
新一代的DSP内部甚至还包含多个并行的运算单元。
以提高其处理能力。
针对滤波、相关、矩阵运算等需要大量乘和累加运算的特点,DSP的算术单元的乘法器和加法器,可以在一个时钟周期内完成相乘、累加两个运算。
近年出现的某些DSP如ADSP2106X、DSP96000系列DSP可以同时进行乘、加、减运算,大大加快了FFT的蝶形运算速度。
(2)总线结构
传统的通用处理器采用统一的程序和数据空间、共享的程序和数据总线结构,即所谓的冯•诺依曼结构。
DSP普遍采用了数据总线和程序总线分离的哈佛结构或者改进的哈佛结构,极大的提高了指令执行速度。
片内的多套总线可以同时进行取指令和多个数据存取操作,许多DSP片内嵌有DMA控制器,配合片内多总线结构,使数据块传送速度大大提高。
如TI公司的C6000系列的DSP采用改进的哈佛结构,内部有一套256位宽度的程序总线、两套32位的数据总线和一套32位的DMA总线。
ADI公司的SHARC系列DSP采用超级哈佛结构(Super Harvared Architecture Computer),内部集成了三套总线,即程序存储器总线、数据存储器总线和输入输出总线。
(3)专用寻址单元
DSP面向数据密集型应用,伴随着频繁的数据访问,数据地址的计算也需要大量时间。
DSP内部配置了专用的寻址单元,用于地址的修改和更新,它们可以在寻址访问前或访问后自动修改内容,以指向下一个要访问的地址。
地址的修改和更新与算术单元并行工作,不
需要额外的时间。
DSP的地址产生器支持直接寻址、间接寻址操作,大部分DSP还支持位反转寻址(用于FFT算法)和循环寻址(用于数字滤波算法)。
(4)片内存储器
针对数字信号处理的数据密集运算的需要,DSP对程序和数据访问的时间要求很高,为了减小指令和数据的传送时间,许多DSP内部集成了高速程序存储器和数据存储器,以提高程序和数据的访问存储器的速度。
如TI公司的C6000系列的DSP内部集成有1M~7M位的程序和数据RAM;ADI公司的SHARC系列DSP内部集成有0.5M~2M位的程序和数据RAM,Tiger SHARC系列DSP内部集成有6M位的程序和数据RAM。
(5)流水处理技术
DSP大多采用流水技术,即将一条指令的执行过程分解成取指、译码、取数、执行等若干个阶段,每个阶段称为一级流水。
每条指令都由片内多个功能单元分别完成取指、译码、取数、执行等操作,从而在不提高时钟频率的条件下减少了每条指令的执行时间。
(6)DSP与其它处理器的差别
数字信号处理器(DSP)、通用微处理器(MPU)、微控制器(MCU)三者的区别在于:DSP面向高性能、重复性、数值运算密集型的实时处理;MPU大量应用于计算机;MCU 则适用于以控制为主的处理过程。
DSP的运算速度比其它处理器要高得多,以FFT、相关为例,高性能DSP不仅处理速度是MPU的4~10倍,而且可以连续不断地完成数据的实时输入/输出。
DSP结构相对单一,普遍采用汇编语言编程,其任务完成时间的可预测性相对于结构和指令复杂(超标量指令)、严重依赖于编译系统的MPU强得多。
以一个FIR滤波器实现为例,每输入一个数据,对应每阶滤波器系数需要一次乘、一次加、一次取指、二次取数,还需要专门的数据移动操作,DSP可以单周期完成乘加并行操作以及3~4次数据存取操作,而普通MPU完成同样的操作至少需要4个指令周期。
因此,在相同的指令周期和片内指令缓存条件下,DSP的运算送到可以超过MPU运算速度的4倍以上。
正是基于DSP的这些优势,在新推出的高性能通用微处理器(如Pentium、Power PC 604e等)片内已经融入了DSP的功能,而以这种通用微处理器构成的计算机在网络通信、语音图像处理、实时数据分析等方面的效率大大提高。
二.DSP处理器的指令
DSP处理器的指令集中都会有一条MAC指令,这条指令可以把两个操作数从RAM中取出相乘,然后加到一个累加器中,所有这些操作都在一个时钟周期内完成。
拥有这样一条指令的处理器就具备了DSP功能。
具有这条指令就称之为数字信号处理器的原因在于,所有的数字信号处理算法中最为常见的算术操作就是"乘-加"。
这是因为数字信号处理中大量使用了内积,或称"点积"的运算。
无论是FIR滤波,FFT,信号相关,数字混频,下变频。
所有这些数字信号处理的运算经常是将输入信号与一个系数表或者与一个本地参考信号相乘然后积分(累加),这就表现为将两个向量(或称序列)进行点积,在编程上就变成将输入的采样放在一个循环buffer里,本地的系数表或参考信号也放在一个buffer里,然后使用两个指针指向这两个buffer。
这样就可以在一个loop里面使用一个MAC指令将二者进行点积运算。
这样的点积运算对与处理器来说是最快的,因为仅需一个始终周期就可以完成一次乘加。
了解DSP的这一特点后,当我们设计一个嵌入式系统时,首先要考虑处理器所实现的算法中是否有点积运算,即是否要经常进行两个数组的乘加,(记住数字滤波,相关等都表
现为两个数组的点积)如果有的话,每秒要做多少次,这样就能够决定是否采用DSP,采用多高性能的DSP了。
三.DSP处理器的数据运算
浮点与定点:在选择DSP器件的时候,是采用浮点还是采用定点,如果用定点是16位还是32位?其实这个问题和你的算法所要求的信号的动态范围有关。
定点的计算是把一个数据当作整数来处理,通常AD采样来的都是整数,这个数相对于真实的模拟信号有一个刻度因子,大家都知道用一个16位的AD去采样一个0到5V的信号,那么AD输出的整数除以2^16再乘以5V就是对应的电压。
在定点DSP中是直接对这个16位的采样进行处理,并不将它转换成以小数表示的电压,因为定点DSP无法以足够的精度表示一个小数,它只能对整数进行计算。
浮点DSP的优势在于它可以把这个采样得到的整数转换成小数表示的电压,并不损失精度(这个小数用科学记数法来表示),原因在于科学记数法可以表示很大的动态范围的一个信号,以IEEE754浮点数为例,单精度浮点格式:[31] 1位符号[30-23]8位指数[22-00]23位小数这样的能表示的最小的数是+-2^-149,最大的数是+-(2-2^23)*2^127.动态范围为20*log(最大的数/最小的数)=1667.6dB 这样大的动态范围使得我们在编程的时候几乎不必考虑乘法和累加的溢出,而如果使用定点处理器编程,对计算结果进行舍入和移位则是家常便饭,这在一定程度上会损失是精度。
原因在于定点处理处理的信号的动态范围有限,比如16位定点DSP,可以表示整数范围为1-65536,其动态范围为20*log(65536/1)=96dB.对于32定点DSP,动态范围为20*log(2^32/1)=192dB,远小于32位ieee浮点数的1667.6dB,但是,实际上192dB对绝大多数应用所处理的信号已经足够了。
由于AD转换器的位数限制,一般输入信号的动态范围都比较小,但在DSP的信号处理中,由于点积运算会使中间节点信号的动态范围增加,所以主要考虑信号处理流程中中间结果的动态范围,以及算法对中间结果的精度要求,来选择相应的DSP。
另外就是浮点的DSP更易于编程,定点DSP编程中程序员要不断调整中间结果的P,Q值,实际就是不断对中间结果进行移位调整和舍入。
在DSP的应用中,我们经常要用到三角函数,或者合成一个正(余)弦波。
这是因为我们喜欢把信号通过傅立叶变换映射到三角函数空间来理解信号的频率特性。
信号处理的一些计算技巧都需要在DSP软件中进行三角函数计算。
然而三角函数计算是非线性的计算,DSP并没有专门的指令来求一个数的正弦或余弦。
于是我们需要用线性方法来近似求解。
一个直接的想法是用多项式拟合,这也正是大多数DSP C编译器提供正余弦库函数所采用的方法。
其原理是把三角函数向函数空间{1,x,x^2,x^3....}上投影,从而获得一系列的系数,用这些系数就可以拟合出三角函数。
比如,我们在[0,pi/2]区间上拟合sin,只需在matlab中输入以下命令:
x=0:0.05:pi/2;
p=polyfit(x,sin(x),5)
就得到5阶的多项式系数:
p =
0.00581052047605 0.00580963216172 -0.17193865685360
0.00209002716293 0.99969270087312 0.00000809543448
于是在[0,pi/2]区间上:
sin(x)=0.00000809543448+0.99969270087312*x+0.00209002716293*x^2-0.17193865685360*x ^3+ 0.00580963216172*x^4+0.00581052047605*x^5
于是在DSP程序中,我们可以通过用乘加(MAC)指令计算这个多项式来近似求得
sin(x) 当然如果用定点DSP还要把P这个多项式系数表用一定的Q值来改写成定点数。
这样的三角函数计算一般都需要几十个cycle 的开销。
这对于某些场合是不能容忍的。
另一种更快的方法是借助于查表,比如,我们将[0,pi/2]分成32个区间,每个区间长度就为pi/64,在每个区间上我们使用直线段拟合sin曲线,每个区间线段起点的正弦值和线段斜率事先算好,存在RAM里,这样就需要在在RAM里存储64个
常数:32个起点的精确的正弦值(事先算好):s[32]={0,sin(pi/64),sin(pi/32),sin(pi/16)....} 32个线段的斜率:f[32]={0.049,.....} 对于输入的每一个x,先根据其大小找到所在区间i,通常x用定点表示,一般取其高几位就是系数i了,然后通过下式即可求出sin(x):sin(x)= s[i]*f[i] 这样一般只需几个CYCLE就可以算出正弦值,如果需要更高的精度,可以将区间分得更细,当然,也就需要更多的RAM去存储常数表。
四.DSP芯片
DSP芯片,也称数字信号处理器,是一种特别适合于进行数字信号处理运算的微处理器具,其主机应用是实时快速地实现各种数字信号处理算法。
根据数字信号处理的要求,DSP芯片一般具有如下主要特点:
(1)在一个指令周期内可完成一次乘法和一次加法;
(2)程序和数据空间分开,可以同时访问指令和数据;
(3)片内具有快速RAM,通常可通过独立的数据总线在两块中同时访问;
(4)具有低开销或无开销循环及跳转的硬件支持;
(5)快速的中断处理和硬件I/O支持;
(6)具有在单周期内操作的多个硬件地址产生器;
(7)可以并行执行多个操作;
(8)支持流水线操作,使取指、译码和执行等操作可以重叠执行。
五.数字信号处理与MATLAB实现
1.n1=[ns:nf];
x1=[zeros(1,n0-ns),1,zeros (1,nf-n0)];单位抽样序列的产生
2. subplot(2,2,4) 画2行2列的第4个图
3. stem(n,x) 输出离散序列,(plot连续)
4. 编写子程序可调用
单位抽样序列生成函数impseq.m
[x,m]=impseq(n0,ns,nf); 序列的起点为ns,终点为nf,在n=n0点处生成一个单位脉冲n=[-5:5];x1=3*impseq(2,-5,5)-impseq(-4,-5,5)
x1 = 0 -1 0 0 0 0 0 3 0 0 0
n=[-5:5];x1=3*impseq(2,-4,5)-impseq(-4,-5,4) 起点到终点长度要一致
x1 = 0 -1 0 0 0 0 3 0 0 0
单位阶跃序列生成函数stepseq.m
[x,n]=stepseq(no,ns,nf) 序列的起点为ns,终点为nf,在n=n0点处生成一个单位阶跃5. [H,w]=freqz[B,A,M]
计算出M个频率点上的频率响应,存放于H向量中,M个频率存放在w向量中,freqz 函数自动将这M个频率点均匀设置在频率范围[0,]之间。
若缺省w和M时,函数自动选取512个频率点计算。
不带输出向量的freqz函数将自动绘制幅频和相频曲线。
也可[H,w]=freqz(B,A);
plot(w/pi,abs(H)); 绘出幅频特性
6. zplane(z,p)
绘制出列向量z中的零点(以符号o表示)和列向量p中的极点(以符号x表示)以及参考单位圆。
7. 傅里叶变换信号时域和频域变换连续对应着非周期,离散对应着周期。
一个域的离散必然导致另一个域的周期延拓。
8. fft和ifft:一维快速傅里叶变换和逆傅里叶变换
X=fft(x,N),用FFT算法计算序列向量X的N点DFT,缺省N时,fft函数自动按X的长度计算DFT。
当N为2的整数次幂时,fft按基2算法计算,否则用混合基算法。
ifft的调用格式类似。
9. fft2和ifft2: 二维快速正傅里叶变换和逆傅里叶变换
(1)Y=fft2(x),据二维傅里叶变换参数X是向量fft2(x)相当于fft(fft(x)’)’,即先对X 的列做一维傅里叶变换,然后再对变换结果的行作一维傅里叶变换;若X是向量,则此傅里叶变换即变成一维傅里叶变换fft; 若X是矩阵,则是计算该矩阵的二位傅里叶变换。
(2)Y=fft2(X, M, N),通过对X进行补零或截断,使得X成为(M*N)的矩阵。
函数iff2的参数应用与函数fft2完全相同。
10. czt: 线形调频Z变换
Y=czt(x,m,w,a),此函数计算由z=a*w.^(-(0:m-1))定义的z平面螺旋线上各点的z变换,a规定了起点,w规定了相邻点的比例,m规定了变换的长度,后三个变量默认值为a=1,w=exp(j*2*pi/m)及m=length(x)因此y=czt(x)就等于y=fft(x).
11. dct和idct:离散余弦正变换和离散余弦逆变换
Y=dct(x,N),完成如下变换,N的默认值为length(x).
k=0, 1, …,N-1
12. fftshift
Y=fftshift(x),用来重新排列X=fft(x)的输出,当X为向量时,把X的左右两半进行交换,从而将零频分量移至频谱的中心;如果X为二维傅里叶变换的结果,它同时将X的左右和上下部分进行交换。
13. fftfilt
Y=fftfilt(b,x),采用重叠相加法FFT对信号向量x快速滤波,得到输出序列向量y,向量b为FIR滤波的单位脉冲相应,h(n)=b(n+1),n=0,1,…,length(b)-1.
14. 用DFT进行谱分析时,必须将序列阶段为长度为N的有限长序列。
造成频谱泄露和谱间干扰。
泄露使频谱变得模糊,分辨率降低;旁瓣引起不同分量间的干扰。
截断效应无法完全消除,可以加宽窗和缓慢截断。
矩形窗比海明窗的频率分辨率高(泄漏小),但谱间干扰大,因此海明窗是以牺牲分辨率来换取谱间干扰的降低。
16. N=25
h=impz(b,a,N) N次采样,b,a为零极点多项式系数,a不算,如:直接型
b=[1,-3,11,27,18];a=[16,12,2,-4,-1] %级联型
b0=4;B=[1,1,0;1,-1.4142136,1];A=[1.-0.5.0;1.0.9.0.81] %并联型
C=0;B=[-14,-12;24,26];A=[1,-2,3;1,-1,1]
delta=impseq(0,0,N);
x=[one(1,5),zero(1,N-5)];
h=filter(b,a,delta); %直接型单位脉冲响应
y = filter(b,a,x); %直接型输出信号
h=casfilter(b0,B,A,delta); %级联型单位脉冲响应
h=casfilter(b0,B,A,x); %级联型输出响应
h=parfiltr(C,B,A,delta); %并联型单位脉冲响应
h=parfiltr(C,B,A,x); %并联型输出响应
[b0,B,A]=dir2cas(b,a); %直接型转换成级联型
[b,a]=cas2dir(b0,B,A); %级联型转换成直接型
[C,B,A]=dir2par(b,a); %直接型转换成并联型
[b,a]=par2dir(C,B,A); %并联型转换成直接型
17. buttord.m
用来确定数字低通或模拟低通滤波器的阶次,其调用格式分别是:(1)[N,Wn]=buttord(Wp,Ws,Rp,Rs),(2) [N,Wn]=buttord(Wp,Ws,Rp,Rs,’s’)。
格式(1)对应数字滤波器, 式中Wp,Ws分别是通带和阻带的截止频率,实际上它们是归一化频率,其值在0~1之间,1对应抽样频率的一半。
对低通和高通滤波器,Wp,Ws都是标量,对带通和带阻滤波器,Wp,Ws都是1 2的向量。
Rp,Rs分别是通带和阻带的衰减,单位为dB。
N是求出的相应低通滤波器的阶次,Wn是求出的3dB频率,它和Wp稍有不同。
格式(2)对应模拟滤波器,式中各个变量的含义和格式(1)相同,但Wp,Ws及Wn 的单位为rad/s, 因此,他们实际上是频率。
六.结语
当前虽然DSP无论是作为一种成熟的技术还是一种成熟的产品均已成为数字信息时代的主流,DSP之所以可以在嵌入式应用方面挑战微处理器CPU,在数字控制方面可挑战单片机MCU,还在于DSP结构体系已实现多样性。
DSP既有追求高性能并行结构,也有追求低功耗的省点核心;DSP中不仅可以集成闪存、数据转换器和多种接口,还可以集成CPU 核心、视频和音频接口。
软件可编程性始终是DSP市场拓展的关键。
目前DSP开发工作中的80%以上已是软件工作。
数字信息产品中需要应用到许许多多新的技术和标准,其中不少需要经过不断完善。
DSP首先可以构建一个强大灵活的硬件平台和软件基础,然后集成各种软件,其中可以包括标准算法、驱动、协议和应用等等。
DSP软件还易于维护和升级,大量工作可以在线实现。
七.参考资料
1. DSP —C114 中国通信网
2.中国DSP网
3. 数字信号处理教程
4. 宇华电子技术论坛
5.数字信号处理基础
2008.6.14.
宋健
黄冈师范学院物理科学与技术学院。