经过一段时间的学习,对于DSP有了一定的自我见解了。本人是大学专业是自动化,用的最多的是51单片机,学习最多的是控制理论,用的最多的算法是PID算法,控制的一般是电机等。工作后倒是基本没有碰电机等东西了。进来买了基本DSP的书,学习了一下。一些学习心得说出来给各位看看,讲得不对的地方不要见笑。到底DSP是什么,我们又需要学习一些什么?不同过程的学习获得了不同阶段的理解。刚开始,感觉DSP是一些和51类似的器件,只是该CPU功能强大一些。具体强大在什么地方呢? 1、架构!51用的是冯诺伊曼架构,DSP器件使用的哈佛架构,一个是程序、数据、IO共用地址编码,一个是程序、数据、IO独立地址编码,所以,51的指令是一条一条的执行,DSP的指令可以多条并行处理,从而获得了更快的计算速度。 2、运算能力。很多DSP器件硬件支持浮点数乘法,同时有硬件循环指令。硬件浮点乘法极大的提高了运算能力。硬件循环指令又大大的释放了重复运算时CPU的干预开销。两者合一大大提高了DSP器件的运算能力。3、如果到这里看来,我们会仅仅说DSP只是一个增强的51芯片而已,没有什么特别的地方吗!为什么要独立出来自成一体呢?经过进一步的学习,DSP拆开来看就是数字信号处理,深一步的理解,何谓数字信号处理呢?和他对应的就是模拟信号处理。如果将数字信号处理和模拟信号处理放到一起来看,各位就会明白了。我是学习自动化出身的,不可避免的和模拟信号处理结下了不解之缘。如果要我用模拟器件来做一阶滤波,或者是二阶滤波,或者是巴特奥斯滤波器等等,手到擒来的事情,又或者做一些其他的低通,高通,带通,带阻也不会是一件困难的事情。由于模拟信号的先入为主,之前从来没有想过数字上的处理也可以实现模拟信号处理的功能。DSP的精髓也就是如他自己所表现的,通过采样信号得到的数据,经过数字处理,将信号输出自己的期望值。这个过程可以这样来看,信号输入-->AD-->滤波处理-->DA-->信号输出,如果忽略这个过程(AD-->滤波处理-->DA),那么就是{信号输入-->变换-->信号输出}。可以看到,这个过程和模拟信号的处理过程是一样的! 可以得出结论,DSP的精髓就是信号处理,数字化的信号处理。他和模拟信号处理是针锋相对的。所以,这来需要用到大量的运算,并且是大量的浮点运算,所以很多DSP引入了浮点数的乘法,引入了硬件循环控制,但是仅仅是这样还不够,还达不到我们期望的速度,所以,还引入了更高级的CPU架构,使用了哈佛架构,让指令能够并行处理,于是比51强大的运算能力优势体现出来了。没有快速的,可优化的,高效率的CPU,是无法实现数字信号处理的。 通过数字信号处理,我们可以看到,大量的模拟器件可以被抛弃,运放没有了,电阻没有了,电容没有了,信号处理部分的繁杂电路没有了。噪声来了?没有模拟滤波器怎么办?没有关系,用数字模拟一个滤波器一样可以实现,并且做的还可以比模拟滤波器更好。这就是DSP--数字信号处理的魅力所在吧。 最后聊一下除法。很多面试的时候恐怕DSP工程师都会遇到这个问题。这里说说我对书上实现DSP除法的理解。 除法,为什么没有硬件模块大规模的实现呢? 乘法和除法是一对冤家!他就和开门,关门一样,是相反的一个操作,所以对于相反的操作,应该是可以用另一个相反的操作--乘法来实现除法的。对于除法的实现,有三种方法。 1、最高效率的实现,利用空间换取时间的查表方法当然是最高效率的了。没有比他更高效率的除法实现了。当然这种方法需要大量的空间。 2、还有一种方法叫曲线拟合的方法。何谓曲线拟合?打个比方,函数f(x) = 1/x;我们知道函数f(x)是一条双曲线,在第一象限,我们可以用N条折线相连来逼近该曲线,如果我们知道每一条折线的斜率和x范围(折线方程用f(x) = kx + c表示),那么,函数的x值一旦给定,我们就可以通过该折线计算出的值来代替该函数的值,只要该折线和曲线逼近足够,那么获得的值的误差就是可以被接受的,从而实现了除法的运算。可以看到,折线方程的计算中没有除法,只有乘法和加法。对于DSP器件来说,乘法和加法是可以被硬件直接实现的,故,该除法的实现方式也可以被高效的实现。 3、第三种方法是级数展开的方法。打个比方,函数f(x) = 10log(x) ; 当|x-1|<1的时候,函数f(x)收敛,所以函数可以展开为 f(x) = 10log(x) = 4.35[(x-1) - (1/2)*(x-1)^2 + (1/3)*(x-1)^3……] 显然,对于展开后的函数表达式已经没有了浮点数的除法了,虽然有一些除法,但是也仅仅是1/2或者是1/3、1/4这样简单的除法了,这些简直就可以用一个很小很小的表格来存贮。剩下的只是一些乘法操作和除法操作了,为了保证精度,仅仅需要计算前面四项到五项就可以了。所以,在函数收敛的时候,采用级数展开也未尝不是一种很好的实现算法。 4、另外还有一点需要注意的就是,如果a/b这种运算中的1/b很多的话,不妨先将1/b的值计算出来,然后统一做a*(1/b)的运算,那样也可以大大减少除法的运算量,提高系统的处理速度。 由于DSP本身的三大特性--多指令同时运行、硬件循环、硬件浮点乘法指令,决定了他在可以实现信号的实时数字处理,而51系统不能,所以我们的51系统需要配合大量的模拟电路来控制一个系统,而DSP系统则不要,他本身就可以集成51系统的数字控制部分和模拟电路处理部分的功能。
[此贴子已经被作者于2008-12-3 16:59:34编辑过] |