非常に基本的な用語で平滑化とは何ですか


17

スムージングとは何ですか?

Matlabには音声信号の振幅スペクトル(FFTの128ポイントの振幅)である配列があります。移動平均を使用してこれをどのように滑らかにしますか?私が理解したことから、特定の数の要素のウィンドウサイズを取り、平均を取る必要があり、これが新しい最初の要素になります。次に、ウィンドウを1つの要素だけ右に移動し、2番目の要素になる平均値を取得します。それは本当にそれがどのように機能するのですか?私がそれを行うと、最終結果では128要素未満になるので、自分自身はわかりません。それでは、どのように機能し、データポイントを滑らかにするのにどのように役立ちますか?または、データの平滑化を行うことができる他の方法はありますか?

編集:フォローアップの質問へのリンク


単一のスペクトルの周波数軸に沿った移動平均ではなく、おそらく(時間次元で)複数のスペクトルを一緒に平均化したいスペクトルがあります
Endolith

@endolithはどちらも有効なテクニックです。周波数領域での平均化(ダニエルピリオドグラムと呼ばれることもあります)は、時間領域でのウィンドウ化と同じです。複数のピリオドグラムの平均化(「スペクトル」)は、真のピリオドグラム(これはウェルチピリオドグラムと呼ばれる)に必要なアンサンブル平均化を模倣する試みです。また、セマンティクスの問題として、「スムージング」は非因果的なローパスフィルタリングであると主張します。カルマンフィルタリングvsカルマンスムージング、ウィナーフィルタリングvウィナースムージングなどを参照してください。重要な違いがあり、実装に依存します。
ブライアン

回答:


23

スムージングは​​さまざまな方法で実行できますが、非常に基本的かつ一般的な用語では、要素を隣接要素と混合することにより、信号を均一化することを意味します。ノイズを取り除くために、信号を少しスミア/ブラーします。たとえば、非常に単純な平滑化手法では、すべての信号要素f(t)を元の値の0.8に加えて、各隣接要素の0.1 に再計算します。

f'(t) = 0.1*f(t-1) + 0.8*f(t) + 0.1*f(t+1)

乗算係数または重みの合計が1になることに注意してください。そのため、信号がほぼ一定である場合、スムージングを行ってもそれほど変化しません。しかし、信号に突然のぎくしゃくした変化が含まれていた場合、その近傍からの寄与が、そのノイズを少し消すのに役立ちます。

この再計算関数で使用する重みは、カーネルと呼ばれます。1次元のガウス関数または他の基本的なカーネルは、あなたのケースで行う必要があります。

特定の種類の平滑化の良い例:

上:
平滑化されていない信号下:平滑化された信号

ここに画像の説明を入力してください

いくつかのカーネルの例:

ここに画像の説明を入力してください


これは加重移動平均ですか?これは、ウィンドウサイズが3と呼ばれていますか?最初と最後の要素はどうですか?そして、128要素の配列があり、16または32要素のウィンドウを使用したい場合、これはどのように変更されますか?

@ user13267:はい、スムージングカーネルは加重移動平均と言えます。均一なカーネルを使用している場合(2番目の画像を参照)、それは単なる移動平均です。あなたはウィンドウサイズについて正しいです。エッジを処理するには、1)データのゼロパディング、2)最後の値の繰り返し、3)信号のミラーリングの3つの基本的なアプローチがあります。すべての場合において、カーネルが無に落ちないように、いくつかのふりをするデータを作成します。
Junuxx

ゼロパディングは、無に陥るとカウントされませんか?移動平均プロセスの最後に、新しい「平均化された」データセットには元のデータと同じ数のデータがあるはずです。次に、先頭または末尾にゼロを埋めるか、最後のデータを繰り返すと、配列の端の平均値にバイアスがかかりませんか?また、データ用語の数の観点から、信号のミラーリングはどのように役立ちますか?32個のデータポイントと4または5のウィンドウサイズでプロセスがどのように行われるかを示す、これに関する簡単なチュートリアルはどこにありますか?

2
平滑化されたデータセットを元のデータセットと同じ長さにしたい場合は、エンドポイントでデータを「構成」する必要があります。そのデータを作成する方法を選択すると、何らかの形で平均が偏ります。範囲外のデータを実際のデータセットのミラーとして扱う(つまり、サンプルN + 1がN-1、N + 2 = N-2などと同じであると仮定すると)の周波数スペクトル特性は保持されますゼロまたは非ゼロの繰り返しを想定すると、すべての周波数が端でロールオフしているように見えますが、信号の端部。
ラッセルボロゴーブ

8

Junuxxのいい答えに加えて、いくつかメモを残したいと思います。

  • スムージングは​​フィルタリングに関連しています(残念ながらかなり曖昧なウィキペディアの記事)-プロパティに基づいてスムーザーを選択する必要があります。

  • 私のお気に入りの1つは中央値フィルターです。これは、非線形フィルターの例です。いくつかの興味深い特性があり、「エッジ」を保持し、大きなノイズの下で非常に堅牢です。

  • カルマンフィルターの信号の振る舞いのモデルがある場合は、一見の価値があります。その平滑化は、実際には観測に基づく信号のベイズ最尤推定です。


4

平滑化とは、隣接サンプル間の関係を変更するために、隣接サンプルからの情報を使用することを意味します。有限ベクトルの場合、両端には、一方の側に隣接する情報はありません。選択肢は次のとおりです:両端を平滑化/フィルタリングしない、結果の短い平滑化ベクトルを受け入れ、データを作成してそれを平滑化します(両端からの予測の精度/有用性に依存します)、または多分異なる非対称平滑化カーネルを使用します終わり(とにかく信号の情報内容を短縮することになります)。


3

さまざまなタップ長の移動平均フィルターを平滑化するためのmatlabコード全体を見つけることができます。www.gaussianwaves.com/2010/11/moving-average-filter-ma-filter-2/


1

他の人はあなたがどのようにスムージングを行うかについて言及ていますが、スムージングがなぜ機能するのについて言及したいと思います。

信号を適切にオーバーサンプリングすると、サンプルごとに変化が比較的少なくなり(サンプル=タイムポイント、ピクセルなど)、全体的に滑らかな外観が期待されます。つまり、信号には高周波がほとんど含まれていません。つまり、サンプリングレートと同様のレートで変化する信号成分です。

しかし、測定値はノイズによって破損することがよくあります。最初の近似では、通常、ノイズは平均ゼロと、信号の上に単純に追加される特定の標準偏差を持つガウス分布に従うと考えます。

信号のノイズを減らすために、一般的に次の4つの仮定を立てます。ノイズはランダムで、サンプル間で相関がなく、平均がゼロで、信号が十分にオーバーサンプリングされている。これらの仮定により、スライディング平均フィルターを使用できます。

たとえば、3つの連続したサンプルを考えます。信号は非常にオーバーサンプリングされているため、基礎となる信号は線形に変化すると見なすことができます。つまり、3つのサンプルの信号の平均は真ん中のサンプルの真の信号と等しくなります。対照的に、ノイズの平均はゼロであり、無相関です。つまり、平均はゼロになる傾向があります。したがって、3サンプルのスライディング平均フィルターを適用して、各サンプルをそれ自体とその2つの隣接するピクセル間の平均に置き換えます。

もちろん、ウィンドウを大きくすればするほど、ノイズは平均してゼロになりますが、真の信号の線形性の仮定はより小さくなります。したがって、トレードオフを行う必要があります。両方の長所を最大限に活用しようとする方法の1つは、加重平均を使用することです。この場合、距離が離れたサンプルは重みを小さくし、線形から逸脱する場合は真の信号にあまり重みをかけずに、大きな範囲からのノイズ効果を平均します仮定。

重みの付け方は、ノイズ、信号、計算効率、そしてもちろん、ノイズを取り除くことと信号をカットすることとのトレードオフに依存します。

過去数年間に、可変フィルターウィンドウ(異方性拡散)を使用したスムージングスキーム、または実際にウィンドウを使用しないスキームを設計するなど、4つの仮定のいくつかを緩和するために多くの作業が行われていることに注意してくださいまったく(非ローカル手段)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.