标签:汽车音响功放,音响功放电路,http://www.5idzw.com
采用MAXQ2000进行音频滤波,http://www.5idzw.com
摘要:集成了乘累加单元(MAC)和单周期内核的MAXQ2000非常适合用作通用微控制器(µC) 。MAXQ2000所具有的性能和I/O外设适合多种应用:如闹钟、手持医疗设备、数字读取器等需要低功耗、高性能和大量I/O的应用。集成MAC的MAXQ2000已可以进入DSP (µC)的应用领域。
本应用笔记要求的硬件包括MAXQ2000评估板和实现与计算机扬声器接口的简单电路。
现已提供的MAXQ2000评估板是了解MAXQ2000性能的最佳工具,它包括一块LCD面板、一组LED。可通过评估板访问MAXQ2000的所有I/O引脚。评估板集成的MAX1407 ADC/DAC可用于音频输出。
所需的第二部分硬件可由电路实验板方便实现。演示使用的电路如图1所示。它使用一个1 x 8的孔插座在J7处连接MAXQ2000评估板,需要和任意地电位相连(可选择MAXQ2000评估板上的TP1)。扬声器连接器可以是任意类型,图中所示为一个3.5mm立体声插孔,可方便实现与常用计算机扬声器连接。注意两输入通道并联,因为我们的演示仅使用一个音频通道(单声道)。
图1. 音频回放所需的其它硬件
该演示所需的软件采用IAR嵌入式平台创建并调试。该平台提供一个良好的调试环境,使用了MAXQ2000的硬件调试支持。可设置断点,设置或读取寄存器和存储器,在真实硬件环境中运行时可查看堆栈调用。
图2. 使用零极点图来生成一个简单的FIR滤波器
普通滤波器的线性方程为:
y(n) + bKy(k) = aJx(j)
其中k表示滤波器反馈部分的阶数,j表示滤波器前馈部分的阶数。
一个IIR滤波器可由下式简单表示:
y(n) = 0.5y(n-1) + x(n) - 0.8x(n-1)
一些滤波器被归类为FIR滤波器,不包括反馈部分。换句话说,在滤波器特征方程中不包括y部分:
y(n) = aJx(j)
y(n) = x(n) - 0.2x(n - 1) + 0.035x(n - 3)
任何情况下滤波器都可归结为一个特征方程,本质上是过去的输入和输出的加权平均。滤波器设计即生成Aj和Bk值。为高效计算滤波器输出,需要能快速乘和加有符号数硬件的支持,这就是MAXQ2000的乘-累加单元。
这种解决方法是精度和速度的折衷。在许多情况下,该方法产生的误差可忽略。出于诊断目的,小应用程序可显示所计算滤波器的三条曲线。第一条曲线采用64位浮点数显示理想滤波器的运行状态。该曲线在图2中以“Ideal Transform”标示。
图3画出了由小应用程序产生的其余曲线。其中第一条曲线显示采用16位定点数的滤波效果。在许多情况下,误差并不明显。最后一条曲线为误差指示,显示的是理想频响除以实际频响。理想情况下,这是一条Y = 1的直线。
图3. 16位滤波器实际效果和舍入误差(视觉上没有误差)
简单起见,小应用程序产生MAXQ®滤波器所需的浮点参数,因此,新滤波器可简单通过将其剪切并粘贴到滤波器源文件(data.asm文件)中实现。小应用程序还产生另外两个值,即滤波器阶数(参数个数)和移位数,应用程序可适当移位最终结果。数据出现在小应用程序底部文本框中,可能会以以下方式呈现:
MAX1407含有一个12位ADC。而输入数据为16位宽度,滤波器产生16位结果。尽管4个最低有效位(LSB)在本应用中没有用到,但仍可按16位计算和输出正常分析其性能(CD质量的音频为16位)。
本例中,滤波器参数存储在代码区的表中。选择一个滤波器后,应用程序找到合适的滤波器,读取移位数及抽头数,然后准备开始数字滤波。以下代码应用了滤波器参数:
由于MAC以单周期工作,处理代码较少。MCNT置为22h代表采用有符号整数。在主循环中,连续写入MA,然后写MB触发乘-累加运算,结果在下一个时钟周期准备就绪。由于累加器为48位(乘的结果为32位),因此不会产生溢出(除非滤波器中有64,000个抽头!)。 ,采用MAXQ2000进行音频滤波
摘要:集成了乘累加单元(MAC)和单周期内核的MAXQ2000非常适合用作通用微控制器(µC) 。MAXQ2000所具有的性能和I/O外设适合多种应用:如闹钟、手持医疗设备、数字读取器等需要低功耗、高性能和大量I/O的应用。集成MAC的MAXQ2000已可以进入DSP (µC)的应用领域。
MAXQ2000的MAC能够发挥多大的性能?本应用笔记以一个音频滤波器为例来解释此问题,并定量给出MAXQ2000支持的性能。
软件和硬件要求
本应用笔记简单演示一个音频滤波器。音频数据事先录制,是由作者朗读的 "The pipe began to rust while new"。这并不是随机选择的,它含有适当的频率组合,可以检验滤波器的效果(http://cs.columbia.edu/~hgs/audio/harvard.html )。该音频录音可以用任意合适长度的8kHz录音替代,但并不必要。本应用笔记要求的硬件包括MAXQ2000评估板和实现与计算机扬声器接口的简单电路。
现已提供的MAXQ2000评估板是了解MAXQ2000性能的最佳工具,它包括一块LCD面板、一组LED。可通过评估板访问MAXQ2000的所有I/O引脚。评估板集成的MAX1407 ADC/DAC可用于音频输出。
所需的第二部分硬件可由电路实验板方便实现。演示使用的电路如图1所示。它使用一个1 x 8的孔插座在J7处连接MAXQ2000评估板,需要和任意地电位相连(可选择MAXQ2000评估板上的TP1)。扬声器连接器可以是任意类型,图中所示为一个3.5mm立体声插孔,可方便实现与常用计算机扬声器连接。注意两输入通道并联,因为我们的演示仅使用一个音频通道(单声道)。
图1. 音频回放所需的其它硬件
该演示所需的软件采用IAR嵌入式平台创建并调试。该平台提供一个良好的调试环境,使用了MAXQ2000的硬件调试支持。可设置断点,设置或读取寄存器和存储器,在真实硬件环境中运行时可查看堆栈调用。
运行演示
MAXQ2000评估板上的按键用于选择滤波器,并播放经过滤波的音频采样。使用按键SW4选择滤波器,滤波器名称将显示在LCD上(HI为高通、LO为低通、BP为带通,ALL为全通)。使用按键SW5播放通过所选滤波器的音频。可在播放期间切换滤波器。设计一个简单的FIR滤波器
本文使用一个Java™小应用程序来方便的产生新的滤波器。没有采用标准加窗技术给出滤波器参数,而是如图2所示,在零极点图上放置零点来简单“设计”滤波器。小应用程序可在坐标平面任意位置放置零点,自动更新演示所需FIR滤波器的参数。注意,演示仅支持全零点滤波器。支持IIR滤波器并不困难,在支持IIR滤波器一节中有详细解释。图2. 使用零极点图来生成一个简单的FIR滤波器
普通滤波器的线性方程为:
y(n) + bKy(k) = aJx(j)
其中k表示滤波器反馈部分的阶数,j表示滤波器前馈部分的阶数。
一个IIR滤波器可由下式简单表示:
y(n) = 0.5y(n-1) + x(n) - 0.8x(n-1)
一些滤波器被归类为FIR滤波器,不包括反馈部分。换句话说,在滤波器特征方程中不包括y部分:
y(n) = aJx(j)
y(n) = x(n) - 0.2x(n - 1) + 0.035x(n - 3)
任何情况下滤波器都可归结为一个特征方程,本质上是过去的输入和输出的加权平均。滤波器设计即生成Aj和Bk值。为高效计算滤波器输出,需要能快速乘和加有符号数硬件的支持,这就是MAXQ2000的乘-累加单元。
使用乘-累加(MAC)单元实现一个滤波器
上一节中的小应用程序可通过在图中指定零点坐标计算滤波器参数。但计算结果为浮点数,而MAC为纯16位整数运算。为解决这一问题,本演示采用了一个定点数值系统,参数的0至15位为小数点右侧的数值(第16位代表符号极性)。运算完成后,MAC累加器中的48位结果通过移位去掉剩余部分。这种解决方法是精度和速度的折衷。在许多情况下,该方法产生的误差可忽略。出于诊断目的,小应用程序可显示所计算滤波器的三条曲线。第一条曲线采用64位浮点数显示理想滤波器的运行状态。该曲线在图2中以“Ideal Transform”标示。
图3画出了由小应用程序产生的其余曲线。其中第一条曲线显示采用16位定点数的滤波效果。在许多情况下,误差并不明显。最后一条曲线为误差指示,显示的是理想频响除以实际频响。理想情况下,这是一条Y = 1的直线。
图3. 16位滤波器实际效果和舍入误差(视觉上没有误差)
简单起见,小应用程序产生MAXQ®滤波器所需的浮点参数,因此,新滤波器可简单通过将其剪切并粘贴到滤波器源文件(data.asm文件)中实现。小应用程序还产生另外两个值,即滤波器阶数(参数个数)和移位数,应用程序可适当移位最终结果。数据出现在小应用程序底部文本框中,可能会以以下方式呈现:
Zeroes: dc16 dc16 12, 11, 0x1000, 0x26d3, 0x1e42, 0xf9a3, 0xecde, 0xff31, 0xa94, 0x2ae, 0xfd0c, 0xff42, 0xde Shift amount: 12
用MAXQ汇编语言实现滤波器
为得到最佳性能,并进行准确的性能分析,实际滤波器采用汇编语言实现,这样可精确计算产生一个输出所需的循环次数,并由此估算其它数据设置的性能。MAX1407含有一个12位ADC。而输入数据为16位宽度,滤波器产生16位结果。尽管4个最低有效位(LSB)在本应用中没有用到,但仍可按16位计算和输出正常分析其性能(CD质量的音频为16位)。
本例中,滤波器参数存储在代码区的表中。选择一个滤波器后,应用程序找到合适的滤波器,读取移位数及抽头数,然后准备开始数字滤波。以下代码应用了滤波器参数:
move MCNT, #22h ; signed, mult-accum, clear regs first zeroes_filterloop: move A[0], DP[0] ; let's see if we are out of data cmp #W:rawaudiodata ; compare to the start of the audio data lcall UROM_MOVEDP1INC ; get next filter coefficient move MA, GR ; multiply filter coefficient... lcall UROM_MOVEDP0DEC ; get next filter data move MB, GR ; multiply audio sample... jump e, zeroes_outofdata ; stop if at the start of the audio data djnz LC[0], zeroes_filterloop zeroes_outofdata: move A[2], MC2 ; get MAC result HIGH move A[1], MC1 ; get MAC result MID move A[0], MC0 ; get MAC result LOW执行该代码前,LC[0]装入滤波器抽头数,DP[0]装入滤波器当前输入字节地址,DP[1]装入滤波器参数起始地址。DP[1]以递增方式处理滤波器参数,DP[0]以递减方式处理输入数据(最近输入的数据首先处理)。
由于MAC以单周期工作,处理代码较少。MCNT置为22h代表采用有符号整数。在主循环中,连续写入MA,然后写MB触发乘-累加运算,结果在下一个时钟周期准备就绪。由于累加器为48位(乘的结果为32位),因此不会产生溢出(除非滤波器中有64,000个抽头!)。 ,采用MAXQ2000进行音频滤波