2016-08-10 15 views
0

resample()関数を使用して、Qダウンサンプリング係数の可変引数をSimulinkで取得する必要があります。基本的にこのコードを含むSimulinkのfcnブロック:MATLABへの入力が機能を解釈して、デスクトップシミュレーションでコード生成でresample()関数。可変Qダウンサンプリング係数を使用する方法はありますか?

function y = resample(data,Q) 
y=resample(data,1000,Q); 

私は、変数Qは、それを指定することにより、引数として仕事を得ることができますが、私はCコードを生成する必要があるため、私の唯一のオプションはfcnブロックを使用することですが、明らかに上記の制限のためにコンパイルされません。

error: the downsample factor Q must be constant

私は、これはリサンプル関数のdocumented limitationであることを理解:

resample: The upsampling and downsampling factors must be specified as constants. Expressions or variables are allowed if their values do not change.

これに対処するための任意の回避策または異なるアプローチ?おそらく、同じ仕事をすることができる他のブロックですか? ofcはSimulinkコーダーと互換性がなければなりません。

ありがとうございます!

答えて

1

リサンプル関数は、フィルタを設計し、サンプルファクタに基づいて出力サイズを決定する必要があります。コード生成後、これは変更できません。そのため、この関数はサンプリング係数を一定にする必要があります。

しかし、サポートする必要がある異なるダウンサンプリング係数値が制限されている場合は、条件分岐を使用して、各ブランチで一定値で再サンプリングを呼び出すことができます。例えば、

% Declare out as a var-size with max decided by the minimum downsampling factor 
% Assuming data is [1000, 1] 
coder.varsize('out', [500 1]); 
out = zeros(500,1); 
if Q == 2 
    out = resample(data,1000,2); 
elseif Q == 4 
    out = resample(data,1000,4); 
elseif ... 
... 
end 

また、これはMATLAB Functionブロックからの出力変数がある場合は、MATLABコードとSimulinkモデルの残りの部分では、可変サイズデータ「アウト」に対処する必要があります。

+0

説明をいただきありがとうございます。値が広い範囲(数百以上)を持っているため、条件付き分岐は醜くなります。私は今、downsample()とupsample()が同じものになるかどうかを調べようとしています。 –

関連する問題