ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

sgolay

Savitzky-Golay フィルター設計

構文

b = sgolay(k,f)
b = sgolay(k,f,w)
[b,g] = sgolay(...)

説明

b = sgolay(k,f) では、Savitzky-Golay FIR 平滑化フィルター b が設計されます。多項式の次数 k は、フレーム サイズ f よりも短くなければなりません。また、k は奇数でなければなりません。k = f-1 の場合、設計されるフィルターは平滑化されません。出力 b は、ff 列の行列で、その行は時変の FIR フィルター係数を表しています。平滑化フィルターを実装 (たとえば、sgolayfilt を実装) する際には、最後の (f-1)/2 行 (個々の FIR フィルター) は、開始時の過渡状態中に信号に適用されます。また、最初の (f-1)/2 行は、終了時の過渡状態中に信号に適用されます。中心の行は、安定状態で信号に適用されます。

b = sgolay(k,f,w) では、最小二乗の最小化で使用される正の実数値の重みを含む、長さ f の重みベクトル w が指定されます。

[b,g] = sgolay(...) では、差分フィルターの行列 g が返されます。g の各列は、次数 p-1 の導関数に対応する差分フィルターです。ここで、p は列インデックスです。長さが f の信号 x が与えられた場合、以下の式により、中央値の p 次の導関数 xp の推定を求めることができます。

xp((f+1)/2) = (factorial(p)) * g(:,p+1)' * x

すべて折りたたむ

sgolay を使用してノイズの多い正弦波を平滑化します。結果となる 1 次および 2 次導関数を計算します。

N = 4;                 % Order of polynomial fit
F = 21;                % Window length
[b,g] = sgolay(N,F);   % Calculate S-G coefficients

dx = 0.2;
xLim = 200;
x = 0:dx:xLim-1;

y = 5*sin(0.4*pi*x) + randn(size(x));  % Sinusoid with noise

HalfWin  = ((F+1)/2) -1;

for n = (F+1)/2:996-(F+1)/2,
  % Zeroth derivative (smoothing only)
  SG0(n) = dot(g(:,1),y(n - HalfWin:n + HalfWin));

  % 1st differential
  SG1(n) = dot(g(:,2),y(n - HalfWin:n + HalfWin));

  % 2nd differential
  SG2(n) = 2*dot(g(:,3)',y(n - HalfWin:n + HalfWin))';
end

SG1 = SG1/dx;         % Turn differential into derivative
SG2 = SG2/(dx*dx);    % and into 2nd derivative

diff を使用して、1 次導関数と 2 次導関数を求めます。結果を比較します。

DiffD1 = diff(y(1:length(SG0)+1))/dx;
DiffD2 = diff(diff(y(1:length(SG0)+2)))/(dx*dx);

subplot(3,1,1)
plot([y(1:length(SG0))', SG0'])
legend('Noisy','S-G Smoothed')
legend boxoff
ylabel('Sinusoid')

subplot(3,1,2)
plot([DiffD1',SG1'])
legend('Diff','S-G')
legend boxoff
ylabel('1st derivative')

subplot(3,1,3)
plot([DiffD2',SG2'])
legend('Diff','S-G')
legend boxoff
ylabel('2nd derivative')

細部を見るには、拡大表示してください。diff を使用するとノイズが増幅されるため、役に立つ結果は得られません。

for kj = 1:3
    subplot(3,1,kj)
    axis([400 500 -Inf Inf])
end

詳細

すべて折りたたむ

ヒント

Savitzky-Golay 平滑化フィルターは、デジタル平滑化多項式フィルター、または最小二乗平滑化フィルターとも呼ばれ、通常、ノイズなしの状態でも広い周波数範囲をもつ、ノイズの多い信号の平滑化に使用されます。この種のアプリケーションでは、Savitzky-Golay 平滑化フィルターの方が標準の平均化 FIR フィルターよりうまく機能します。これは、標準の平均化 FIR フィルターでは、ノイズとともに信号の高周波数部分でかなりのゲインがフィルターによって除去されてしまうからです。ただし、Savitzky-Golay フィルターは信号の高周波数成分を維持するには効果的ですが、ノイズのレベルが特に高い場合、標準の平均化 FIR フィルターほどノイズの除去は優れていません。Savitzky-Golay フィルターで使用される式は、他の平滑化法よりもさまざまなモーメント次数の保存に適しています。ただし、ピークの幅や高さの保存に関しては、他の平滑化法の方が Savitzky-Golay フィルターよりも優れています。

Savitzky-Golay フィルターは、多項式をノイズ データの各フレームに近似する上で、最小二乗誤差を最小にするという意味で最適なものです。

参考文献

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

R2006a より前に導入

この情報は役に立ちましたか?