DSP数字滤波FIR设计教程:[4]FIR的DSP实现

 时间:2025-01-05 10:59:32

1、线性缓冲区法:线性缓冲区法又称延迟线法,(a)对于N级的FIR滤波器,在数据存储器中开辟一个N单元的缓冲区(滑窗),用来存放最新的N个输入样本;(b)从最老样本开始取数,每取一个样本后,将此样本向下移位;(c)读完最后一个样本后,输入最新样本存入缓冲区的顶部

2、2)循环缓冲区法:循环缓冲区法的如下:(a)对于N级FIR滤波器,在数据存储器中开辟一个N单元的缓冲区(滑窗),用来存放最新的N个输入样本;(b)从最新样本开始取数;(c)读完最后一个样本(最老样本)后,输入最新样本来代替最老样本,而其他数据位置不变;(d)用片内BK(循环缓冲区长度)寄存器对缓冲区进行间接寻址,使循环缓冲区地址首尾相邻。本次设计的FIR滤波器所采用的就是循环缓冲区法

3、(2)C语言实现FIR采用C语言算法在DSP平台上实现了FIR低通数字滤波器,C语言算法相比于汇编算法可移植性很强。这里是在TMS320VC5510DSP为平台编写的C语言算法, 此算法可以稍加改动用在其他DSP芯片上, 而汇编算法则不然。这种方法具有以下优点

4、(a) 程序的入口和出口由C语言自动管理,不必手工编写汇编程序实现。(b) 程序结构清晰,可读性强。(c) 程序调试方便。由于C程序中的变量全部由C语言来定义,因此采用C源码调试器可以方便地观察C语言变量。(d) 可移植性较强,通用性好,具体代码如下:

5、#include"stdio.h"#include"fdacoefs.h" //头文件包含滤波器的系数#define N 81 //定义滤波器的阶数为81阶#define Length 200 //定义缓冲区数组大小为200long yn;int input[Length]; //存放输入数据int output[Length]; //存放输出数据void main(){ int m,n; int *x; for(n=0;n<Length-1;n++) //循环导入数据 { x=&input[n]; //指针指向每次导入的数据 yn=0; //每做完一次乘累加后,把值赋给output数组后,从新归0 for(m=0;m<N-1;m++) yn+=B[m]*(*(x++));//做N次的乘累加 output[n]=yn; 把值赋给output数组 } while(1); //做完滤波后使程序保持在本循环中}

  • 如何复制CSDN软件的推荐链接
  • 如何使用KeiluVision3建立一个project
  • NI Multisim如何关闭未选择全部则通知?
  • 移花接木改一个5伏电源
  • vs2022怎么修改主题颜色?
  • 热门搜索
    预防疾病手抄报图片 幼儿手抄报图片 爱的教育手抄报 语言的魅力手抄报资料 文明礼仪知识手抄报 关于道德的手抄报 晒家风手抄报 手抄报感恩 人鸦手抄报 小学五年级手抄报