BLUF: Filtern Sie Sensorsignale, bevor Sie ihre Abtastrate reduzieren. Wenn Sie nur jeden vierten Messwert behalten, kann eine reale hochfrequente Schwingung als falsches niederfrequentes Merkmal erscheinen. Legen Sie Nutzband, Anti-Aliasing-Dämpfung, Zeitannahmen und kausalen Filterzustand im Merkmalsvertrag fest – nicht als undokumentierte Speicheroptimierung.
Dieser Beitrag führt einen synthetischen Zweitonversuch aus, keinen Benchmark zur Lagerfehlererkennung. Bei der Reduktion von 2.000 auf 500 Abtastwerte pro Sekunde wird eine ungefilterte 420-Hz-Komponente auf 80 Hz gefaltet. Ein explizites Tiefpass-FIR verhindert diese Verfälschung im Beispiel, verursacht aber Verzögerung und verwirft bewusst Information. Liegt die diagnostisch relevante Information im verworfenen Band, ist bereits die Entscheidung zur Ratenreduktion falsch.
Welche Information dürfen Sie verwerfen?
Beginnen Sie bei der physikalischen Messung und der Wartungsentscheidung. Bestimmen Sie Nutzband, Sensor- und Erfassungsbandbreite, analogen Anti-Aliasing-Pfad, maximal plausible Außerbandamplitude, Einheiten und Herkunft des Abtasttakts. Ein langsames Trendsignal und eine Schwingungszeitreihe sind nicht austauschbar, nur weil beide als Zahlenfelder ankommen.
Es gibt zwei getrennte Grenzen. Vor der Analog-Digital-Wandlung muss die Erfassung Frequenzen begrenzen, die bei der ursprünglichen Abtastrate Aliasing erzeugen würden. Nach der Erfassung kann ein digitaler Tiefpass eine weitere Ratenreduktion absichern. Bereits am ADC entstandenes Aliasing kann er nicht eindeutig rückgängig machen. Prüfen Sie Sensor, analoge Eingangsstufe und ADC-Konfiguration, statt eine Reparatur der Erfassungskette durch Python anzunehmen.
Für gleichmäßig abgetastete reelle Signale entspricht die Ausgangs-Nyquist-Frequenz der halben Ausgangsabtastrate. Das ist eine Grenze, keine empfohlene Nutzbandkante. Ein endliches Filter benötigt einen Übergangsbereich. Im Versuch reicht das Nutzband von 0 bis 100 Hz, der Übergangsbereich von 100 bis 200 Hz; ab 200 Hz wird Sperrdämpfung verlangt, also bereits unterhalb der neuen Nyquist-Grenze von 250 Hz. Dies sind beispielhafte Entwurfsentscheidungen, keine Anlagenvorgaben.
Erweitern Sie den bestehenden industriellen Datenvertrag um diese signaltechnische Bedeutung. „Beschleunigung mit korrekter Einheit“ genügt nicht, wenn ein Erzeuger eine ungefilterte Zeitreihe und ein anderer einen bandbegrenzten Merkmalsstrom unter demselben Namen liefert.
Ein ausgeführter Zweitonversuch
Das Eingangssignal lautet x(t) = sin(2π·50t) + 0,6·sin(2π·420t), gleichmäßig mit 2.000 Hz über acht Sekunden abgetastet. Beide Komponenten liegen unter der ursprünglichen Nyquist-Grenze. Eine Dezimation um Faktor vier ergibt 500 Hz. Die gefaltete Frequenz ist abs(((f + Fs_out/2) modulo Fs_out) − Fs_out/2): Für 420 Hz entstehen 80 Hz. Die Alias-Komponente kann eine andere Phase haben; ein Spektralpeak bei 80 Hz identifiziert nicht seine ursprüngliche physikalische Quelle.
Ausgeführt wurde der Versuch mit NumPy 2.4.6 und SciPy 1.17.1. Die Amplituden sind synthetisch, dimensionslos und keine kalibrierten Sensoreinheiten. Die folgenden Messwerte beziehen sich auf das innere Intervall von einschließlich 1 s bis ausschließlich 7 s, um Filterränder auszuschließen. Sinusamplituden stammen aus einer Least-Squares-Anpassung von Sinus und Kosinus bei 50 und 80 Hz; der Effektivwert RMS ist die Wurzel des mittleren Ausgangsquadrats im selben Intervall. Das Spektrum nutzt dieses sechssekündige Rechteckfenster, das vollständige Perioden der Versuchstöne enthält.
Ungefiltertes x[::4] behielt eine 80-Hz-Amplitude von 0,600000. Der RMS betrug 0,824621 gegenüber 0,707107 für den gewünschten 50-Hz-Sinus mit Einheitsamplitude allein: eine Erhöhung um 16,62 % gegenüber diesem bewusst bandbegrenzten Ziel. Das belegt keine Abnahme der gesamten breitbandigen Maschinenschwingung. Es zeigt, dass ein für das Nutzband vorgesehenes Merkmal nun gefaltete Energie enthält.
Beide gefilterten Pfade ergaben im inneren Intervall eine 80-Hz-Amplitude von etwa 8,47×10⁻⁷, eine 50-Hz-Amplitude von 1,000033 und einen RMS von 0,707130. Übereinstimmende stationäre Amplituden bedeuten nicht, dass Zeitstempel und Online-Verfügbarkeit übereinstimmen.
Die obere Darstellung lässt die Ausgangszeitstempel unverändert, damit die kausale Verzögerung sichtbar bleibt. Unten erscheint ohne Filterung der falsche 80-Hz-Peak; die Spektren des Offline- und des kausalen Filterpfads liegen übereinander. Die Diagramme stammen aus den ausgeführten Signalarrays, nicht aus einer illustrativen Leistungsgrafik.
Machen Sie die Filterspezifikation reproduzierbar
Gefordert waren mindestens 80 dB Sperrdämpfung. Für den Kaiser-Entwurf wurden konservativere 90 dB angefordert, weil die Ordnungsschätzung empirisch ist. Die kaiserord-Dokumentation zeigt ausdrücklich, dass eine Sperrbandkeule die angeforderte Dämpfung unterschreiten kann. Ein Entwurfsaufruf ist kein Abnahmetest.
Die exakte Rezeptur lautet n, beta = signal.kaiserord(90, 100/(2000/2)); anschließend n ungerade machen; dann h = signal.firwin(n, 150, window=('kaiser', beta), fs=2000). Das ergibt 117 Koeffizienten mit beta 8.95926. Der firwin-Vertrag beschreibt ein linearphasiges FIR und interpretiert den skalaren cutoff als Halbamplitudenpunkt. Hier liegen 150 Hz in der Mitte des Übergangsbereichs, nicht an der zugesicherten Nutzbandkante.
Der Lauf speicherte alle Koeffizienten als einspaltigen Dezimaltext mit %.18e. Der SHA-256 lautet 127d58fc76ba526b349c67d27a7922aeec8a81e4fe80c7289a95d959aad0609b. Erzeugen Sie die Koeffizienten mit der fixierten Laufzeit erneut und archivieren Sie das tatsächliche Array mit dem Release; ein Hash allein liefert keine Implementierung. Prüfen Sie die eingesetzte numerische Präzision und Koeffizientendarstellung gesondert.
Die Auswertung mit signal.freqz(h, worN=131072, fs=2000) ergab auf dem Frequenzraster mindestens 89,57 dB Sperrdämpfung ab 200 Hz sowie 0,000541 dB Spitze-Spitze-Welligkeit im Nutzband bis 100 Hz. Dieses dichte Raster überschreitet das 80-dB-Ziel des Versuchs. Es ist weder eine formale Schranke zwischen sämtlichen Rasterpunkten noch ein Nachweis für Festkommahardware. Leiten Sie die Dämpfung aus der größten plausiblen zu unterdrückenden Komponente und dem zulässigen Restfehler ab, nicht aus diesen Beispielzahlen.
Entscheidungstabelle: Offline und Streaming haben unterschiedliche Verträge
| Pfad | Umsetzung im Beispiel | Zeit- und Randkosten | Geeignete Entscheidung |
|---|---|---|---|
| Ohne Filter | x[::4]; falsche 80-Hz-Amplitude 0,6 | Kein Schutz vor Aliasing | Ablehnen, sofern vorgelagerte Bandbegrenzung nicht unabhängig belegt ist |
| Offline-FIR | resample_poly(x, 1, 4, window=h) | Zentrierter Ausgang; Nullfortsetzung an Rändern | Rückblickende Analyse mit expliziter Randbehandlung |
| Kausales FIR | lfilter(h, [1.0], x), dann globaler Stride | 29 ms Gruppenlaufzeit; Anlaufhistorie erforderlich | Streaming-Merkmale mit Zustand und Zeitzuordnung |
| IIR-Alternative | Tiefpass als SOS entwerfen, dann sosfilt und Stride | Frequenzabhängige Laufzeit und eigene Einschwingregel | Prüfen, wenn Rechen- oder Verzögerungsbudget andere Eigenschaften rechtfertigt |
Die resample_poly-Dokumentation beschreibt Hochabtastung, Tiefpass-FIR und anschließende Herunterabtastung samt Randannahmen. Der Versuch übergibt eigene symmetrische Koeffizienten und nutzt konstante Nullfortsetzung. Bei up=1 erfolgt der Filterentwurf für die ursprüngliche Eingangsrate. Andere rationale Verhältnisse verlangen einen Entwurf für die dokumentierte hochgetaktete Rate; übernehmen Sie dieses Koeffizientenarray nicht unverändert.
Auch decimate filtert vor der Dezimation und erwartet äquidistante Abtastwerte. Die Einstellung zero_phase verändert die Phasenbehandlung. Setzen Sie ein phasenfreies Offline-Ergebnis nicht mit kausalem Streaming ohne Latenz gleich. Unabhängiges Resampling einzelner Datenblöcke beseitigt deren Randprobleme nicht automatisch.
Erhalten Sie Filterzustand und Dezimationsphase über Blockgrenzen
Der Streaming-Versuch führt das FIR über lfilter aus. Starten Sie mit zi = zeros(len(h) − 1). Berechnen Sie je Block y, zi = lfilter(h, [1.0], chunk, zi=zi) und übernehmen Sie den zurückgegebenen Zustand in den nächsten zusammenhängenden Block. Ist offset die Zahl bereits verarbeiteter Eingangswerte, geben Sie y[(-offset) % 4::4] aus und erhöhen offset anschließend um len(chunk). Halten Sie Zustand je Sensor und zusammenhängendem Erfassungssegment getrennt.
Der Test verwendet bewusst Blöcke mit 137 Abtastwerten, also kein Vielfaches von vier. Gegenüber der Filterung des Gesamtsignals mit anschließender Dezimation betrug die maximale absolute Abweichung 6,66×10⁻¹⁶; die Abnahmetoleranz war 10⁻¹². Eine Negativkontrolle mit Filterrücksetzung bei jedem Block erzeugte eine maximale Abweichung von 1,039164. Nur den Filterzustand zu erhalten genügt nicht: Auch eine zurückgesetzte Dezimationsphase verändert das Ausgangszeitraster.
Für dieses symmetrische FIR mit 117 Koeffizienten beträgt die Gruppenlaufzeit (117 − 1)/(2·2000) = 29 ms. Seine kausale Stützlänge umfasst 58 ms. Verwechseln Sie diese Größen nicht: Die Anlaufgültigkeit hängt von fehlender Historie über die gesamte Stützlänge ab, die Gruppenlaufzeit beschreibt die Phasenbeziehung. Im Versuch wich der mit Nullzustand gestartete Ausgang im Anlauf um bis zu etwa 1,00524 von einem hypothetisch unbegrenzt laufenden verzögerten 50-Hz-Sinus ab. Schließen Sie kontaminierte Anlauffenster aus oder liefern Sie geprüfte Historie; ein Nullzustand ist eine Annahme, keine beobachtete Sensorhistorie.
Bewahren Sie sowohl die repräsentierte Signalzeit als auch den Verfügbarkeitszeitpunkt auf. Das Abziehen der Gruppenlaufzeit vom Zeitstempel macht das Ergebnis nicht früher verfügbar. Pufferung, Transport, Berechnung und Merkmalsfenster verursachen zusätzliche Kosten. Bei einem IIR stellt sosfilt Anfangs- und Endzustände kaskadierter Abschnitte zweiter Ordnung bereit. Anders als beim symmetrischen FIR ist dessen Laufzeit im Allgemeinen frequenzabhängig. Diese Alternative wurde hier nicht vermessen.
Zeitfehler müssen Segmente entwerten, nicht Messwerte erfinden
Die Zeitprüfung des Versuchs weist einen gelöschten Messwert, eine Ratenänderung auf 1.800 Hz und eingebrachten Zeitstempeljitter zurück. Sie prüft aufeinanderfolgende Intervalle gegen 1/2000 s mit 1 ns absoluter und null relativer Toleranz; eine produktive Implementierung muss auch die Kontinuität zwischen Blöcken prüfen. Die strenge numerische Toleranz testet erzeugte Zeitstempel, keine universelle reale Anlagenuhr.
Leiten Sie produktive Toleranzen aus Abtasttakt und Zeitstempelauflösung ab. Prüfen Sie Quellsequenzen und Quellzeit statt Netzwerkankunftsabstände. Ordnen Sie nur innerhalb einer expliziten Regel um, weisen Sie doppelte oder rückwärts laufende Werte zurück und entscheiden Sie, wann eine Lücke das Segment beendet. Eine neue Abtastrate benötigt ein passendes Filter, eine neue Phasenzuordnung und einen versionierten Merkmalsvertrag. Übergeben Sie unregelmäßige Zeitstempel nicht stillschweigend an ein Verfahren für gleichmäßige Raster.
Interpolation ist eine eigene Modellierungsentscheidung mit Bandbreiten- und Fehlwertannahmen; unbekannte hochfrequente Information stellt sie nicht wieder her. Trennen Sie das von der Finalisierung bei verspäteten Sensordaten: Eine Watermark regelt, wann Beobachtungen ein Ergebnis noch ändern dürfen, nicht ob die Abtastung Frequenzinformation erhalten hat.
Freigabecheckliste für den Merkmalsvertrag
1. Fixieren Sie Ein- und Ausgangsraten, physikalisches Nutzband, Übergangsbereich, maximale Außerbandamplitude und Restfehlerbudget; archivieren Sie Nachweise zur Anti-Aliasing-Erfassung.
2. Versionieren Sie Koeffizientenarray, numerische Präzision, Implementierung und Frequenzgangtest. Trennen Sie Offline-Zentrierung von kausaler Filterung und definieren Sie Randfortsetzung, Anlaufausschluss und Wiederanlauf nach Lücken.
3. Persistieren Sie Filterzustand und globale Dezimationsphase zusammen mit dem Quelloffset. Prüfen Sie die Wiederherstellung gegen einen ununterbrochenen Lauf, bevor Sie Kontinuität nach Neustart behaupten.
4. Binden Sie Fensterdauer, Ausrichtung, Überlappung, Fensterfunktion, Einheiten, Merkmalsformel sowie Signal- und Verfügbarkeitszeit an denselben Vertrag. Das sechssekündige Rechteckfenster ist ein Versuch, keine Wartungsempfehlung.
5. Testen Sie Sperr- und Nutzbandkanten, Blockgrenzen, Anlauf, Lücken, Taktjitter, Ratenänderungen und Sensorwechsel. Ausgeführt wurden synthetische Blockkontinuität, Filterrücksetzung als Negativkontrolle und Zurückweisung von Zeitfehlern. Reales ADC-Verhalten, Absturzwiederherstellung und Festkommaeinsatz benötigen weiterhin Integrationstests.
6. Erzeugen Sie Trainingsmerkmale über denselben kausalen Pfad wie im Betrieb. Befolgen Sie den verfügbarkeitsbezogenen Wartungs-Backtest: Zentrierte Filterung darf keine zukünftigen Beobachtungen in eine angebliche Online-Entscheidung einschleusen.
Was dieses Ergebnis leisten kann
Filterung tauscht Speicherbedarf und nachgelagerten Rechenaufwand gegen verlorene Bandbreite, Berechnungskosten und Verzögerung. Kürzere Filter oder engere Übergänge verändern diese Abwägung; eine glatte Kurve belegt keine geeignete Wahl. Der synthetische Versuch beweist weder Lagerfehlergenauigkeit noch vermiedene Stillstandszeit. Halten Sie die Inferenz beratend und außerhalb des Sicherheitssteuerungspfads.
Bringen Sie für eine Implementierungsprüfung die Erfassungsspezifikation eines Sensors, eine zusammenhängende Rohzeitreihe, Quellzeitstempel und die geplante Merkmalsdefinition mit. Ich unterstütze Sie dabei, daraus einen versionierten Resampling-Vertrag, ausführbare Ablehnungstests und ein Latenzbudget abzuleiten. Zuerst ist zu entscheiden, ob der langsamere Datenstrom die physikalischen Nachweise für Ihre Wartungsfrage noch enthält.


