Forum: Digitale Signalverarbeitung / DSP / Machine Learning DSP C2833x Filter mit Matlab programmieren?


von Andre R. (anra)


Lesenswert?

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

von Andre R. (anra)


Lesenswert?

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.

von Kalman (Gast)


Lesenswert?

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.

von Kalman (Gast)


Lesenswert?

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 ?

von Detlef _. (detlef_a)


Lesenswert?

>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

von Andre R. (anra)


Lesenswert?

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)

von Detlef _. (detlef_a)


Lesenswert?

>>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

von Andre R. (anra)


Lesenswert?

CIC kenne ich leider gar nicht. Was meinst du damit?

von Detlef _. (detlef_a)


Lesenswert?

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

von Andre R. (anra)


Lesenswert?

Danke,

meld mich wieder wenn ich etwas ausprobiert habe und poste das dann.

von Andre R. (anra)


Lesenswert?

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?

von Detlef _. (detlef_a)


Lesenswert?

>>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

von Andre R. (anra)


Lesenswert?

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.

von Detlef _. (detlef_a)


Lesenswert?

Oh, ich glaube nicht, daß man das in einer einzigen Filterstruktur und 
mit einer einzelnen Vorgehensweise implementieren kann.

Cheers
Detlef

von Andre R. (anra)


Lesenswert?

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.

von Detlef _. (detlef_a)


Lesenswert?

>>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
Noch kein Account? Hier anmelden.