coder.excentric not working when compiling with TwinCat Target

1 回表示 (過去 30 日間)
Dries billiet
Dries billiet 2014 年 3 月 11 日
コメント済み: Dries billiet 2014 年 3 月 20 日
Hello,
I am working on a case where I put simulink generated code into an embedded PC. My model works fine in simulink, but when I try to generate the code for my embedded controller, it fails. The fault message is the following.
_Failed to eliminate a call to the MATLAB function 'butter'. For non-simulation builds, calls to unsupported MATLAB functions are eliminated if they do not affect function out puts. Function 'filter1/MATLAB Function' (#34.92.133), line 6, column 1: "[a,b] = butter(w,[x y]/(z/2), 'bandpass')"
I found out that the actual problem is that coder.extrinsic('butter') is not allowed by external compilers. But I really need a way to create a butterworth filter in a matlab function block.Because my system needs a filter with adaptable bandwith. Is there somebody who knows a possible workaround?
function [a,b] = fcn(w,x,y,z)
a=zeros(1,(11));
b=zeros(1,(11));
coder.extrinsic('butter');
[a,b] = butter(w,[x y]/(z/2), 'bandpass');

採用された回答

Tom Bryan
Tom Bryan 2014 年 3 月 17 日
If you leave out the coder.extrinsic('butter') command, then it will generate code for the embedded processor. But, in that case, the butter() command requires constant inputs.
It is possible to create a table of constant coefficient values that you can index into as a function of discrete w, x, y, z values. Would that be a workable option for you?
  2 件のコメント
Dries billiet
Dries billiet 2014 年 3 月 17 日
Nice idea! I'll try to work this one out!
Dries billiet
Dries billiet 2014 年 3 月 20 日
This does non't work. Because the coeficients are non constants. But it brougt me on the idea of adding a 'database' (read: big array) with the calculated transfert functions already in the array.

サインインしてコメントする。

その他の回答 (1 件)

Kaustubha Govind
Kaustubha Govind 2014 年 3 月 13 日
You can either implement the functionality yourself in C, or find a third-party library that does so, and call it in your MATLAB code using coder.ceval.
  1 件のコメント
Ketan
Ketan 2014 年 3 月 15 日
Here are few other options:
- Implement the desired filter coefficient calculation yourself in MATLAB and call this code in your function block
- Try to leverage some of the more advanced filter functionality in DSP system toolbox:

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeDSP Algorithm Acceleration についてさらに検索

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by