我希望实现两种版本的算法,该算法在软件中执行有限脉冲响应,一种算法采用浮点格式,另一种算法采用定点格式。现在我认为如果我只使用函数浮点变量,那么算法将使用浮点数完成:
算法应该按照规范
运行在新样本x * k *到达之前,旧样本将转移到 右边然后每个样本用一个系数进行缩放 结果y * k *,计算所有缩放样本的总和
float[] FIRfloats = {0,0,0,0,0};
void floatFIR(float newsample)
{
for(int i=0;i<5;i++)
{
FIRfloats[i+1]=FIRfloats[i]; /* shift the samples right */
}
FIRfloats[0]=newsample*0:0299;
FIRfloats[1]=FIRfloats[2]*0.4701;
FIRfloats[2]=FIRfloats[3]*0.4701;
FIRfloats[3]=FIRfloats[4]*0.0299;
}
然后我只是对样本求和以获得浮点格式?那么这会是FIR滤波器的软件实现吗?我该怎么做定点版本?
答案 0 :(得分:1)
不,您没有将样本保存在FIRfloats中,而是保存样本乘以系数。只需将样本保存在数组中即可。使用系数计算产品并将其保存在临时变量中,然后对产品求和以获得过滤器输出值。
将其转换为定点,并且做得好,超出了此处可以包含的范围。基本上,您需要将所有系数乘以某个比例因子,比如2 ^ 16(65536),并舍入到最接近的整数。传入的样本也应乘以比例因子并转换为整数。对样本和系数执行整数乘法,然后对乘积进行整数相加。结果将具有比例因子,该比例因子是系数的比例因子和输入样本的乘积。在不知道你将如何处理过滤器输出的情况下,很难说在那之后会发生什么。
但是你在提问中提到了Altera DE2。如果这是打算在FPGA中实现的话,你不应该使用Verilog或VHDL吗?