
信号処理素人老人がScilabの「信号処理のデモ」脱出。前回から「最適化とシミュレーション」の部に入り、前回は非線形のフィッティング、フィットさせたのはパラボラ(2次関数)でした。今回は「傾斜付きガウス曲線」へのフィッティングです。ベルカーブが斜めに傾斜しているのよ。重みもつけて計算しているみたい。
※「手習ひデジタル信号処理」投稿順 Indexはこちら
※Windows11上の Scilab2024.0.0を使用させていただいております。(Scilabについては御本家 Scilab 様へ)
今回「鑑賞」させていただくScilabのデモ
今回は以下のデモ選択画面から起動できるデモ Sloping gaussian model(5 params) です。
前回同様、datafit: Nonlinear fittingの中のデモなので非線形モデルへのデータフィッティングをデモしてくれるもの。今回の非線形モデルは、ぶっちゃけ、
ガウス関数(ベルカーブ)+1次関数(右肩あがり)
です。皆さんお馴染みのガウス関数の曲線に余計な項が2つばかり足し合わされているので、「うねっとひとやま」の後が右肩上がりです。モデルのパラメータは5つです。例によってGoogleの生成AI、Gemini 2.5 Flash様にモデルについてご説明いただいたものが以下に。
ぱっと見、メンドクセー感じがするけれど、説明みれば納得、なんだ簡単じゃん。 大丈夫か?
デモのスクリプトは、以下のファイルです。
slopingGaussian.dem.sce
大筋は前回同様のデモです。まず「正解」の真のパラメータを用意してそれを使って「傾斜付きガウス曲線」の「真」のやつを設定しておきます。それに「テキトーなノイズ」を載せて「測定データ」としてます。そして前回も御出馬いただいた、非線形最小二乗法むけの datafit 関数にお願いして「測定データ」からパラメータを推定してもらってます。前回より、一歩踏み出しているところあり、以下の「2」です。
-
- 前回同様の重みなどない非加重フィッティング曲線
- ノイズが小さいと予測される点に重みを与える、加重フィッティング曲線
ただね、ここで使っているノイズは測定データ生成のときにつかった「テキトーなノイズ」です。なんだカンニングじゃん。まあ、重み与えるときはこんな感じで重みが与えられるからね、という例ということなのか。知らんけど。
シミュレーション結果
デモを実行すると一撃で以下のグラフが求まります。グラフに素人老人のコメントを書き加えたものが以下に。
前回と異なり、ちゃんと推定したパラメータ(5個)をグラフの下部に表示してくれてます。
一番上の行が「真値」を作ったときにつかった「正解」のパラメータです。その下の行が、前回同様の「重みなし」のフィッティング、一番下が「重みあり(重みはカンニングだけれども)」な加重フィッティングです。
まあ、非加重よりも加重の方が良さげではあるけれど、素人老人にはその差は微妙に見えます。姑息なカンニングしてこれかい?