Hallo zusammen, ich versuche gerade einen Filter in MATLAB (bzw. Scilab) zu entwerfen. Die Koeffizienten des Filters müssen auch noch im DSP auf Grundlage der Eingaben an der Benutzerschnitstelle berechnet werden. Wenn ich nun ein File in Matlab schreibe, wie kann man das zu C konvertieren und anschließend dann im DSP verwenden? Was muss ich beachten? Hat jemand Erfahrung mit dem Befehl cheby1? Ist leider auch mein erster DSP, deswegen können die Fragen vielleicht auch zu simpel sein. Danke im voraus für die Antwort
Cheby1 liefert bei mir andere Koeefizienten als das fdatool, wie kommts? hier mein Code fs=2e6; % fs Abtastfrequenz (sample) in Hz n=4; % Filterordnung Rp=0.2; % Rippel im Durchlassbereich in dB [b,a]=cheby1(n,Rp,200/fs,'low') fvtool(b,a) impz(b,a,10000) Zudem scheint das ganze so noch instabil zu sein. Im fdatool zeigt er an es sei stabil und berechent andere Koeffizienten. Erkenne keinen Unterschied in der Eingabe.
Hi, schau Dir einmal die Koeffizienten an, die Du da berechnet hast. Das Ganze spielt sich im Bereich von 10^-13 ab. Das Filter wird dann nicht durch den Entwurf, sondern numerisch instabil. Auf dem DSP implementiert läuft dann gar nichts mehr. Das Problem liegt an der Wahl der extrem niedrigen Grenzfrequenz bei der Abtastrate von 2 MHz. Die Grenzferquenz muss normiert auf die Nyquistfrequenz (fs/2) bezogen, eingegeben werden. Ein Tschebyscheff I, 4. Ordnung lässt sich auch noch sehr gut per Hand berechnen und programmieren. Da kann ich nur Oppenheim / Schaffer empfehlen. Tools wie MAtlab führen immer sehr schnell zu einem Ergebnis, aber noch lange nicht zum Erfolg.
Hallo, das Filter auch numerisch stabil. Ich bin Deinem impz Befehl auf den Leim gegangen. Man muss die Impulsantwort über einen wesentlich längeren Zeitraum anschauen. Aber es arbeitet im Grenzbereich. Bist Du sicher, dass Du bei 2 MHz Abtastrate eine Grenzfrequenz von 100 Hz benötigst ?
>Hat jemand Erfahrung mit dem Befehl cheby1?
Habe ich, der Befehl ist supertoll.
Die Pole sind 10e-3 vom Einheitskreis weg. Die Nullen liegen 10e-7 oder
so daneben. Wie Rudolf schon richtig sagte ist das Problem das
Verhältnis der Abtastfrequenz zur Grenzfrequenz, 100Hz bei 1Mhz
Abtastrate ist absoluter bullshit, entweder ist die Abtastrate falsch
gewählt oder die Grenzfrequenz. Auf jeden Fall kriegt man son Filter
nicht vernünftig zum fliegen, schon ganznicht auf DSP.
Was willse denn machen?
Cheers
Detlef
Ok, ich habe kein triviales Problem. Also ich brauche ein Filter durchstimmbar von 10 Hz bis ca. 800 kHz. Es sollen Daten ausgewertet werden bis zu einer Frequenz von maximal 1 MHz. Nyquistkriterium sagt mir dann ich brauche eine Abtastfrequenz von 2 MHz. Der Filter soll so ausgelegt sein, das bei der doppelten Frequenz etwa -25dB gedämpft wird. Muss ich um in dem Bereich zwischen 10 Hz und 1 kHz zu filtern die Abtastrate umsetzen damit es besser wird? Ich hab das bei Bildern einmal über Pixeldropping gemacht. Dann könnte ich die Abtastfrequenz ja reduzieren und nach dem Filtern wieder hochsetzen. Wobei ich noch nicht weiß wie ich die WErte dazwischen interpolieren sollte. Habt Ihr eine bessere Idee oder einen anderen Ansatz Vielen Dank für Eure erste Hilfe ;o)
>>Muss ich um in dem Bereich zwischen 10 Hz und 1 kHz zu filtern die >>Abtastrate umsetzen damit es besser wird? Ja, würde ich so machen, vielleicht Faktor 4096 dezimieren, filtern, und dann wieder Faktor 4096 hochinterpolieren. >>Wobei ich noch nicht weiß wie ich die WErte dazwischen interpolieren >>sollte. Das würde ich mal mit nem CIC Filter probieren, die sind sehr einfach und rechenextensiv zu implementieren. Ebenfalls CIC zum dezimieren der Eingangswerte, also nicht einfach wegwerfen sondern nutzen. Auf der dezimierten Abtastrate 2Mhz/4096 nen cheby1 oder so laufen lassen. Der plot scheint mir machbar, ist auch alles vorab in Matlab gut simulierbar. Cheers Detlef
CIC kenne ich leider gar nicht. Was meinst du damit?
Cascaded integrator comb. War hier auch schon öfter Thema. Standardverfahren zum dezimieren und interpolieren, sehr gut geeignet für DSPs und FPGAs. http://de.wikipedia.org/wiki/Cascaded-Integrator-Comb_Filter http://www.xilinx.com/ipcenter/catalog/logicore/docs/cic.pdf Cheers Detlef
Danke, meld mich wieder wenn ich etwas ausprobiert habe und poste das dann.
Nun fällt mir beim umsetzen ein weiteres Problem auf. Ich muss ja den Filter auch als HP realisieren. Beispielsweise alle Frequenzen oberhalb 100Hz durchlassen. Wenn ich nun eine Abtastratenumsetzung machen, dann verliere ich doch alle daten oberhalb der Umsetzung. Beispiel: Abtastfrequenz 2MHz, wenn ich nun auf 4KHz reduziere, dann verliere ich die Daten zwischen 1MHz und 2kHz. Wie soll ich die nachher wieder holen? Oder gibts für HP andere verfahren die frequenzen unterhalb einer bestimmten Frequenz wegzufiltern?
>>Wenn ich nun eine Abtastratenumsetzung machen, dann verliere ich doch >>alle daten oberhalb der Umsetzung. So ist es. >>Wie soll ich die nachher wieder holen? Die sind wechgefiltert. >Oder gibts für HP andere verfahren die frequenzen unterhalb einer >>bestimmten Frequenz wegzufiltern? Häh? Was willse eigentlich? Hatte ich übrigens schon mal gefragt. Cheers Detlef
Also ich brauche einen Filter HP, BP, BS, TP einstellbar zwischen 10 Hz und ca 800 kHz Die Daten werden mit 2 MHz abgetastet eine Sekunde lang, sollen gefiltert und wieder ausgegeben werden. Am besten alles in Echtzeit. Das ganze gibts analog und soll nun digitalisiert werden und kommt anschließend in ein Therapiegerät rein.
Oh, ich glaube nicht, daß man das in einer einzigen Filterstruktur und mit einer einzelnen Vorgehensweise implementieren kann. Cheers Detlef
Na ja, vier verschiedene Filter würden es auch tun ;o) ich versuch nun erst einmal einen TP zu implementieren ohne Abtastratenumsetzung und sehe mir das Ergebnis auf dem DSP mal an. Parallel simulier ich das alles mal auf Matlab. Ich halt Euch auf dem laufenden.
>>vier verschiedene Filter
Genau, FIR Filter! Just kidding.
Cheers
Detlef
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.