Borrar filtros
Borrar filtros

simulink にmedfilt1 を搭載したい

1 visualización (últimos 30 días)
裕利 中尾
裕利 中尾 el 6 de Oct. de 2023
Comentada: 裕利 中尾 el 11 de Oct. de 2023
Medfilt1 をSimulink に搭載すべく,Matlab function block にcode を作成したが、
例題と同じ波形を得ることができなかった。
(次数は変数"od"で入力

Respuesta aceptada

Atsushi Ueno
Atsushi Ueno el 7 de Oct. de 2023
Editada: Atsushi Ueno el 10 de Oct. de 2023
Simulinkが毎周期の信号を処理するにあたって、そのままでは前後(過去/未来)の信号を取り扱う事が出来ません。Delayブロックの類を使って、過去の信号値をストックしておき、過去数周期分のベクトル信号としてMedfilt1 処理に入力する必要があります。Tapped Delay ブロックを使いましたが、jc_0624: Tapped Delay ブロック/Delay ブロックの使用方法にある様な Unit Delayブロックを多数使った方法でも構いません。もしくは、MATLAB Function ブロックの内部で過去の信号をストックする方法でも良いです。
function y = fcn(u,od)
flt = medfilt1(u,od); % ここで入力信号uは1*10のベクトル信号である事を想定
y = flt(floor(od/2)+1); % 出力も1*10なので、真ん中の値(スカラ値)を出力する
end % 誤記修正↑【誤】fllor(od/2) ⇒【正】floor(od/2)+1
  4 comentarios
Atsushi Ueno
Atsushi Ueno el 10 de Oct. de 2023
> という診断メッセージが出ますが、事前に定義されていますか?
⇒ NO: 未定義です。"fllor" は "floor" の誤記でした。
> コメントの”真ん中の値”が配列の平均値を意味していますか?
⇒ NO: ”真ん中の値”ではありますが、配列の中央値です。
中央値は、データを小さい順に並べたときにちょうど真ん中に来る値のことです。
> "floor"でしょうか?
⇒YES!! 正解です。誤記の他、計算式にも誤りがありました。
>「odが奇数のとき、配列順の小さい方を選べ」ですか?
⇒YES!! 正解ですが、その後1加算する必要がありました
「真ん中の値」は「次数が奇数の場合は (N+1)/2 番目の値)、次数が偶数の場合は (N/2)+1 番目の値でした。例えば、N=3 なら 2 番目、N=4 なら 3 番目、N=7 なら 4 番目、N=10 なら 6 番目です。私は次数が偶数の場合 (N/2) 番目になると思い込んでいた為 fllor(od/2) と書きましたが正しくは floor(od/2)+1 です。
  • 次数 n が奇数の場合、y(k) x(k-(n-1)/2:k+(n-1)/2) の中央値。
  • 次数 n が偶数の場合、y(k) x(k-n/2:k+(n/2)-1) の中央値。この場合、関数は数値を並べ替え、並べ替えたリストの中央の 2 つの要素の平均を取ります。
裕利 中尾
裕利 中尾 el 11 de Oct. de 2023
ありがとうございました。

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre シングルレート フィルター en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2023a

Community Treasure Hunt

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

Start Hunting!