K
Nö, Boost hat sowas sicherlich nicht. Jedenfalls nicht, dass ich wüsste. Das ist schon etwas sehr Spezielles aus dem Signalverarbeitungsbereich.
Ich würde das folgendermaßen machen
- Impulsantwort des inversen Filters bestimmen
- Dein Messsignal mit dieser Impulsantwort falten, ggf per "Schnelle Faltung" (siehe dspguide.com für die schnelle FFT-basierte Faltung).
Die Impulsantwort des inversen Filters bekommst du, indem du deine IRF mit Nullen links und rechts auffüllst (zero adding) und entsprechend so zyklisch verschiebst, dass der Nullpunkt der Zeitachse dem Element mit Index 0 entspricht (also das erste), dann darauf eine FFT machst, dann vom Ergebnis komponentenweise die Kehrwerte bestimmst, dann darauf die iFFT anwendest, dann es wieder so zyklisch zurückschiebst, dass der Nullpunkt in der Mitte liegt und dann bei dem, was da rauskommt noch eine nette Fensterfunktion draufmultiplizierst.
Das mit dem Zero Padding ist einigermaßen wichtig, weil du damit den sogenannten "wrap-around"-Fehler vermeidest. Am Ende ist wahrscheinlich nur der mittlere Ausschnitt einigermaßen von Interesse, daher das Fenstern.
Hinterher am besten "die Probe" machen und die IRF mit der neu berechneten Impulsantwort für den inversen Filter falten und gucken, ob da auch etwas rauskommt, was genügend nah an einem "Unit-Impuls" liegt -- sozusagen a*b=1 wobei b das Inverse von a sein soll.
Wenn du dir die Beträge der FFT-Koeffizienten anguckst, kannst du damit auch die Konditionszahl berechnen, die zum äquivalenten Gleichungssystem gehört, welches dein Faltungsproblem auch lösen würde. Die Konditionszahl kann je nach IRF auch leider unendlich sein und zwar dann, wenn mindestens eine Frequenz durch die Faltung per IRF komplett gedämpft wird. Das kannst du natürlich nicht mehr wiederherstellen. Einmal die Amplitude mit 0 multipliziert und du kommst nicht mehr drauf, was die Amplitude vorher mal war, quasi.
Matlab oder Octave bietet sich für sowas eigentlich prima an. Da kann man dann erstmal ein bisschen rumspielen, sich Dinge plotten lassen, bevor man das dann in C++ gießt (wenn überhaupt).