Ich muss ein Signal hochpassfiltern, und mein Design schneidet es einfach nicht. Der Teil, der es schwierig macht, ist, dass ich Verzögerungen nicht tolerieren kann. Ich sample mit 20 Hz, das Signal, das mir wichtig ist, ist 1/12 bis 1/4 Hz, und mein System muss so echtzeitfähig wie möglich sein (eine Verzögerung von 2 Sekunden für die Signalverarbeitung ist ungefähr alles, was ich bewältigen kann). Die Eckfrequenz ist flexibel, muss aber im ungünstigsten Fall unter 1/10 Hz liegen.
Ich habe einen IIR-ähnlichen Tiefpassfilter wie diesen verwendet:
signal_low_freq(n) = (signal_low_freq(n-1)*(filter_constant - 1) + (sensor_data(n))) /filter_constant;
signal_ac(n) = sensor_data(n) - signal_low_freq(n);
wobei filter_constant = 165.
Es hat eine geringe Latenz, führt aber auch zu einer großen Menge an phasenbezogenen Fehlern (ich habe es bei etwa 100 Verzögerungswerten gemessen).
Ich habe Matlabs fdatool verwendet und kann mit einem FIR-Filter hoher Ordnung großartige Ergebnisse erzielen, aber das ist offensichtlich viel zu viel Verzögerung.
Hat jemand eine gute Lösung für dieses DSP-Problem?
Hinweis: Im Audiobereich ist es analog zum Sampling bei 48 kHz und Hochpassfilterung mit einer Eckfrequenz irgendwo zwischen 150 Hz und 240 Hz.
Ich fürchte, Sie stoßen auf eine grundlegende Einschränkung realer, kausaler physikalischer Systeme. Sie fragen nach einem Filter, der zwischen Signalen mit Perioden von 12 bis 16 Sekunden unterscheiden kann, aber nur ein 2-Sekunden-Segment (1/6 bis 1/8 der Periode) der Wellenform "betrachten" kann fraglich. Unter diesen Umständen ist es einfach nicht möglich, keine Phasenverschiebung und eine geringe Verzögerung zu erzielen.
Können Sie etwas mehr Kontext für dieses Problem liefern? Welcher Art sind die Signale und warum ist eine so geringe Verarbeitungslatenz erforderlich?
Scott Seidmann
Bob