数字音频技术(第6版) 739


分类:相关阅读 / 「数字音频技术(第6版)」

数字音频技术(第6版) 739
前一篇:数字音频技术(第6版) 738 下一篇:数字音频技术(第6版) 740
文本阅读:
  712数字音频技术(第6版
  程序的剩余部分仍旧是类似的,就是把下一个数据值载入到"×0",再把要
  相乘的滤波器系数载入到"y0",然后加到累加器"a"中。在第16行以后,差分方程就已经完全计算出来,并且滤波以后的输出样本就在累加器"a"中。这个状态可以被描述为
  在第15行以后a=x0y0=x(m)h(O)+x(n-1)h(1)+x(n-2)h(2)+x(n-3)h(3)+x(n-4)h(4)
  x内存
  y内存
  h(1)
  →
  在获取下一个输入采样点以后,就执行同样的过程,产生输出采样点。地址寄存
  器"r0"和"r5"已经进行了折回,从而指向所需的数据和滤波器系数。各寄存器被设置成按模寻址,所用的模为5(因为有5个滤波器抽头)。这些寄存器没有继续指向更高的内存而是以一种循环的方式在递增或递减中进行折回,不断重复这一过程。
  虽然这段代码能计算差分方程,但DSP架构并没有被得到最优化的使用。这个滤波器经过重写以后可以获得高得多的执行效率。存储在和"y"内存中的数值可以在执行一条
  时被同时访问。当这些数值相乘并累加时,下一个数据值和滤波器系数可以在下一次算之前同时被加载进来。此外,硬件循环计数器可以允许重复进行这一操作,简化了更长的差分方程的实现。实现同样滤波器所需的操作可以用更少的指令以及更短的执行时间来实现如下所示。使用并行操作和循环的FR滤波器代码为初始化累加器a
  零
  入x内存,r0加
  从y内存中读
  2
  rep#4
  下一条指令重复执行4
  a=a+x(n-D)h(D):D=0,1从x内存中读取
  从内存中读取hO+1),r5加
  =a+x(n4h(4),舍入到24bit
  并行移动和循环实现显然是更为紧凑的。描述每一行代码所需的注释数量指示出每行程的能力
  这段代码是令人混乱的,因为它把很多东西都合并在一起。随着程序员变得越来越有经验,并行移动也变得越来越常见。很多程序员把DSP56X×代码看成是有