我正在尝试在代码(C)中创建一个数字滤波器,但任何语言都可以。现在我有一个模拟滤波器,我用拉普拉斯域中的一个方程表示,我想尝试以数字方式实现它。
所以我的过滤器在拉普拉斯域中有这种形式:
然后我使用 MATLAB 的c2d命令,该命令使用零阶保持转换(我对此的掌握非常差,所以这可能是错误的),它给了我这个公式:
我尝试遵循一个我发现使用 Tustin 方法的示例c2d,但是当我在 MATLAB 中使用 Tustin 中的函数时,它给了我一个错误。
我的尝试是
然后我尝试过(这是错误的)
我正在尝试在代码(C)中创建一个数字滤波器,但任何语言都可以。现在我有一个模拟滤波器,我用拉普拉斯域中的一个方程表示,我想尝试以数字方式实现它。
所以我的过滤器在拉普拉斯域中有这种形式:
然后我使用 MATLAB 的c2d命令,该命令使用零阶保持转换(我对此的掌握非常差,所以这可能是错误的),它给了我这个公式:
我尝试遵循一个我发现使用 Tustin 方法的示例c2d,但是当我在 MATLAB 中使用 Tustin 中的函数时,它给了我一个错误。
我的尝试是
然后我尝试过(这是错误的)
我查看的示例使用了 tustin 或双线性转换,而不是零阶保持(matlabs“c2d”命令的默认值)。因此,这更像是对我想做的事情的回答,而不是我上面提出的问题。
我通过采用 s 域函数解决了以下问题(将 s 域函数转换为代码)。
并将其放入matlab(matlab命令“g = tf([ab],[cd 0])”)。然后使用 matlab 命令“c2d(g,Ts,'tustin')”执行双线性转换,其中 g 是我的传递函数,Ts 是我的采样率。这产生了输出
然后可以从这个方程中得到 a 和 b 系数,这样(如果该等式需要乘以“i”的倒数):
然后可以通过为简单起见设置初始状态将其转换为代码
然后设置一个循环,重复以下算法
对于像我一样迷路的其他人,这被称为 IIR 滤波器,谷歌搜索 IIR 滤波器设计帮助很大。