Forum: Digitale Signalverarbeitung / DSP / Machine Learning FIR Filter Ergebnisse


von Michi (Gast)


Lesenswert?

Hallo ich habe einen FIR Bandpass Filter gebaut mit der Ordnung 8. Ich 
habe jetzt das Problem, wie interpretiere ich das Ergebniss? Ich gebe ja 
z:b. 256 Abtastwerte rein und diese werden dann durch die 
Filterkoeffizienten verändert.

Wie bekomme ich jetzt die Frequenz heraus aus den Ergebnissen des FIR 
Filters?

Ich hoffe ihr könnt mir helfen! Soll ich die Ergebnisse mittels FFT 
analysieren oder kann ich direkt herauslesen wie stark der 
Bandpassbereich ist, bei der Schwingung?

von Martin L. (Gast)


Lesenswert?

Hallo,

wenn Du einen Bandpass implementiert hast, dann weiß Du doch die 
Frequenz die er (aus-)filtert. Also miss die Leistung die hinten heraus 
kommt und mach, was Du damit auch immer anstellen willst.
Bei 8 Koeffizienten ist der Bandpass natürlich nicht besonders steil, so 
dann Du bei höheren Genauigkeitsanforderungen noch zusätzlich filtern 
oder via FFT analysieren musst.
Aber ohne Kristallkugel wird das nix.

Viele Grüße,
 Martin L.

von Mark B. (markbrandis)


Lesenswert?

Michi schrieb:
> Wie bekomme ich jetzt die Frequenz heraus aus den Ergebnissen des FIR
> Filters?

Mit einem Frequenzgenerator ein Sinussignal von 0 Hz bis fmax 
durch"wobbeln" und das Signal vom Filterausgang auf einem Oszilloskop 
betrachten. Da wo das Signal erscheint ist die untere Grenzfrequenz vom 
Filter, da wo es wieder verschwindet die obere. Oder meinst Du auf 
mathematischem Weg?

von Michi (Gast)


Lesenswert?

Also  mein Problem ist das:

Ich habe jetzt einen Ordnung 40 FIR Bandpass Filter genommen. Jetzt 
nehme ich die Abtastwerte jage sie durch den Filter am Ende kommen 
Zahlen raus. Wie interpretiere ich diese! Da ich ja bei 256Abtastwerte, 
256 Filterwerte bekomme.

Wenn ich jetzt zehn FIR Filter habe z.B. 128Hz - 132Hz, 136Hz - 
138Hz,...., 160Hz - 164Hz.

Woran erkenne ich jetzt welche Frequenz am stärksten Vertreten ist auf 
mathematischem Weg.

Ich danke für eure Hilfe

von Michi (Gast)


Lesenswert?

Kann mir keiner helfen? Ich wäre über jede Idee sehr dankbar.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Der Frequenzgang läßt sich zum Beispiel mit Scilab plotten, wenn die 
Filterkoeffizienten in die Übertragungsfunktion umgerechnet werden:

http://www.afs.enea.it/software/scilab/scilab-usermanual-directory/
> Signal Processing toolbox >frmag - magnitude of FIR and IIR filters

ähnliche Befehle sind "bode", "repfreq", "dbphi", "phasemag", je nachdem 
in welcher Form die Filterfunktion vorliegt.

von Michi (Gast)


Lesenswert?

Danke für die Hilfe. Habt ihr vlt irgendein Link an dem der Übergang vom 
Zeitdiskreten Signal, zu der Formel der Koeffizienten berechnung, Aufbau 
Filter bis hin zur Verarbeitung der Koeffizenten eines Bandpass Filters 
beschrieben ist?

Weil ich muss in meiner Thesis ergründen warum gerade der FIR Filter gut 
oder nicht so gut läuft!

Ich irre gerade noch zu sher herum und kann keine genauen Ergebnisse 
fördern. Ich bin reiner Informatiker hab mit ET nichts am Hut und 
deswegen brauch ich in dem Thema mehr Hilfestellng

von Alex (Gast)


Lesenswert?

Wenn du einen Filter mit einem Dirac-Impuls anregst erhälst du als 
Antwort ein Signal über welches du eine FFT machen kannst. Das Ergebnis 
ist der Frequenzgang des Filters.

Einfacher ist es einfach mit Matlab oder SciLab oder ... die Filter 
auszuwerten.

Beschreibe doch bitte einfach (ausführlich mit vernünftiger 
Satzstruktur) was du genau machen möchtest.

Hast du Eingangs- und Ausgangssignal gegeben und sollst das Filter 
rekonstruieren?

Oder ist es eine mathematische Spielerei? Wenn du festellten möchtest, 
welche Frequenz ein bestimmter Bandpass am besten passieren lässt dann 
leite doch einfach die Laplace-Transformierte seiner 
Übertragungsfunktion ab und suche dir das Maximum.

von Timo P. (fizkisxt)


Lesenswert?

Du schaust Dir einfach den Amplitudengang an in dem du deine berechneten 
Koeffizienten in die Formel der Z-Transformation einsetzt:

x(z)=sum von 0 bis 40 X(k)*z^(-k)

X(k) ist in diesem Fall dein Koeffizientenwert

Aus dieser Summenformel bildest Du durch mathematische Umformung deine 
Übertragungsfunktion G(z) und dann ersetzt Du für k = e^jwT um den 
Frequenzgang zu bilden. Danach bildest den Betrag von G(z) um auf deinen 
Amplitudengang zu kommen. Jetzt kannst Du den Amplitudengang betrachten 
in dem Du alle Frequenzen nacheinander einsetzt. Würde wie bereits 
gesagt, dass ganze mit Matlab berechnen. Es sei denn Du rechnest gerne 
von Hand.

Hoffe ich konnte dir weiterhelfen.

Viele Grüße, Timo

von Michi (Gast)


Lesenswert?

Okay entschuldigung für meine Satzstruktur. Weihnachten ging nicht ganz 
ohne Spuren an mir vorbei.

Also ich soll eine Software erstellen, die Noten in einem Audiosignal 
erkennt. Als Input habe ich Abtastwerte des Signals. Jetzt versuche ich 
zu erkennen welche Noten gespielt wurden. Dazu schneide ich zunächst die 
Noten aus dem Signal aus (Ich schaue wo eine Note anfängt und wo 
aufhört). Dann will ich diese Abschnitte mit ihren Abtastwerten 
analysieren. Ich fenstere diese Werte mit einem Hamming Fenster. Jetzt 
will ich hierbei die Bandpass Filter einsetzen:

z.B.

128 - 132HZ Note C
140 - 148Hz Note A
...

Ich würde gern wissen wie ich mittels Filter dies analysieren kann und 
erkennen welches Band am stärksten vertreten ist.

Ich habe diesen kompletten Ansatz funktionsfähig mit einer FFT 
umgesetzt. Jetzt soll ich mit Filterumsetzung ein Vergleich ziehen.

Ich hoffe ihr könnt mir helfen.

von Alex (Gast)


Lesenswert?

Ich würde dir zu diesem Thema Lektüre von Rick Lyons empfehlen. Die ist 
vergleichsweise leicht zu verstehen.

Eine FFT (bzw. allgemeiner DFT) ist im Prinzip auch nur ein n-faches 
Filter. Die einzelnen Lobes sind die Ausgangswerte der Filter.

Das mit dem Notenausschneiden würde ich bleiben lassen (Stichwort 
Filtereinschwingzeit). Warum nicht einfach die benötigten X Filter 
parallel auf dem Signal rechnen lassen. Ein zusätzlicher Algorithmus 
versucht die einzelnen Noten zu erkennen, bspw. indem er die Einhüllende 
berechnet und laut-leise Übergänge erkennt. In der Mitte eines 
"laut"-Intervalls schaut man sich dann einfach die Ausgangswerte der 
Filter an und nimmt den mit dem größten (dafür muss logischerweise noch 
eine RMS-Berechnung oder Ähnliches an den Filterausgang). Das klappt 
aber logischerweise nicht mit zusammenhängend gespielten Noten.
Dort könnte ich mir vorstellen, dass man in einem "laut"-Intervall 
zusätzlich auf Änderungen in den Filterausgangswerten achtet, um 
Notenwechsel zu erkennen.

Wie gehst du das Problem an?
Welche Software wird verwendet?
Warum muss es ein FIR-Filter sein?

von Michi (Gast)


Lesenswert?

Hey danke für die Antwort.

Also es muss kein FIR Filter genommen werden, es geht nur darum eine 
andere Technik als die FFT zu verwenden um Vergleichsergebnisse zu 
produzieren.
Welche würden sich hierfür eignen?

Ich programmiere die Software komplett selber, mit allen Einzelteilen. 
Die Software steht auch soweit und jetzt geht es daran zu optimieren und 
andere Wege zu finden.

Das Notentrennen hat mit der FFT schon sehr gut funktioniert, da ich die 
Note nach dem Schneiden künstlich gestreckt habe, sodass ich genügend 
Werte hatte zum analysieren.

Okay kann vlt jemand anhand eines einfachen Sinus mit 16 Abtastwerten 
mal ein Filter berechnen und mir dies schicken? Das ich eine 
Beispielrechnung habe.

Ich bin auch via ICQ erreichbar, falls jemand mir jemand da besser 
helfen kann, gebe ich ihm die Nummer.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.