現在、リアルタイム信号処理用に非常に荒く機能する循環バッファを設計しようとしています。わかりやすくするために、私はDSP Toolboxライセンスを持っていません。SimulinkのサーキュラバッファがMATLAB関数として実装されました
ここで考えられるのは、1xNウィンドウ内の信号の一部をバッファし、さらに後処理することです。これを実現するために、私は次の図のようにSimulinkブロックを考えていました。
問題は以下の通りです:MATLAB関数は
function y = fcn(Signal,DelayedBuffer,BufferSize)
%#codegen
% y = zeros(1,BufferSize);
persistent Buffer;
Buffer = [Signal DelayedBuffer(1:59-1)];
y = Buffer;
end
すべてがうまくうまくている場合。
function y = fcn(Signal,DelayedBuffer,BufferSize)
%#codegen
% y = zeros(1,BufferSize);
persistent Buffer;
Buffer = [Signal DelayedBuffer(1:BufferSize-1)];
y = Buffer;
end
としての機能を記述するとき はしかし、私は次のエラーが表示されます
Data 'y' (#32) is inferred as a variable size matrix, while its specified type is something else.
あなたは、このエラーを抑止する方法上の任意の貴重なヒントを持っていますか?
さて、バッファのサイズはシミュレーションの長さに亘って一定ですが、ユーザーがバッファのサイズを調整できるようにして、どのサイズが最適な結果を取得するのかを確認したいと思います。私はパラメータとして 'BufferSize'を割り当てようとしましたが、ポートが関数にもう接続されていないので、関数に渡す方法を明確に理解していません。 – fpe
入力をパラメータとして入力すると、モデルワークスペースまたはMATLABベースワークスペースで同じ名前を使用して入力を定義できます。あなたは単にBufferSize = 59を行うことができます。コマンドラインで1つのシミュレーション内で変更する必要がないため、この調整可能にしないでください。シミュレーション間で変更することができます。 – Navan