主要内容

このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

信号の平滑化

この例では,移動平均フィルターとリサンプリングを使用して,1時間ごとの温度の測定値について時刻の周期的成分の影響を分離したり,開ループ電圧測定値から望ましくない回線ノイズを取り除いたりする方法を示します。この例では,メディアンフィルターを使用してエッジを保存しながら,クロック信号のレベルを平滑化する方法も説明します。さらに,例では,Hampelフィルタを使用して大きな外れ値を取り除く方法にいても説明します。

目的

平滑化とは,データにおける重要パターンを,ノイズなど的重要性の低いものを除去しながら見つけ出す方法です。この平滑化のためにフィルタ,処理を使用します。平滑化の目的は,値の変化をなだらかにしてデ,タの傾向をわかりやすくすることです。

入力デ,タを検証するとき,信号の傾向を調べるためにデ,タの平滑化を行うことがあります。ここに,2011年1月の1か月間,ローガン空港で1時間間隔で測定された温度が摂氏単位で表示されています。

负载bostemp天数= (1:31*24)/24;plot(days, tempC)轴ylabel (“临时(\ circC)”)包含(自2011年1月1日起已经过时间(天))标题(洛根机场干球温度(来源:NOAA)

温度の読み取りにおいて1日の時間が与える影響を目視できることに注目してください。その月にわたり日々の温度変化だけに関心がある場合,1時間ごとの変動はノイズになるだけで毎日の変化を見定めにくくします。時刻の影響を取り除くために,移動平均フィルタ,を使用してデ,タを平滑化します。

移動平均フィルタ

最も簡単な形では,長さNの移動平均フィルターは連続したN個ごとの波形サンプルの平均をとります。

各データ点に移動平均フィルターをかけるには,各点が均等に重み付けされ,合計平均の1/24の割合を示すようにフィルター係数を作成します。これにより,24時間ごとの平均温度が得られます。

hoursPerDay = 24;coeff24hMA = ones(1, hoursPerDay)/hoursPerDay;avg24hTempC = filter(coeff24hMA, 1, tempC);plot(days,[tempC avg24hTempC])每小时的临时的“24小时平均(延迟)”“位置”“最佳”) ylabel (“临时(\ circC)”)包含(自2011年1月1日起已经过时间(天))标题(洛根机场干球温度(来源:NOAA)

フィルタ,遅延

フィルタ出力が約12時間分遅れていることに注意します。これは,移動平均フィルタ,が遅れをも,ことによるものです。

長さnの対称フィルタはどれも(n -1)/2サンプルの遅れをもます。この遅れは手作業で調整できます。

fDelay = (length(coeff24hMA)-1)/2;情节(天,tempC,...avg24hTempC days-fDelay / 24日)轴传奇(每小时的临时的“24小时平均”“位置”“最佳”) ylabel (“临时(\ circC)”)包含(自2011年1月1日起已经过时间(天))标题(洛根机场干球温度(来源:NOAA)

平均の差の抽出

また,移動平均フィルターを使用して,時刻が全体の温度にどのように影響しているかをより正確に推定できます。これを行うにはまず,1時間ごとの温度の測定値から平滑化したデ,タを減算します。次に,差分デタを日ごとに分け,その月の31日全体にいて平均をとります。

图deltaTempC = tempC - avg24hTempC;deltaTempC =重塑(deltaTempC, 24,31).';plot(1:24, mean(deltaTempC))轴标题(“24小时平均温度差”)包含(“一天中的几个小时(从午夜开始)”) ylabel (“温差(\circC)”

ピ,ク包絡線の抽出

温度信号の高値と低値が,毎日どのように変化するかについて,なだらかな変動推定を得ることが必要な場合もあります。これを行うには,関数信封を使用して,24時間周期のサブセットにおいて検出された極端に高い値と極端に低い値をなぎます。この例では,極端に高い値と極端に低い値のそれぞれの間に少なくとも16時間の間隔が空くようにしています。極端な2つの値の間の平均を取得することによって,高値と低値がどのような傾向で変化しているかを把握することもできます。

[envHigh, envLow] =信封(tempC,16,“高峰”);envMean = (envHigh+envLow)/2;情节(天,tempC,...天,envHigh,...天,envMean,...天,envLow)轴传奇(每小时的临时的“高”“的意思是”“低”“位置”“最佳”) ylabel (“临时(\ circC)”)包含(自2011年1月1日起已经过时间(天))标题(洛根机场干球温度(来源:NOAA)

重み付けされた移動平均フィルタ

他の種類の移動平均フィルタ,では各サンプルの均等な重み付けは行われません。

別の一般的なフィルタ,は 1 / 2 1 / 2 n の2項展開式に従います。nが大きな値の場合、このタイプのフィルターは正規曲線を近似します。n が小さい場合、これは高周波ノイズの除去に役立ちます。2 項フィルターの係数を見つけるには、 1 / 2 1 / 2 とそれ自体の畳み込みを行い,出力と 1 / 2 1 / 2 の畳み込みを指定された回数繰り返します。この例では,総反復回数は5です。

H = [1/2 /2];binomialCoeff = conv(h,h);n = 1:4 binomialCoeff = conv(binomialCoeff,h);结束figure fDelay = (length(binomialCoeff)-1)/2;binomialMA = filter(binomialCoeff, 1, tempC);情节(天,tempC,...binomialMA days-fDelay / 24日)轴传奇(每小时的临时的“二项式加权平均”“位置”“最佳”) ylabel (“临时(\ circC)”)包含(自2011年1月1日起已经过时间(天))标题(洛根机场干球温度(来源:NOAA)

ガウスフィルタ,とやや似た別のフィルタ,として指数移動平均フィルタ,があります。このタイプの重み付けされた移動平均フィルターは作成が容易で,大きなウィンドウサイズを必要としません。

指数関数的に重み付けされた移動平均フィルターを0から1までのαパラメーターで調整します。Alphaの値が大きいほど滑らかさが少なくなります。

Alpha = 0.45;exponentialMA = filter(alpha, [1 alpha-1], tempC);情节(天,tempC,...binomialMA days-fDelay / 24日,...days-1/24 exponentialMA)轴传奇(每小时的临时的...“二项式加权平均”...“指数加权平均”“位置”“最佳”) ylabel (“临时(\ circC)”)包含(自2011年1月1日起已经过时间(天))标题(洛根机场干球温度(来源:NOAA)

1日の測定値を拡大します。

轴([3 4 -5 2])

Savitzky-Golayフィルタ,

デ,タの平滑化によって,極端な値がいくらか切り捨てられています。

信号をもう少し厳密に追跡するには,指定の次数の多項式を,最小二乗により指定したサンプル数にあてはめるようとする重み付けされた移動平均フィルターを使用できます。

便宜上、関数sgolayfiltを使用してSavitzky-Golay平滑化フィルタ,を実装できます。sgolayfiltを使用するには,奇数長のデータセグメントと,セグメント長より厳密に小さい多項式の次数を指定します。関数sgolayfiltは平滑化多項式係数を内部で計算し,遅延調整して,データの最初と最後で生じる過渡的な影響の処理を行います。

cubicMA = sgolayfilt(tempC, 3,7);quarticMA = sgolayfilt(tempC, 4,7);quinticMA = sgolayfilt(tempC, 5, 9);plot的用法和样例:每小时的临时的“马Cubic-Weighted”“马Quartic-Weighted”...“马Quintic-Weighted”“位置”“东南”) ylabel (“临时(\ circC)”)包含(自2011年1月1日起已经过时间(天))标题(洛根机场干球温度(来源:NOAA))轴([3 5 -5 2])

リサンプリング

移動平均を適切に行うために,信号のリサンプリングをした方がよい場合もあります。

次の例は,ノイズの影響を受けているアナログ計器の,60赫兹電力供給ラインからの入力における開ループ電圧のサンプリング結果です。1 kHzのサンプリングレ,トで電圧をサンプリングしました。

负载openloop60hertzFs = 1000;t =(0:数字(openLoopVoltage)-1) / fs;情节(t, openLoopVoltage) ylabel (“电压(V)”)包含(“时间(s)”)标题(“开环电压测量”

移動平均フィルタを使用して回線ノズの影響を取り除いてみます。

一様に重み付けされた移動平均フィルターを作成した場合,フィルターの継続時間における周期性成分がいずれも取り除かれます。

1000赫兹でサンプリングした場合,60赫兹の1周期中のサンプル数は約1000/60 = 16.667です。この数を丸めて,17点フィルタ,を使用してみます。これにより,基本周波数1000 Hz / 17 = 58.82赫兹においてフィルター処理が最大になります。

情节(t, sgolayfilt (openLoopVoltage 1 17) ylabel (“电压(V)”)包含(“时间(s)”)标题(“开环电压测量”)传说(“工作在58.82 Hz的移动平均滤波器”...“位置”“东南”

電圧はかなり平滑されていますが,まだ微小な60 Hzリップルが残っていることがわかります。

60 Hzの信号1周期分を完全に移動平均フィルターで捕捉できるように信号をリサンプリングすれば,リップルを大幅に減らすことができます。

17×60 Hz = 1020 Hzで信号をリサンプリングすれば,17点移動平均フィルターを使用して60 Hz回線ノイズを取り除くことができます。

fsResamp = 1020;vResamp = resample(openLoopVoltage, fsResamp, fs);tResamp = (0: number (vResamp)-1) / fsResamp;vAvgResamp = sgolayfilt(vResamp,1,17);情节(tResamp vAvgResamp) ylabel (“电压(V)”)包含(“时间(s)”)标题(“开环电压测量”)传说(“移动平均滤波器工作在60赫兹”...“位置”“东南”

中值滤波器

移動平均フィルター,加重移動平均フィルターおよびSavitzky-Golayフィルターは,フィルター処理するすべてのデータを平滑化します。ただし,これが常に必要であるとは限りません。たとえば,クロック信号から取得されたデータについて,鋭いエッジの平滑化が望ましくない場合があるとします。これまでに説明したフィルタ,は,このような処理には不向きです。

负载clockexyMovingAverage = conv(x,ones(5,1)/5,“相同”);ySavitzkyGolay = sgolayfilt(x,3,5);情节(t x,...t yMovingAverage...t, ySavitzkyGolay)传说(原始信号的“移动平均”“Savitzky-Golay”

移動平均フィルターとSavitzky-Golayフィルターでは,クロック信号のエッジ付近で,それぞれ補正不足と過剰補正が生じます。

エッジを保存しながらレベルを平滑化する簡単な方法は,メディアンフィルタ,を使用することです。

yMedFilt = medfilt1(x,5,“截断”);情节(t x,...t, yMedFilt)传说(原始信号的“中值滤波”

Hampelフィルタ,による外れ値の除去

フィルタ,の多くは外れ値の影響を受けます。メディアンフィルタ,と近い関係にあるのがHampelフィルタ,です。このフィルタ,は,デ,タを過剰に平滑化することなく信号から外れ値を除去するのに役立,ます。

これを確認するため,列車の警笛のオーディオ録音を読み込み,人工的なノイズスパイクをいくらか加えます。

负载火车Y (1:400:end) = 2.1;情节(y)

導入した各スパイクの持続時間は1サンプル分のみであるため,このスパイクの除去には要素が3つのみのメディアンフィルターを使用します。

持有情节(medfilt1 (y, 3))传奇(原始信号的“过滤信号”

フィルタによりスパクは除去されましたが,同時に元の信号から多数のデタ点が除去されています。Hampelフィルターは,メディアンフィルターと同様に動作しますが,局所的な中央値から標準偏差の数倍離れた値のみを置き換えます。

传说hampel (y, 13) (“位置”“最佳”

外れ値のみが元の信号から除去されています。

参考情報

フィルター処理およびリサンプリングの詳細は,信号处理工具箱を参照してください。

参考文献:肯德尔,莫里斯G.,艾伦斯图尔特,和J.基思奥德。高级统计理论,第3卷:设计和分析,和时间序列.第四版。伦敦:麦克米伦出版社,1983年。

参考

||||