Matlab编码器和filtfilt()

时间:2012-02-25 18:10:27

标签: matlab signal-processing matlab-deployment

我正在尝试使用带有matlab编码器的filtfilt命令,但我遇到了麻烦。

如果我以正常的方式运行程序一切运行正常,但是当我尝试构建c代码时,会显示以下错误消息:“数据的长度必须超过滤波器顺序的3倍” 。 我在某处读到这可能是因为filtfilt函数需要知道整个信号(随着时间的推移),这可能与matlab编码器不兼容。然而,这似乎是不正确的,因为matlab将filtfilt列为代码生成的支持函数 - http://www.mathworks.se/help/toolbox/signal/ug/br7exek-1.html

我的电话是:

y_filt = filtfilt(B,A,Y);

我在调用之前的变量具有以下属性:

名称大小..........字节......类

a ...... 1x9 ........... 72 ...........双   b ...... 1x9 ........... 72 ...........双   是...... 1499400x1 11995200双

是否有人建议如何解决此问题?

2 个答案:

答案 0 :(得分:1)

我理解你的沮丧。我认为问题是由于为了使用filtfilt而预先分配了大量数据。当我尝试类似的操作时,我的机器(被认为是服务器类)耗尽了内存。我建议查看您的要求,并确保filtfilt是唯一能满足它们的功能。我意识到filtfilt的零相位属性非常适合在Matlab Coder中进行分配,但是内存要求可能会给你带来更多麻烦。如果您想讨论其他替代方案,请与我们联系。谢谢!

答案 1 :(得分:0)

你在这里使用Buuterwroth-Filter。这是一个IIR滤波器。要求的过滤器订单可能远高于过滤器标签的数量。信号长度应为滤波器的三倍,而不是滤波器长度!

此致 Tchekov