首页编程dsp教程(DSP 入门教程)

dsp教程(DSP 入门教程)

编程之家2024-02-1489次浏览

一、DSP学习入门

DSP学习入门:

dsp教程(DSP 入门教程)

DSP的特点:

对于没有使用过DSP的初学者来说,第一个困惑就是DSP其他的嵌入式处理器究竟有什么不同,它和单片机,ARM有什么区别.事实上,DSP也是一种嵌入式处理器,它完全可以完成单片机的功能.。

唯一的重要的区别在于DSP支持单时钟周期的"乘-加"运算.这几乎是所有厂家的DSP芯片的一个共有特征.几乎所有的DSP处理器的指令集中都会有一条MAC指令,这条指令可以把两个操作数从RAM中取出相乘,然后加到一个累加器中,所有这些操作都在一个时钟周期内完成.拥有这样一条指令的处理器就具备了

DSP功能:

具有这条指令就称之为数字信号处理器的原因在于,所有的数字信号处理算法中最为常见的算术操作就是"乘-加".这是因为数字信号处理中大量使用了内积,或称"点积"的运算.无论是FIR滤波,FFT,信号相关,数字混频,下变频.所有这些数字信号处理的运算经常是将输入信号与一个系数表或者与一个本地参考信号相乘然后积分(累加),这就表现为将两个向量(或称序列)进行点积,在编程上就变成将输入的采样放在一个循环buffer里,本地的系数表或参考信号也放在一个buffer里,然后使用两个指针指向这两个buffer.这样就可以在一个loop里面使用一个MAC指令将二者进行点积运算.这样的点积运算对与处理器来说是最快的,因为仅需一个始终周期就可以完成一次乘加.

了解DSP的这一特点后,当我们设计一个嵌入式系统时,首先要考虑处理器所实现的算法中是否有点积运算,即是否要经常进行两个数组的乘加,(记住数字滤波,相关等都表现为两个数组的点积)如果有的话,每秒要做多少次,这样就能够决定是否采用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对绝大多数应用所处理的信号已经足够了。

dsp教程(DSP 入门教程)

由于AD转换器的位数限制,一般输入信号的动态范围都比较小,但在DSP的信号处理中,由于点积运算会使中间节点信号的动态范围增加,所以主要考虑信号处理流程中中间结果的动态范围,以及算法对中间结果的精度要求,来选择相应的DSP.另外就是浮点的DSP更易于编程,定点DSP编程中程序员要不断调整中间结果的P,Q值,实际就是不断对中间结果进行移位调整和舍入.。

DSP与RTOS:

TI的CCS提供BIOS,ADI的VDSP提供VDK,都是基于各自DSP的嵌入式多任务内核.DSP编程可以用单用C,也可以用汇编,或者二者结合,一般软件编译工具都提供了很好的支持.我不想在这里多说BIOS,VDK怎么用这在相应的文档里说的很详细.我想给初学者说说DSP的RTOS原理.用短短几段话说这个复杂的东西也是挑战!

其实DSP的RTOS和基于其他处理器的通用RTOS没什么大的区别,现在几乎人人皆知的uCOSii也很容易移植到DSP上来,只要把寄存器保存与恢复部分和堆栈部分改改就可以.一般在用BIOS和VDK之前,先看看操作系统原理的书比较好.uCOS那本书也不错.

BIOS和VDK其实是一个RTOS内核函数集,DSP的应用程序会和这些函数连接成一个可执行文件.其实实现一个简单的多任务内核并不复杂,首先定义好内核的各种数据结构,然后写一个scheduler函数,功能是从所有就绪任务中(通过查找就绪任务队列或就绪任务表)找出优先级最高的任务,并恢复其执行.然后在此基础上写几个用于任务间通信的函数就可以了,比如event,message box,等等.

RTOS一般采用抢先式的任务调度方式,举例说当任务A等待的资源available的时候,DSP会执行一个任务调度函数scheduler,这个函数会检查当前任务是否比任务A优先级低,如果是的话,就会把它当前挂起,然后把任务A保存在堆栈里寄存器值全部pop到DSP处理器中(这就是所谓的任务现场恢复).接着scheduler还会把从堆栈中取出任务A挂起时的程序执行的地址,pop到PC,使任务A继续执行.这样当前任务就被任务A抢先了.

使用RTOS之后,每个任务都会有一个主函数,这个函数的起始地址就是该任务的入口.一般每个任务的主函数里有一个死循环,这个循环使该任务周期地执行,完成一部分算法模块的功能,其实这个函数跟普通函数没任何区别,类似于C语言中的main函数.一个任务创建的时候,RTOS会把这个函数入口地址压入任务的堆栈中,好象这个函数(任务)刚发生过一次中断一样.一旦这个新创建任务的优先级在就绪队列中是最高的,RTOS就会从其堆栈中弹出其入口地址开始执行.

有一个疑问是,不使用RTOS,而是简单使用一个主循环在程序中调用各个函数模块,一样可以实现软件的调度执行.那么,这种常用的方法与使用RTOS相比有什么区别呢?其实,使用主循环的方法不过是一种没有优先级的顺序执行的调度策略而已.这种方法的缺点在于,主循环中调用的各个函数是顺序执行的,那么,即使是一个无关紧要的函数(比如闪烁一个LED),只要他不主动返回,也会一直执行直到结束,这时,如果发生一个重要的事件(比如DMA buffer full中断),就会得不到及时的响应和处理,只能等到那个闪烁LED的函数执行完毕.这样就使整个DSP处理的优先次序十分不合理.而在使用了RTOS之后,当一个重要的事件发生时,中断处理会进入RTOS,并调用scheduler,这时scheduler会让处理这一事件的任务抢占DSP处理器(因为它的优先级高).而哪个闪烁LED任务即使晚执行几毫秒都没任何影响.这样整个DSP的调度策略就十分合理。

二、DSP 如何 入门学要学什么基础知识

献给DSP2812初学者2010年06月15日星期二下午 11:57DSP数字信号处理器(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法,这些信号由数字序列表示。在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛的应用。德州仪器(TI公司)、Freescale等半导体厂商在这一领域拥有很强的实力。

TMS320F2812数字信号处理器是TI公司最新推出的32位定点DSP(Digital signal o数字信号处理器)控制器,是目前控制领域最先进的处理器之一。其频率高达150MHz,大大提高了控制系统的控制精度和芯片处理能力。TMS320F2812芯片基于C/C++高效32位TMS320C28x DSP内核,并提供浮点数学函数库,从而可以在定点处理器上方便地实现浮点运算。在高精度伺服控制、可变频电源、UPS电源等领域广泛应用,同时是电机等数字化控制产品升级的最佳选择。

TMS320F2812的主要特点如下:

具有32位定点DSP TMS320C28xTMCPU内核

l存储器

4K 16 Boot ROM

18K 16 RAM

128K 16 Flash

l速度

6.6ns的指令周期,每秒可以执行150M条指令。

l事件管理器(EV)

12路比较PWM通道;

4个16位通用定时器,均具有4种计数模式;

6个全比较单元;

6个捕获单元,其中4个具有连接正交编码器脉冲的功能;

外部时钟输入和外部比较输入。

l模/数转换器(ADC)

内置具有两个8选1多路切换器和双采样保持器的12位ADC内核;

快速的转换时间(S/H+转换)为80ns(ADC工作在25MHz);

16个模拟输入通道;

自动排序功能,具有两个独立的最多可选择8个模拟转换通道的排序器,可独立以双排序器模式工作,也可级连后组成最多可选择16个通道的模式,每次需要转换的通道均可通过编程来选择。

多个触发源可启动ADC,可通过软件、EVA、EVB和外部引脚来触发;

采样和保持获取时间窗具有单独的预定标。

l具有56个单独可编程的多路复用I/O引脚

l串行外设接口模块(SPI)

l串行通信接口模块(SCI)

l CAN控制器模块(CAN)

l多通道缓冲串行口(McBSP)

以上内容是让初学者对于DSP2812有一个较为专业性的印象,也不必刻意去记什么,当我们具体要用到有关参数的时候自然就知道这些技术数据的意义了。

本文力求以一个初学者的角度,完美的讲述每一个可能出现在初学DSP过程中出现的问题。

目前的大学教育,存在的一个最大问题就是老师不顾二三的就开始讲述课本内容,而不交代清楚学习该课程的意义、目的、实际应用情况、发展情况及一些相关领域的知识,缺乏概述性内容,也许有一些,但大多是交代的不够,以至于学生在学习这门课的时候一头雾水,从开始就不知道要干啥,到后来越听越觉得是天书,孰知学生也很无奈,“我也不想睡觉,我也不想旷课,是你逼我的”。

所以在开始讲述一个大家都觉得陌生的内容时,我们在最开始的时候要细细交代,越细越好,一定要让学生理清学习的思路,明白学习研究的方向,这是无比重要的。等到学生入门以后,遇到的问题都是很好解决的,因为学生知道解决问题的目的、方向,会自己去思考,而那时候老师的作用已经不再是那么重要了,老师更多的似乎应该是设置一些障碍,让你寻着不同思路去解决,而不是直接告诉你一条解决的办法。

我们要从回答一个最简单的问题做起。很多学生往往感觉问题太简单而不敢问老师,我这里说的这个简单,指的是非常简单甚至是学生自己都感觉低级而难以启齿的问题,它可能跟正题根本就没什么关系,因为在大多数时候若是学生能问出和课程相关的问题,已经说明他学会了很多内容,并开始入门了,一个对你讲述内容一窍不通的学生,是不可能问出任何有深度的问题的。

学生在这里遇到的难以启齿的问题恰恰是DSP初学者们遇到的第一道门槛。这是我学习DSP之初的亲身感受,由于问题太简单,总是不好意思问老师问同学,所以只能靠自己解决,故很是吃力。所以,对于初学DSP的同学来说,交代清楚一些初级的问题,解决一切小疑团是非常重要的。

归纳起来对于DSP初学者的入门要交代清楚以下几个内容:

1. DSP是个什么东西,基本原理是什么?

2. DSP能用在什么地方,为什么要去研究?

3.怎么开展研究工作,需要什么软硬件设备?需要的基础知识,最开始学什么?

万事开头难,对于DSP的初学者也不例外。那么本站将着力解决你在学时DSP之初遇到的种种问题,一步一步手把手的带你进入DSP的神奇世界。当你成功跨越入门难题之后,那么剩下的路就要靠你自己去走了,因为当你投入到具体的课题以后,你会发现在研究中所碰到的各种问题只有你自己才能够真正解决,这正是充分发挥你主观能动性,考验你能力的时候了,那时候也正是你不断摸索前进的过程,你会逐步发现你已经完全入门走向精通了,这正是我希望看到的。

本人是电力电子专业毕业的硕士研究生,从事DSP的工作三年有余,在学习之初遇到了很多困难,很期望能寻找到一些初学者的入门技巧,或是类似教程的东西,而今,本人将就这几年所研究的成果及心得体会毫无保留的奉献给大家,对初学者当然会有抛砖引玉、无师自通、豁然开朗的作用,对于DSP的共同工作者来说,则是一个互相学习、交流经验、共同进步的良好契机。

祝初学者速成,同道中人工作顺利。

三、dsp调音教程

dsp调音教程方法如下:

材料准备:DSP、笔记本电脑。

操作步骤:

1、大概的情况,要是自己调的话,第一先把频率切好一般高通60hz,低通20000hz。

2、还有一个斜率栏,自己尝试一下个斜率的感觉,哪个舒适,哪个好听就选哪个,然后就是调节EQ。

3、有3个点一个是180hz一个是800hz还有一个是8000hz这3个点往下降,形成一个波谷。

4、其他频率自行调节,怎么舒适怎么调,然后延迟的话,调左前门就行。

5、边调边听,直到感觉声音是从仪表中间发出一样。

6、调音的话,具体还是要去专业店,因为很多说不清的东西,还有调音这玩意儿太靠耳力,没有一定水平调不好。

流水线设计(流水线)服务器性能监控(如何实现服务器监控性能?)