gpt4 book ai didi

c - C中的定点数字振铃滤波器

转载 作者:太空宇宙 更新时间:2023-11-04 04:04:16 25 4
gpt4 key购买 nike

我正在尝试在 AVR 微 Controller 上编写数字振铃滤波器,但在定点算法中实现状态图时遇到了一些问题。这是我尝试为其编写代码的信号流的图片:enter image description here

编辑:(我相信上面 T_c 的等式应该是 e^[-1/(F_s*D)] )

这是我目前所拥有的。我有一个名为 smultfix 的例程,它对两个 8 位有符号整数进行定点有符号乘法运算,并返回一个 16 位有符号乘积。 F_c 和 T_c 是 8 位有符号二进制小数。 “输出”和 T_c 输入与延迟元件 z1 连接处的中间步骤被视为 16 位二进制小数。所以我有:

(假设 F_c 和 T_c 在别处定义)

int8_t generateSample()
{
static int16_t z1 = 0x7FFF; //initialize first delay element to max positive value
static int16_t output;
int8_t byteOutput = 0;
int8_t bytez1 = 0;

bytez1 = (z1 & 0xFF00)>>8; //make z1 into an eight bit signed binary fraction for
//multiplication

output = (smultfix(bytez1,F_c)<<1) + output; //calculate output, shift product
//left once to
//remove double sign bit

byteOutput = (output & 0xFF00)>>8; //generate output byte

z1 = (-(smultfix(byteOutput,F_c)<<1)) - \
(smultfix(bytez1,T_c)<<1) //generate intermediate
//product z1
return byteOutput;
}

不幸的是,我似乎刚刚创建了一个糟糕的随机数生成器,因为这段代码会生成大量垃圾填满我的输出缓冲区!如果有人能指出我可能出错的地方,或者如果他们有更好的实现想法,我们将不胜感激。

最佳答案

代码实际上是正确的 - 但 T_c 方程的符号确实应该是而不是负数。它在本书的第一版中显示为负数,这张图片似乎取自本书的第二版,其中方程式得到了修正。如果 T_c 以负指数计算,振荡将增加,但如果为正,振荡将减少,这正是我们想要的。将 T_c 设置为负数并翻转倒数第二行的减法符号也可以。

关于c - C中的定点数字振铃滤波器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8046922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com