dsp原理及应用

dsp原理及应用,第1张

DSP原理与特点

数字信号处理是将信号以数字方式表示并处理的理论和技术。数字信号处理与模拟信号处理是信号处理的子集。DPS原理就是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。

数字信号处理的目的是对真实世界的连续模拟信号进行测量或滤波。因此在进行数字信号处理之前需要将信号从模拟域转换到数字域,这通常通过模数转换器实现。而数字信号处理的输出经常也要变换到模拟域,这是通过数模转换器实现的。

数字信号处理的算法需要利用计算机或专用处理设备如数字信号处理器(DSP)和专用集成电路(ASIC)等。数字信号处理技术及设备具有灵活、精确、抗干扰强、设备尺寸小、造价低、速度快等突出优点,这些都是模拟信号处理技术与设备所无法比拟的。

数字信号处理的实现方法很多,比如 在通用计算机上用软件(如Fortran、C语言)实现;在通用计算机系统中加上专用的加速处理机实现;用通用的单片机实现,这种方法可用于一些不太复杂的数字信号处理,如数字控制等;

用通用的可编程DSP芯片实现。与单片机相比,DSP芯片具有更加适合于数字信号处理的软件和硬件资源,可用于复杂的数字信号处理算法;

用专用的DSP芯片实现,在一些特殊的场合,要求的信号处理速度极高,用通用DSP芯片很难实现,例如专用于FFT、数字滤波、卷积等算法的DSP芯片,这种芯片将相应的信号处理算法在芯片内部用硬件实现,无需软件编程。

DSP普遍采用数据总线和程序总线分离的哈佛结构,允许取指令和执行指令进行全部重叠进行;可直接在程序和数据空间之间进行信息传送,减少访问冲突,从而获得高速运算能力。

而且大多采用流水技术,即每条指令都由片内多个功能单元分别完成取指、译码、取数、执行等步骤,从而在不提高时钟频率的条件下减少了每条指令的执行时间。DSP通常有三级以上的流水线。

在每个时钟周期执行多个 *** 作。针对滤波、相关、矩阵运算等需要大量乘法累加运算的特点,DSP大都配有独立的乘法器和加法器,使得在同一周期内可以完成相乘、累加两个运算。有的DSP可以同时进行乘、加、减运算,大大加快了FFT的蝶形运算速度。

DSP系统的应用领域

(1)通用数字信号处理:数字滤波、卷积、相关、FFT、自适应滤波、波形发生等。

(2)通信领域:高速调制解调器、编/译码器、传真、程控交换机、卫星通信、IP电话等。

(3)语音处理:语音识别、合成、矢量编码、语音信箱等。

从这些宏定义可以看到C语言是如何支持硬件编程的。

以#define IMR (volatile unsigned int )0x0004 为例:

1)0x0004,这个容易理解,是一个十六进制的常数

2)再看(volatile unsigned int ),这是一个强制转换,将0x0004转换成(volatile usigned int )

3)现在解释volatile usigned int 是什么。 表示指针(地址),这个指针指向一个 usigned int的数。最前面的volatile有特殊含义:这个指针必须保存在RAM中(不是FLASH或DSP寄存器中)

4)综合上面1)2)3)可知: (volatile unsigned int )0x0004 的含义是:

0x0004是一个地址,在这个地址内保存的是一个unsigned int 类型的整数。这个地址存在于RAM

5)(volatile unsigned int )0x0004 最左边多一个,表示取地址指向单元的内容。综合起来的意思是:从0x0004地址单元中取出一个usigned int 类型的数据值

6)#define IMR (volatile unsigned int )0x0004 的意思是,将从0x0004地址单元中取出一个usigned int 类型的数据值定义为IMR

7)根据DSP硬件,在DSP中RAM中的 0x0004地址单元恰好是中断管理寄存器!

8)绕了半天,#define IMR (volatile unsigned int )0x0004 的意思是:在C语言程序中,定义了一个宏标示符 IMR 来表示DSP中的中断管理寄存器。在程序中,可以通过这个宏标示符来使用这个寄存器:

unsigned int v = IMR; //取出中断管理寄存器的值并赋给v

main()

{

int i;

unsigned int px;

unsigned int py;

unsigned int pz;

px=(unsigned int )0x80000;

py=(unsigned int )0x80100;

//-----请按实验要求将程序补充完整-----//

while(1)

{

for(i=0;i<16;i++)

{

scanf("%d",(px+i));

(py+i)=0;

}

printf("\n");

pz=px;

px=py;

py=pz;

for(i=0;i<16;i++)

printf("%d",(py+i));

printf("\n");

}

// 在此加软件断点

}

对于学习DSP重要的是理清外设的工作 构架,相应的寄存器如何设置,没有必 要对寄存器花太多的时间去研究,用的 时候能找到(寄存器的名称都是英文的 缩写,很好理解的)。学习DSP,先找 本中文教材入个门,之后你会发现好多 地方、尤其是真正要用的,往往也是最 复杂的地方书上都找不到,更谈不上做 什么项目了,这时候就要开始深入研究 Data Sheet,以及官网的源代码示例 有了之前的中文教材基础看起来就快多 了;学习DSP重要的不是会编程,而是 算法的研究(Matlab/Simulnk仿真就不

以上就是关于dsp原理及应用全部的内容,包括:dsp原理及应用、dsp的程序问题。解释一下dsp c 语言的问题、DSP的程序怎么编写完整等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9875730.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存