0

我应该实现在软件中执行有限脉冲响应的算法的两个版本,一个是浮点格式的算法,另一个是定点格式的算法。现在我认为如果我只对函数使用浮点变量,那么算法将使用浮点完成:

该算法应根据规范工作

在新样本 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 滤波器的软件实现吗?以及如何做定点版本?

4

1 回答 1

1

不,您没有将样本保存在 FIRfloats 中,而是保存了乘以系数的样本。只需将样本保存在您的阵列中。用系数计算乘积并将它们保存在临时变量中,然后对乘积求和以获得滤波器输出值。

将其转换为定点并且做得好,超出了此处可以包含的范围。基本上,您需要将所有系数乘以某个比例因子,例如 2^16 (65536),然后四舍五入到最接近的整数。传入的样本也应该乘以比例因子并转换为整数。对样本和系数执行整数乘法,然后对乘积进行整数加法。结果将具有一个比例因子,它是系数的比例因子和输入样本的乘积。在不知道您将对过滤器输出做什么的情况下,很难说之后会发生什么。

但是您在问题中提到了 Altera DE2。如果这是为了在 FPGA 中实现,您不应该使用 Verilog 或 VHDL 吗?

于 2013-09-25T10:57:51.717 回答