打印

DSP和51之我见--顺便说说DSP除法

[复制链接]
2612|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lqg1121|  楼主 | 2007-9-24 19:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
经过一段时间的学习,对于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系统的数字控制部分和模拟电路处理部分的功能。

相关帖子

沙发
ggzzc| | 2007-10-4 09:05 | 只看该作者

受教了

感觉学习DSP需要掌握很多数学算法知识,而学51单片机则不需要。

使用特权

评论回复
板凳
HYHJJG| | 2007-10-8 19:39 | 只看该作者

具体的讲是DSP用的场合相对复杂些

要解决的问题需要运用广泛的数学知识;而51甬道的地方基本都是简单的逻辑、数字计算;要他做FFT自然是鸭子上天
不同的领域需要不同的知识嘛

使用特权

评论回复
地板
soso| | 2007-10-11 12:31 | 只看该作者

DSP6482只是DM642的增强版吗? 先了解一哈再说.

使用特权

评论回复
5
水松425| | 2007-10-13 18:42 | 只看该作者

迷茫

我也刚刚学DSP,看了彭启踪的DSP视频教程,收获挺大的,那个视频教的确不错。不过具体到用的时候还是不知道从何处做起。

使用特权

评论回复
6
lvgaopan| | 2007-10-16 23:11 | 只看该作者

都是哈佛架构

1、架构!51用的是冯诺伊曼架构,DSP器件使用的哈佛架构,一个是程序、数据、IO共用地址编码,一个是程序、数据、IO独立地址编码,所以,51的指令是一条一条的执行,DSP的指令可以多条并行处理,从而获得了更快的计算速度。


错了,51也是哈佛架构的。区别在于DSP增加了流水线操作,使处理器可以并行处理三条指令,一条执行,一条译码,一条取指,从而减少指令执行的时间。

使用特权

评论回复
7
witnessiz| | 2011-11-22 13:18 | 只看该作者
楼主这篇**漏洞百出。。。比如楼上指出的。。。
不过作为初学者,楼主还是很强势的。呵呵。
51内核和dsp诞生的都比较早,只是前者技术已经停滞,后者与时俱进。
建议楼主去搞一下51以外的单片机,再对比一下dsp,然后回来看你现在写的**,你会发现有种很奇妙的感觉,哈哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

42

帖子

1

粉丝