基于FPGA的音频处理芯片的设计
y(n)=2-1(...2-1(2-1(2-1u1+u2)+u3)+...)+u16)
uj=xj(1)+ xj(2)+……+ xj(rj)
其中1≤j≤16, xj(i)∈{x(n-k)}, 1≤i≤rj
由前面的系数,可以得到:
U1 = x(n-6)-x(n-7); U2 = -x(n)+x(n-5);
U3 = -x(n-3)-x(n-7); U4 = x(n)+x(n-4);
U5 = -x(n-1)-x(n-6); U6 = -x(n-2);
U7 = x(n)+x(n-5); U8 = x(n-3)-x(n-4)+x(n-7);
U5 = -x(n-1)-x(n-6); U10 = 0;
U11 = x(n-5); U12 = x(n-2)-x(n-4);
U13 = x(n-1)+x(n-3); U14 = -x(n)-x(n-2);
U15 = x(n-1); U16 = x(n);
按照这个算法,先求U1的值,然后将结果右移一位,再将结果与U2的值相加,依此类推,即可得到y(n)。我们使用若干次加法和16次移位操作即可完成FIR滤波,算法的复杂度和功耗都大大地降低。
3 音频处理芯片的设计
3.1 结构概述
在整个音频处理芯片的结构中,我们没有采用任何乘法器,取而代之的是一个加法器和移位器。加法器的结果输出到移位器,移位器的输出再反馈到加法器的输入端,循环运算实现滤波器的功能。
考虑7阶的FIR滤波器,需要对x进行8次采样,所以输入的数据都应该保存在一个8*16的DataRAM之中(16bit的采样精度)。系数RAM(ProgramRAM)的大小取决于操作的个数,在上面提到的算法中,一共有28个操作,所以ProgramRAM的大小不能小于28,在这里我们使用了一个32*6的ProgramRAM,以满足算法需要。
考虑到音频处理芯片的可扩展性,我们在音频处理芯片外设置一个EEPROM用来存放系数,当芯片启动的时候,从EEPROM中将数据转存到ProgramRAM中,以适应不同FIR滤波器的系数,极大地增强了音频处理芯片的可编程性。
音频处理芯片的模块主要包括EEPROM, ProgramRAM, DataRAM,串并转换模块,并串转换模块,地址生成模块,主控制器模块。
3.2 寻址方式描述
在系统启动时,附加的EEPROM储存的系统参数值,包括输入信号在DataRAM中的地址值和相应的标志位(32*6bit) ,依次读入ProgramRAM中去。
评论