Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
20.07.2007, 08:08 (Dieser Beitrag wurde zuletzt bearbeitet: 08.12.2007 15:32 von jg.)
' schrieb:Ich möchte die Übertragungsfunktion des Preemphasefilters per frequency sampling möglichst gut approximieren. (hätte ich wohl früher sagen soll/müssen). Laut meinem Vorgänger an diesem Projekt ist diese Approximation mit 21 Koeffizienten recht gut.
Das hat Dein Vorgänger zweifellos recht. Man kann nämlich jedes IIR Filter auch mit FIR-Filtern approximieren - theoretisch zwar nur mit unendlich vielen Koeffizienten, aber wir wollen dem Vorgänger mal glauben, daß hier mit 21 Koeffizienten eine recht gute Approximation erreicht wird. Was er Dir aber nicht verraten hat ist doch: Mit einem IIR-Filter 1.Ordnung wird der Hochpass nicht approximiert, sondern exakt realisiert.
Der Hochpass ist so einfach, daß man ihn auch selbst als kleines VI basteln könnte. Hier mal ein Lösung mit einem fertigen Filter (Ich habe absichtlich die Punkt-zu Punkt-Type gewählt, wenn es online gemacht wird wäre das wichtig)
Anmerkung: Für Ordnung=1 verschwinden die Unterschiede zwischen Butterworth, Bessel usw., es ist egal welche Filtertype man nimmt.
Zitat:Die Funktion sollte im Frequenzbereich von 0 - 15kHz (grob UKW-Übertragungbereich) recht gut passen.
Den Filter interessiert nicht der Frequenzbereich, sondern einzig die Abtastrate. Übliche Raten sind z.B. 44.1kHz für CD-Qualität oder 48kHz für DVD-Audio. Ob beim analogen ausgestrahlten UKW-Rundung für die digitale Verarbeitung intern ein Abtastrate genormt ist weiß ich nicht. Die allgemeine Tendenz geht jedenfalls weg von 44.1KHz hin zu 48 oder sogar 96/192kHz.
Edit: Ich habe mich durch den Untertitel "Eigentlich nur simples Hochpassfilter" in die Irre führen lassen. Ein Preemphasis-Filter ist aber kein reines Hochpassfilter, welches alle Frequenzen unterhalb seiner Grenzfrequenz abschneidet, sondern ein Filter, welches die Frequenzen bis dahin durchläßt und oberhalb der Grenzfrequenz verstärkt. Das VI ist also so nicht zu verwenden. Korrektur folgt..
(VI LV 8.2)
Anzeige
21.07.2007, 10:21 (Dieser Beitrag wurde zuletzt bearbeitet: 08.12.2007 15:32 von jg.)
Bei der Preemphasis mit dem Frequenzgang
F(f) = 1 + T*s
handelt es sich um die Addition der Originlfunktion mit der mit T multiplizierten differenzierten Funktion - Eigentlich ist das ganz einfach zu realisieren.
(Anmerkung: Die Differentiation bis zu unendlich hohen Frequenzen ist allerdings nur rein theoretisch möglich, z.B mit einem idealen Operationsverstärker, und praktisch auch nicht anzustreben, so daß man sich in der Praxis immer für eine Preemphasis-Funktion das Types F(f) = (1 + T*s)/(1 + T2*s) entscheiden würde (T2<T). Das bleibt hier unberücksichtigt)
Ich habe mal 2 verschiedene, aber funktional identische Filter gebaut (deshalb sieht man auch nur einen Plot).
Die Filterkoeffizienten wurden so bestimmt: Der (eine und einzige) Koeffizient ( =T/fs) des selbstgebastelten Filters entstand durch Überlegung und anschließende Verifikation mit einer Rampenfunktion, bei der man die Ausgangsfunktion leicht vorhersagen konnte. Die beiden Vorwärts-Koeffizienten des FIR-Filters (Es steht IIR drauf, ist es aber nicht, weil die Rückwärtskoeffizienten fehlen) wurden schlichtweg probiert, so daß die beiden Kurven übereinstimmen.
Das Ergebnis der Probierkunst war: A0 = T/fs +1; A1 = -T/fs.
Hallo!
Vielen vielen Dank für die Antworten. Ich war das Wochenende außer Hause, deswegen erst jetzt die Antwort. (Macht aber gute Laune, an die Arbeit zu gehen und sowas zu lesen :-) )
Ich hole mir erstmal was zu essen und werde es danach mal durcharbeiten (habe es gerade erst nur kurz überflogen).
' schrieb:Hallo!
Vielen vielen Dank für die Antworten. Ich war das Wochenende außer Hause, deswegen erst jetzt die Antwort. (Macht aber gute Laune, an die Arbeit zu gehen und sowas zu lesen :-) )
Ich hole mir erstmal was zu essen und werde es danach mal durcharbeiten (habe es gerade erst nur kurz überflogen).
Zitat:Edit: Ich habe mich durch den Untertitel "Eigentlich nur simples Hochpassfilter" in die Irre führen lassen. Ein Preemphasis-Filter ist aber kein reines Hochpassfilter, welches alle Frequenzen unterhalb seiner Grenzfrequenz abschneidet, sondern ein Filter, welches die Frequenzen bis dahin durchläßt und oberhalb der Grenzfrequenz verstärkt. Das VI ist also so nicht zu verwenden. Korrektur folgt..
Stimmt. Wodurch lässt sich der Unterschied zwischen einem "normalen" Hochpass und meinem "gesuchten" Hochpass bei der Realisierung explizit erkennen?
Arbeiten tu ich mit einer Abtastrate von 300kHz (schon noch etwas höher als bei SACD / DVD-A...). Das sich der Filter auch nur dafür interessiert ist klar. Für mich wären aber Abweichungen bei mehr als 20kHz ziemlich egal. Gut, beim frequency sampling werden äquidistante Schritte gewählt, insofern dürfte sich das erledigt haben.
' schrieb:Bei der Preemphasis mit dem Frequenzgang
F(f) = 1 + T*s
handelt es sich um die Addition der Originlfunktion mit der mit T multiplizierten differenzierten Funktion - Eigentlich ist das ganz einfach zu realisieren.
Ich steh da grad etwas auf dem Schlauch. Es macht für mich schon Sinn, aber wie kommt man da genau drauf?
Das man nur einen Koeffizienten braucht, leuchtet mir ein, da am Ende auch nur ein Filter erster Ordnung entstehen soll. Es sollte digital ja auch nicht sehr viel komplizierter als im Analogen sein.
Das VI kann ich leider nicht öffnen, da ich nur LV7.1 hab. Ich hab es mir dank der Screenshots nachgebaut, allerdings nicht ganz das gleiche Ergebnis erzielt.
Zu deinem Graphen habe ich noch eine Frage: ich denke mal, dass die x-Achse in kHz skaliert ist. Aber was ist die Einheit der y-Achse? dB können es nicht sein, sonst müsste man bei grob 3kHz den +3dB haben.
Und wie kann man die Koeffizienten so gut "raten"? Da muss doch auch ein System hinter stecken.
(VI LV 7.1)
25.07.2007, 08:44 (Dieser Beitrag wurde zuletzt bearbeitet: 08.12.2007 15:33 von jg.)
' schrieb:Stimmt. Wodurch lässt sich der Unterschied zwischen einem "normalen" Hochpass und meinem "gesuchten" Hochpass bei der Realisierung explizit erkennen?
Das ist ja anhand der Frequenzgang-Kennlinie offensictlich, beim HP ist es
F(s) = T*s/(1+T*s), bei der Preemphasis ist es F(s) = 1+T*s. (Wobei, wie erwähnt, letztere Funktion als passiver analoger Vierpol so nicht realisierbar ist, da Grad des Zählerpolynoms nicht höher als Grad des Nennerpolynoms sein darf))
Zitat:Zu deinem Graphen habe ich noch eine Frage: ich denke mal, dass die x-Achse in kHz skaliert ist. Aber was ist die Einheit der y-Achse? dB können es nicht sein, sonst müsste man bei grob 3kHz den +3dB haben.
Und wie kann man die Koeffizienten so gut "raten"? Da muss doch auch ein System hinter stecken.
Habe Dein VI mit lv7.1 bearbeitet, aber es lief ja im Prinzip schon. Daß ich physikalische Einheiten verwende, ist nur so ein Hobby von mir, mußt Du nicht übernehmen.
Y-Achse war bei mir logarithmisch, habe jetzt je ein Diag log und in db gemacht.
Filterkoeffizienten:
Die normale Vorgehensweise ist: Gegeben Frequenzgang (analog) F(f) = 1 + Ts, bilineare Transformation liefert die V/R Koeffizienten des entsprechenden digitalen Filters. Vielleicht kann das mal jemand exerzieren, ich habe es nicht gut drauf, deshalb habe ich ein bissel geraten. Es gibt aber auch Programme wie z.B "Filter Solutions", die einem diese Arbeit abnehmen.
*ouch* Das mit der dB-Umrechnung war mal eine richtig peinliche Frage, das werde ich sicher nie mehr vergessen...
Vielen Dank für das Bearbeiten. Ich werde es heute wohl mal ins Gesamt-VI einbinden und dann sicherlich noch weitere Fragen haben.
Welche der Implementierungen des Filters ist eigentlich schneller? Oder macht das keinen großen Unterschied mehr? Das VI ist schon ohne Preemphase langsam genug, da möchte ich nach Möglichkeit nicht noch eine weitere Bremse einbauen.
' schrieb:Welche der Implementierungen des Filters ist eigentlich schneller? Oder macht das keinen großen Unterschied mehr? Das VI ist schon ohne Preemphase langsam genug, da möchte ich nach Möglichkeit nicht noch eine weitere Bremse einbauen.
Fourier und Filterung laufen schneller als man gucken kann, eine Bremse ist das in keinem Fall. Du mußt nur darauf achten, daß die Anzahl der Samples 2^n ist, da sonst statt FFT die wesentlich langsamere FT benutzt wird. Aber FFT wird ja hier nur zur Frequenzgang-Anzeige verwendet, im echten Programm brauchst Du es wohl gar nicht
Wenn Du die Filterung online machst, mußt Du die Filterfunktionen durch die entsprechenden Punkt-zu-Punkt-VIs ersetzen, die sind natürlich noch im ein Vielfaches schneller.
' schrieb:Wenn Du die Filterung online machst, mußt Du die Filterfunktionen durch die entsprechenden Punkt-zu-Punkt-VIs ersetzen, die sind natürlich noch im ein Vielfaches schneller.
Ich werde es wohl ziemlich genau 1zu1 übernehmen (natürlich im fertigen Programm dann ohne Ausgabe), da die Musikdatei, die bearbeitet wird, immer blockweise eingelesen und verarbeitet wird.
Wann würde man eine online-Filterung durchführen?
25.07.2007, 16:49 (Dieser Beitrag wurde zuletzt bearbeitet: 25.07.2007 16:54 von Lucki.)
' schrieb:Wann würde man eine online-Filterung durchführen?
Die erfassten Daten werden dann nicht erst in einem Array gespeichert und dann gefiltert, sondern jeder Einzelwert wird sofort dem Filter zugeführt und gefiltert wieder ausgegeben. Man kann selbstverständlich mit den Point-To-Point-Funktionen unter Verwendung einer For-Schliefe auch Arrays filtern.
Ach so, die Frage hieß ja: Wann? Es könnte doch z.B. sein, daß ein Sprachsignal nicht gespeichert werden soll, sondern in gefilterter Form sofort wieder ausgegeben werden soll. Und bei allen Steuer- und Regelprozessen müssen ja die Daten sowieso so verarbeitet werden wie sie ankommen.