HINWEIS
Meine vorherige Antwort (vor dieser Bearbeitung), in der der Savitzky-Golay (SG) -Filter als nichtlineares, zeitvariables Eingabedaten abhängig bezeichnet wurde, war falsch, da vorzeitig falsch interpretiert wurde, wie ein Savitzky-Golay (SG) -Filter seine Ausgabe berechnet gemäß dem bereitgestellten Wiki-Link. Jetzt korrigiere ich es zum Nutzen derer, die auch sehen würden, wie SG-Filter durch FIR-LTI-Filterung implementiert werden können. Danke an @MattL. für seine Korrektur, die großartige Verbindung, die er bereitgestellt hat, und die Geduld, die er (die ich niemals hätte zeigen können) während meiner Untersuchung des Problems hatte. Obwohl ich ehrlich gesagt einen ausführlicheren Einwand vorziehen würde, der dennoch eindeutig nicht notwendig ist. Bitte beachten Sie auch, dass die richtige Antwort die andere ist. Diese dient nur zur zusätzlichen Verdeutlichung der LTI-Eigenschaft von SG-Filtern.
Nun ist es nicht verwunderlich, dass jemand, der (der diese Filter noch nie zuvor verwendet hat) der Definition des SG-Filters als LSE-Polynom niedriger Ordnung für bestimmte Daten gegenübersteht, sofort zu dem Schluss kommt, dass diese datenabhängig, nichtlinear und sind zeitvariable, adaptive Filter.
Das Polynomanpassungsverfahren wird jedoch von SG selbst geschickt interpretiert, so dass es eine vollständig datenunabhängige, zeitinvariante, lineare Filterung ermöglicht, wodurch SG als festes LTI-FIR-Filter möglich wird.
Das ist eine kürzeste Zusammenfassung von der Verbindung von mattl zur Verfügung gestellt. Für Details, die zu fehlen scheinen, konsultieren Sie bitte das Originaldokument oder bitten Sie um Klärung. Aber ich möchte hier nicht das gesamte Dokument nachproduzieren.
Betrachten Sie nun Eingabedatenwerte die um zentriert sind und in die wir ein Polynom der Ordnung wollen , wobei die ganzzahligen :2M+1x[−M],x[−M+1],...,x[0],x[1],...,x[M]n=0p[n]Nn=−M,−M+1,...,−1,0,1,...M
p[n]=∑k=0Naknk=a0+a1n+a2n2+...+aNnN
Das klassische LSE-Polynomanpassungsverfahren berechnet diese Koeffizienten , um das optimale Polynom Ordnung herauszufinden, das die Summe der Fehlerquadrate minimiertakNthp[n]
E=∑−MM(p[n]−x[n])2
über den gegebenen Datenvektor .x=[x[−M],x[−M+1],...,x[0],x[1],...,x[M]]T
Diese optimalen Polynomkoeffizienten werden erhalten, indem die Ableitung von auf Null gesetzt wird:akE
∂E∂ai=0 , for i=0,1,..,N(1)
Für diejenigen, die mit dem LSE-Polyfit-Verfahren vertraut sind, schreibe ich einfach die resultierende Matrixgleichung (aus dem Link), die den optimalen Koeffizientensatz definiert:
a=(ATA)−1ATx=Hx(2)
wobei der Eingangsdatenvektor ist die LSE-Polyfit-Matrix und die durch Matrix ist die Zeit-Momentan-Matrix (Potenzen von ganzzahligen Zeitpunkten ); das heißt, zu beachten , daß sowohl und folglich sind von Eingangsdaten indpendent Werte als gegeben ist durch :x(2M+1)×1H2M+1NAnAHA
A=[αn,i]=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢(−M)0(−M+1)0(0)0(M)0(−M)1(−M+1)1...(0)1...(M)1............(−M)N(−M+1)N(0)N(M)N⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥
Jetzt lehnen wir uns für einen Moment zurück und diskutieren hier einen Punkt.
Wie aus Gleichung (2) klar hervorgeht, sind die optimalen LSE-Polynomkoeffizienten von den Eingabedaten abhängig , obwohl und unabhängig von den Eingabedaten sind und nur von den Zeitindizes abhängen. Darüber hinaus hängen sie auch von der Größe des Fensters und der Reihenfolge des Polynoms . Wenn das Fenster entlang der Eingabedaten gleitet , sollte der Koeffizient neu berechnet (aktualisiert) werden und ist daher auch zeitabhängig. Genau so wird der SG-Filter im Link auf der Seite definiert, die unten aufgeführt ist:AHnakMNx[n]ak2nd
... Dies (das LSE-Polyfit) kann bei jedem Abtastwert der Eingabe wiederholt werden, wobei jedes Mal ein neues Polynom und ein neuer Wert der Ausgabesequenz y [n] erzeugt werden ...
Wie überwinden wir diese rätselhafte Überraschung? Durch Interpretieren und Definieren der SG-Filterausgabe wie folgt:
Das SG-Filter der Ordnung akzeptiert für jede Zeitabtastung einen Eingabesatz und erzeugt eine einzelne Ausgangsabtastung , die als das bei bewertete Polynom definiert ist ; dhNnx[n]y[n]p[n]n=0
y[n]=y[0]=∑m=0Namnm=a0
Das heißt, für jeden Eingangssatz von Abtastwerten von (zentriert um ) erzeugt das SG-Filter die mit bezeichnete Ausgabe, die dem einzelnen Koeffizienten der optimalen LSE entspricht Polynom , das diesem bestimmten Fenster der Abtastwerte . Während das Fenster entlang der Eingangsdatenlänge gleitet, wird übrigens zu jedem Zeitpunkt eine neue Ausgangsabtastung gemäß dem Fenster der Abtastwerte berechnet. . Hier ist dies ein Nancusal-Filter.2M+1x[n]n=dy[n]a0p[n]x[n]n=dy[d]x[d−M],x[d−M+1],...,x[d−1],x[d],x[d+1],...x[d+M]
Es ist nun an der Zeit zu zeigen, dass der Koeffizient als lineare Kombination von Eingangssignalwerten im Fenster erhalten wird und der Filterausgang daher eine lineare Kombination von Eingangswerten . Und dies ist genau die Definition der (LTI) -Faltung über ein FIR-Filter; Die Ausgabe zum Zeitpunkt ist die lineare Kombination ihrer Eingabe und der Filterkoeffizienten . Aber was sind dann die Filterkoeffizienten für diesen SG-Filter? Mal sehn.a0x[n]y[n]x[n]nx[n]h[n]
Betrachten Sie noch einmal die Berechnung von :ak
a=Hx
⎡⎣⎢⎢⎢⎢a0a1⋮aN⎤⎦⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢h(0,0)h(1,0)h(N,0)h(0,1)h(1,1)...h(0,1).........h(0,2M)h(1,2M)h(0,2M)⎤⎦⎥⎥⎥⎥⋅⎡⎣⎢⎢⎢⎢x[−M]x[−M+1]...x[M]⎤⎦⎥⎥⎥⎥
woraus wir sehen können, dass der einzelne Koeffizient durch das Punktprodukt der ersten Zeile von mit dem Eingabedatenvektor ; dha0Hx
a0=H(0,n)⋅x=∑H(0,k)x[k]=H(0,−n)⋆x[n]
wo in der letzten Gleichheit wir die Punktproduktsumme als die Faltungssumme interpretiert haben, indem wir die Impulsantwort des SG-Filters als ,h[n]=H(0,−n)
Insbesondere ist es die Impulsantwort des SG-Filters der Ordnung mit einer Fensterlänge von .N2M+1
Und die vollständige Ausgabe des SG-Filters N-ter Ordnung mit einer Fenstergröße von für eine Eingabe der Länge wird durch eine einzelne LTI-Faltung mit der Impulsantworty[n]2M+1x[n]LhN[n]
y[n]=x[n]⋆hN[n]
KOMMENTAR
Die Tatsache, dass die Polynomkoeffizienten von den Eingabedaten abhängen, verhindert nicht, dass der Filter eine LTI-FIR ist. Weil eine Impulsantwort definiert werden kann, um den Ausgang darzustellen , der aus einer linearen Kombination von Eingangsabtastwerten berechnet werden soll. Die linearen Kombinationen von Eingangsabtastwerten werden von Natur aus durch das Matrixprodukt impliziert , das die optimalen Koeffizienten von . Daher würde jede lineare Kombination von auch dazu führen, dass ein FIR-LTI-Filter dargestellt wird das LSE-Polynomanpassungsverfahren.akh[n]y[n]xa=Hxakp[n]akh[n]
MATLAB / OKTVE-CODE
Das folgende einfache MATLAB / OCTAVE kann verwendet werden, um diese SG-Filter-Impulsantworten zu berechnen (Beachten Sie, dass der eingebaute SG-Designer möglicherweise einen anderen Satz von wie im verknüpften PDF beschrieben).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]');
Die Ausgabe ist:
Hoffe, das klärt das Problem.