主要内容

sgolayfilt

Savitzky-Golay フィルター

説明

y= sgolayfilt(x,order,framelen)は、ベクトルxのデータに、多項式の次数orderおよびフレーム長framelenのsavitzky-golay有限有限応答(fir)平滑平滑フィルター适用し。。xが行列の場合、sgolayfiltは各列に適用されます。

y= sgolayfilt(x,order,framelen,权重)は,二乘最小化中使用重みベクトルを指定します。

y= sgolayfilt(x,order,framelen,权重,dim)は、フィルターが作用する次元を指定します。

すべて折りたたむ

ランダムな信号を生成して、sgolayfiltを使用して平滑化します。多項式の次数 3 およびフレーム長 11 を指定します。元の信号と平滑化された信号をプロットします。

order = 3; framelen = 11; lx = 34; x = randn(lx,1); sgf = sgolayfilt(x,order,framelen); plot(x,':') 抓住plot(sgf,'.-') legend('信号','sgolay')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent signal, sgolay.

関数sgolayfiltは,と中心の行B(sgolay)のの行って,ほとんどの处理実行ます。结果结果ははフィルターフィルター处理处理さされ信号信号の定常定常定常状态状态部分部分部分です。

m = (framelen-1)/2; B = sgolay(order,framelen); steady = conv(x,B(m+1,:),'相同的'); plot(steady) legend('信号','sgolay','steady')

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent signal, sgolay, steady.

信号エッジの近傍のサンプルは対称ウィンドウの中心に配置できないため、異なる方法で扱わなければなりません。

開始時の過渡状態を求めるため、行列はBの最初の(framelen-1)/2行を信号の最初のframelenサンプルで乘算ます。

ybeg = b(1:m,:)*x(1:framelen);

終了時の過渡状態を求めるため、行列はBの最后の(framelen-1)/2行を信号の最後のframelenサンプルで乘算ます。

yend = b(Framelen-M+1:Framelen,:)*x(lx-framelen+1:lx);

過渡状態と定常状態部分を連結して、完全な信号を生成します。

cmplt = steady; cmplt(1:m) = ybeg; cmplt(lx-m+1:lx) = yend; plot(cmplt) legend('信号','sgolay','steady','complete') 抓住off

Figure contains an axes object. The axes object contains 4 objects of type line. These objects represent signal, sgolay, steady, complete.

最小化に重みを加えると、Bの対称性がこわれ、正しい解を得るために追加のステップが必要になります。

F s = 7418 Hz でサンプリングされた音声信号を読み込みます。ファイルには、"MATLAB®" という単語を発声している女性の録音音声が含まれています。

loadmtlbt = (0:length(mtlb)-1)/Fs;

21の长データフレームに多项次数次数ががががががががががフィルターフィルターフィルターフィルターフィルターを适用ししてて,信号を平滑平滑化化ししますますます。元元のののの信号信号とフィルターフィルターフィルターさささ。

rd = 9; fl = 21; smtlb = sgolayfilt(mtlb,rd,fl); subplot(2,1,1) plot(t,mtlb) axis([0.2 0.22 -3 2]) title('Original') grid subplot(2,1,2) plot(t,smtlb) axis([0.2 0.22 -3 2]) title('Filtered') grid

Figure contains 2 axes objects. Axes object 1 with title Original contains an object of type line. Axes object 2 with title Filtered contains an object of type line.

計算を繰り返しますが、今回はカイザー ウィンドウを重みベクトルとして使用します。形状係数 β = 38 を指定します。新しいフィルター処理された信号をプロットします。

kmtlb = sgolayfilt(mtlb,rd,fl,kaiser(fl,38));子图(2,1,2)保留plot(t,kmtlb) axis([0.2 0.22 -3 2]) holdoff

Figure contains 2 axes objects. Axes object 1 with title Original contains an object of type line. Axes object 2 with title Filtered contains 2 objects of type line.

入力引数

すべて折りたたむ

ベクトルまたは行列として指定される入力信号。

データ::single|double

多項式の次数。正の整数として指定します。orderframelenよりも小さくしなければなりません。order=framelen– 1 の場合、フィルターでは平滑化は行われません。

データ::single|double

フレーム長。正の奇数の整数で指定します。

データ::single|double

重み付け配列。長さframelenの正の実数ベクトルまたは正の実数行列で指定します。

データ::single|double

フィルターを次元。の整数のでします。既定では,sgolayfiltはサイズが 1 より大きいxの最初の次元に沿って機能します。

データ::single|double

出力引数

すべて折りたたむ

フィルター处理れ信号ベクトルまたは行列返されます。

ヒント

Savitzky-Golay 平滑化フィルターは、通常、ノイズを含むがノイズのない部分の周波数範囲が広い信号の "平滑化" に使用されます。このフィルターは、デジタル平滑化多項式フィルターまたは最小二乗平滑化フィルターとも呼ばれます。一部のアプリケーションでは、Savitzky-Golay フィルターの方が標準の平均化 FIR フィルターよりうまく機能します。これは、標準の平均化 FIR フィルターでは、ノイズと共に高周波数成分がフィルター処理されるためです。Savitzky-Golay フィルターは高周波数信号成分を維持するには効果的ですが、ノイズの除去には優れていません。

Savitzky-golayフィルター,多项式ノイズデータ各に近似近似する上で,,最最最小乘乘误差ををををを最小最小最小最小最小ににににするするとととというsgolayを参照してください。

参照

[1] Orfanidis, Sophocles J. Introduction to Signal Processing. Englewood Cliffs, NJ: Prentice Hall, 1996.

[2] Schafer, Ronald. “What Is a Savitzky-Golay Filter? [Lecture Notes].” IEEE Signal Processing Magazine 28, no. 4 (July 2011): 111–17. https://doi.org/10.1109/MSP.2011.941097.

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2006Aよりに导入导入