Ich mache eine Leiterplatte, die ein Signal mit einem Frequenzband von 3-50 Hz und Spitzen von bis zu 10 uV empfängt. Ich habe geeignete analoge LP- und HP-Filter (Bandpass) implementiert und verwende einen isolierten 16-Bit-ADC, um die Daten an einen Computer zu senden.
Ich verwende Python, um die Zeilen (Derial-Kommunikation) vom ADC (der als Slave zu meiner MCU fungiert) zu lesen. Das Systemdiagramm würde ungefähr so aussehen:
Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan
Wenn ich meine Daten erhalte und eine Echtzeit-FFT durchführe (da es sich um ein nicht stationäres Signal handelt), ist ein offensichtliches Merkmal eine Spitze bei 50 Hz (das Netz hat in Großbritannien eine Frequenz von 50 Hz) und dafür kann ich Fügen Sie einen Kerbfilter hinzu, um die 50-Hz-Komponente zu unterdrücken, aber das würde zusätzliche Kosten und Zeit für die Implementierung bedeuten.
Ich habe nicht viel Erfahrung mit digitaler Filterung, aber ich dachte, anstatt einen hardwarebasierten analogen Filter zu implementieren, ist es möglich, das folgende Verfahren durchzuführen:
Wird die Zeitverzögerung für diese Art der Filterung nur die Anzahl der Maschinenzyklen sein, die der Computer durchläuft, um diese Aufgabe auszuführen?
Wenn dies plausibel ist, ist etwas falsch daran, das Signal nur zu verstärken und die hochfrequenten Geräusche und Spitzen mit einem passiven Filter zu beseitigen und alle erwähnten Filter (Notch, LP und HP) im Computer mit Python oder einem anderen durchzuführen Software-Methodik für diese Angelegenheit?
Ist es in Bezug auf die Auflösung richtig anzunehmen, dass die endgültige Signalauflösung, die analysiert wird, die Multiplikation der Auflösung des ADC mit der Auflösung der digitalen Filterung ist, da in meinem Code Werte als 32-Bit-Gleitkommazahlen gespeichert werden?
Wenn Ihr gewünschtes Band 3 bis 50 Hz beträgt, ist es nicht möglich, 50 Hz mit einem praktischen Filter auszublenden, ohne etwas vom oberen Ende Ihres Bandes zu verlieren.
Können Sie einen digitalen Filter verwenden oder müssen Sie einen analogen verwenden? Es hängt vom Signal-Rausch-Verhältnis am ADC ab. Wenn Ihre 50-Hz-Störung so hoch ist, dass Sie die Verstärkung vor dem ADC so weit herunterdrehen, dass Ihr Signal verrauscht wird, benötigen Sie davor einen analogen Filter. Wenn Sie sowohl Interferenzen als auch Signale mit einer angemessenen Verstärkung erhalten, ohne den ADC zu überlasten, können Sie nach dem ADC einen digitalen Filter verwenden.
Es gibt eine trivial einfache Implementierung einer 50-Hz-Kerbe, die Sie entweder in der MCU oder in Python anwenden können, es besteht keine Notwendigkeit, eine relativ teure FFT-Operation zu verwenden. Wenn Sie Samples über einen Zeitraum von 20 ms addieren, werden 50 Hz ausgeklinkt. Es besteht keine Notwendigkeit, alle diese Hinzufügungen für jedes Ausgangsmuster vorzunehmen. Es ist effizienter, ein 20 ms langes Schieberegister und einen Akkumulator zu haben, den aktuellen Abtastwert in den Akkumulator zu addieren und den Abtastwert von vor 20 ms zu subtrahieren.
Dieser einfache Filter gibt Ihnen einen fallenden Frequenzgang über Ihr Durchlassband. Muss es vor Ihrer Analyse korrigiert werden? Es hängt davon ab, was ist Ihre Analyse, was ist die Spezifikation für die Flachheit über das Band? Die Korrektur könnte von dem einfachen/schwergängigen Prozess reichen, der Antwort mit ein paar Fingertipps ein wenig Steigung hinzuzufügen, bis hin zum Entwerfen eines geeigneten Notch-Filters. Die Komplexität dieser Aufgabe hängt von Ihrer Abtastrate, Ihrer Flachheit und jeder Gruppenverzögerungsspezifikation ab. IIR-Filter sind gut, wenn etwas Oversampling und keine Gruppenverzögerungsspezifikation vorhanden ist.
Sollten Sie am Ende einen FIR-Filter haben, der mehr als ein Dutzend Taps lang ist, kann es angebracht sein, die Fourrier-Faltung zu verwenden, um ihn schneller zu implementieren als den naiveren Multiplikations-Akkumulations-Ansatz.
Sie müssen eine aktive Schutztechnik verwenden, um CM 50 Hz Ingress zu eliminieren und nicht so gute CMRR wie INA, aber gut genug für EEG zu erreichen.
Sie nennen dies Right Leg Guard oder fahren RLD. Um CM-Signalrückkopplung zum aktiven Körper GND zu verwenden, so dass 50-Hz-Rauschen an RLD zurückgekoppelt wird.
Wird die Zeitverzögerung für diese Art der Filterung nur die Anzahl der Maschinenzyklen sein, die der Computer durchläuft, um diese Aufgabe auszuführen?
Ja, es wird eine Verzögerung hinzufügen. Es hängt wirklich davon ab, ob die Daten in Echtzeit (mit minimaler Verzögerung) gefiltert werden müssen. Bei digitaler Echtzeitfilterung hängt die Verzögerung von der Geschwindigkeit des Prozessors ab, davon, wie lange der Prozessor für Multiplikations- und Additionsoperationen benötigt, ob der Prozessor Speicher für die FFT abrufen muss (Sie möchten, dass sich die FFT im Prozessor-Cache befindet). machen Sie die Verzögerung so klein wie möglich, wenn dies nicht der Fall ist, geht der Prozessor zum Speicher, der das Abrufen um mehrere Taktzyklen verzögern kann). Möglicherweise möchten Sie auch einen FIR- oder IIR-Bandpassfilter in Betracht ziehen, der für eine ähnliche Filterung viel weniger Rechenressourcen benötigen kann.
Wenn dies plausibel ist, ist etwas falsch daran, das Signal nur zu verstärken und die hochfrequenten Geräusche und Spitzen mit einem passiven Filter zu beseitigen und alle erwähnten Filter (Notch, LP und HP) im Computer mit Python oder einem anderen durchzuführen Software-Methodik für diese Angelegenheit?
Die Nachbearbeitung der Daten ist mit digitalen Filtern ziemlich einfach, das Schöne an der digitalen Filterung ist, dass sie über Software konfigurierbar ist. Die analoge Filterung ist nicht so konfigurierbar. Die eigentliche Frage ist: Müssen die Daten in Echtzeit gefiltert werden? (Für Regelkreise oder andere Rückkopplungen sind Verzögerungen schlecht, sodass digitales Filtern ein Problem sein kann). Ein Anti-Alasing-Filter vor einem ADC ist eine übliche Methode, um Rauschen zu reduzieren, bevor es an einen Computer gesendet wird.
Ist es in Bezug auf die Auflösung richtig anzunehmen, dass die endgültige Signalauflösung, die analysiert wird, die Multiplikation der Auflösung des ADC mit der Auflösung der digitalen Filterung ist, da in meinem Code Werte als 32-Bit-Gleitkommazahlen gespeichert werden?
Digitale Filter können Quantisierungsrauschen einführen, die Berechnung dieses Rauschens ist eine ganze Wissenschaft für sich. Abhängig von den verfügbaren Rechenressourcen kann die Umwandlung in Doubles oder Floats das Quantisierungsrauschen reduzieren.
Benutzer253751
Pangus
Benutzer1850479
mkeith
Sadat Rafi