노트
Savitzky-Golay (SG) 필터가 출력을 계산하는 방식을 조기에 잘못 해석했기 때문에 Savitzky-Golay (SG) 필터를 비선형, 시간에 따라 변하는 입력 데이터에 의존하는 것으로 표시 한 이전 답변 (이 편집 전) 제공된 위키 링크에 따라. 그래서 지금은 FIR-LTI 필터링으로 SG 필터를 구현하는 방법을 보는 사람들의 이익을 위해 수정하고 있습니다. @MattL에게 감사합니다. 그의 정정을 위해, 그가 제공 한 위대한 연결과 내가 문제를 조사 하는 동안 그가 가지고있는 인내심 (내가 결코 보여줄 수 없었던 인내) . 나는 솔직히 더 자세한 반대 의견을 선호하지만 그럼에도 불구하고 분명히 필요하지는 않습니다. 또한 정답은 다른 것입니다. 이것은 SG 필터의 LTI 속성에 대한 추가 설명을위한 것입니다.
이제 (이전에 해당 필터를 사용한 적이없는) 누군가 가 주어진 데이터에 대해 하위 LSE 다항식 적합으로 SG 필터의 정의에 직면 할 때 데이터에 의존하고 비선형 적이며 시간 (시프트) 가변 적응 필터.
그러나, 다항식 피팅 절차는 SG 자체에 의해 영리하게 해석되어 데이터에 독립적이고 시변이없는 선형 필터링이 가능하여 SG를 고정 LTI-FIR 필터로 만듭니다.
아래는 MattL에서 제공 하는 링크의 요약입니다 . 누락 된 것으로 보이는 자세한 내용은 원본 문서를 참조하거나 명확하게 요청하십시오. 그러나 나는 전체 문서를 여기에서 재현하고 싶지 않습니다.
2 M+ 1X [ - M] , X [ - M+ 1 ] , . . . , X [ 0 ] , X [ 1 ] , . . . , x [ M]n = 0p [ n ]엔N = - M, − M+ 1 , . . . , - 1 , 0 , 1 , . . . 미디엄
p [ n ] = ∑k = 0엔ㅏ케이엔케이= a0+a1n+a2n2+...+aNnN
akNthp [ n ]
이자형= ∑− M미디엄( p [ n ] − x [ n ] )2
X = [ X [ - M] , X [ - M+ 1 ] , . . . , X [ 0 ] , X [ 1 ] , . . . , x [ M] ]티
ㅏ케이이자형
∂이자형∂ㅏ나는= 0 , 위한 난 = 0 , 1 , . . , N (1)
이제 LSE polyfit 절차에 익숙한 사람들을 위해 최적의 계수 세트를 정의하는 결과 행렬 방정식을 링크에서 작성합니다.
a = ( A티A )− 1ㅏ티x = H엑스(2)
엑스( 2 M+ 1 ) × 1H2 M+ 1엔ㅏ엔ㅏHㅏ
A = [ αn , 나는] = ⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢( − M)0( − M+ 1 )0( 0 )0( M)0( − M)1( − M+ 1 )1. . .( 0 )1. . .( M)1. . .. . .. . .. . .( − M)엔( − M+ 1 )엔( 0 )엔( M)엔⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥
이제 잠시 뒤로 물러서서 요점을 논의하십시오.
ㅏH엔ㅏ케이미디엄엔x [ n ]ㅏ케이2N 일
...이 (LSE polyfit)는 입력의 각 샘플에서 반복 될 수 있으며 매번 새로운 다항식과 출력 시퀀스 y [n]의 새로운 값을 생성합니다 ...
그렇다면이 수수께끼의 놀라움을 어떻게 극복 할 수 있습니까? SG 필터 출력을 해석하고 정의하여 다음과 같습니다.
엔엔x [ n ]와이[ n ]p [ n ]n = 0
와이[ n ] = y[ 0 ] = ∑m = 0엔ㅏ미디엄엔미디엄= a0
2 M+ 1x [ n ]n = d와이[ n ]ㅏ0p [ n ]x [ n ]n = d와이[ d]x [ d− M] , x [ d− M+ 1 ] , . . . , x [ d− 1 ] , x [ d] , x [ d+ 1 ] , . . . x [ d+ M]
ㅏ0x [ n ]와이[ n ]x [ n ]엔x [ n ]h [ n ]. 그러나이 SG 필터의 필터 계수는 무엇입니까? 볼 수 있습니다.
ㅏ케이
a = H엑스
⎡⎣⎢⎢⎢⎢ㅏ0ㅏ1⋮ㅏ엔⎤⎦⎥⎥⎥⎥= ⎡⎣⎢⎢⎢⎢h ( 0 , 0 )h ( 1 , 0 )h ( N, 0 )h ( 0 , 1 )h ( 1 , 1 ). . .h ( 0 , 1 ). . .. . .. . .h ( 0 , 2 M)h ( 1 , 2 M)h ( 0 , 2 M)⎤⎦⎥⎥⎥⎥⋅ ⎡⎣⎢⎢⎢⎢X [ - M]X [ - M+ 1 ]. . .x [ M]⎤⎦⎥⎥⎥⎥
ㅏ0H엑스
ㅏ0= H( 0 , n ) ⋅ x = ∑ H( 0 , k ) x [ k ] = H( 0 , − n ) ⋆ x [ n ]
h [ n ] = H( 0 , − n )
엔2 M+ 1
와이[ n ]2 M+ 1x [ n ]엘h엔[ n ]
와이[ n ] = x [ n ] ⋆ h엔[ n ]
논평
ㅏ케이h [ n ]와이[ n ]엑스a = H엑스ㅏ케이p [ n ]ㅏ케이h [ n ]
MATLAB / OCTVE 코드
h [ n ]h [ n ]
% Savitzky-Golay Filter
%
clc; clear all; close all;
N = 3; % a0,a1,a2,a3 : 3rd order polynomial
M = 4; % x[-M],..x[M] . 2M + 1 data
A = zeros(2*M+1,N+1);
for n = -M:M
A(n+M+1,:) = n.^[0:N];
end
H = (A'*A)^(-1)* A'; % LSE fit matrix
h = H(1,:); % S-G filter impulse response (nancausal symmetric FIR)
figure,subplot(2,1,1)
stem([-M:M],h);
title(['Impulse response h[n] of Savitzky-Golay filter of order N = ' num2str(N), ' and window size 2M+1 = ' , num2str(2*M+1)]);
subplot(2,1,2)
plot(linspace(-1,1,1024), abs(fftshift(fft(h,1024))));
title('Frequency response magnitude of h[n]');
출력은 다음과 같습니다.
이것이 문제를 분명히하기를 바랍니다.