Forum: Digitale Signalverarbeitung / DSP / Machine Learning Abtastfrequenz_IIR_ Filter


von Kik N. (electroprince)


Lesenswert?

Hey allerseits!

 Bin ein absoluter Anfänger in der Signalverarbeitung.

 Habe folgendes Problem.

 Ich möchte einen ungefilterten DAC-Sinussignal mit 800 Hz  von einem 
Board zum anderen schicken und ihn dort  mit dem ADC  einlesen und 
filtern.

 1. Ist da vorher ein analoges Antialiasing - Filter erforderlich ( z.B. 
ein aktiver Tiefpass), oder

 2. Könnte ich es digital machen und zwar das Signal mit  z.B. 2 MHz 
Abtastfrequenz  in meinem ADC abtasten und hinten einen IIR- Filter 
ebenfalls mit 2 MHz Abtastfrequenz anhängen um somit  die  Obertöne zur 
Grundfrequenz zu rauszufiltern??

 3. Wenn ja, sind dann die 2 MHz Abtastfrequenz  nicht zu viel für einen 
IIR-Filter?? Müsste  nicht dazwischen ein Dezimationsfilter kommen, der 
die hohe Abtastfrequenz des ADC in den kHz- Bereich senkt und erst dann 
den IIR-Filter einsetzen??

 Danke für allerlei konstruktive Hinweise!!

von J. S. (engineer) Benutzerseite


Lesenswert?

Kik Nik schrieb:

>  Ich möchte einen ungefilterten DAC-Sinussignal mit 800 Hz  von einem
> Board zum anderen schicken

"schicken" heisst bei Dir Informationstransport, also gfs auch digital, 
oder handelt es sich um eine physikalische Leitung, die hier analog ist?

von Kik N. (electroprince)


Lesenswert?

Ja richtig.

Es ist ein unbereinigtes Sinussignal aus einem PIN (DAC-Ausgang) über 
eine Leitung, zum anderen PIN geführt, wo es mit ADC eingelesen wird.

Unter unbereinigt meine ich den ungeglätteten Sinus eines DAC.

von Michael W. (Gast)


Lesenswert?

Das ungefilterte DAC hat in jedem Fall Spiegelfrequenzen, die von der 
originalen Samplingrate abhängen. Wie groß ist diese? Es kann nie 
schaden ein Signal überabzutasten, 2MHz erscheint mir bei 800Hz aber 
schon ein wenig übertrieben. Wozu so hoch? Ganz ohne Analogfilter wirst 
du nicht auskommen; wenn die Abtastrate des DAC nicht zu hoch ist, 
genügt dann ein einfaches Filter.
Du musst es aber in einem "Frequenzplan" einzeichnen, um eine Übersicht 
zu bekommen.

von Kik N. (electroprince)


Lesenswert?

Ich habe es "nur" mit 8kHz abgetastet und eben so einen Sinus möchte ins 
ADC schicken.

 2 MHz beim ADC habe ich deswegen gewählt, weil ich mir dachte das mein 
ungefilterter Sinus  recht viele Obertöne beinhaltet, die dann bei einer 
eventuellen Unterabtastung im ADC zu unerwünschten Aliasingeffekten 
führen würden.

Mein mit 8 kHz Abtastfrequenz generierter 800Hz-Sinus schaut trotzdem 
nicht "glatt" aus.

Ich habe bereits ein RC-Glied erster Ordnung vor dem ADC-Eingang 
vorgehängt  und der Sinus ist schon "glatter",  bevor er in den ADC 
kommt.

 Laut Matlab müsste ich aber für dieses 800Hz- Signal bei gegebener 8kHz 
Abtastfrequenz, A_pass = 3 dB und A_stop =30 dB und f_pass = 850 Hz wie 
f_stop = 1200 Hz  einen Chebyshevfilter vom Typ 2  5-ter Ordnung bauen, 
um das Signal richtig "sauber" zu machen.

Es bedeutet sicherlich einen mehr oder weniger aufwendigen (analogen) 
aktiven Tiefpass, den ich eben meiden möchte.

Wäre es möglich diese "Glättung" dann doch digital zu machen?

Das RC-Glied könnte ja bleiben.

von Michael A. (michiavelli)


Lesenswert?

Kik Nik schrieb:
> A_pass = 3 dB und A_stop =30 dB und f_pass = 850 Hz wie
> f_stop = 1200 Hz

Um das Abtasttheorem bei fa=8kHz einzuhalten, reicht fstop=4kHz. Dadurch 
wird die Flankensteilheit geringer, was den Filteraufwand reduziert. 
fpass=850Hz ist vllt. ein bisschen zu nah an 800Hz dran.

Den Rest kannst du dann in der Tat digital filtern. Ist billiger als 
einen aufwändigen Analogfilter zu realisieren.

von Sebastian W. (Gast)


Lesenswert?

Kik Nik schrieb:
> Mein mit 8 kHz Abtastfrequenz generierter 800Hz-Sinus schaut trotzdem
> nicht "glatt" aus.

Die "Stufigkeit" hängt nicht von der Abtastfrequenz ab, sondern von der 
Auflösung deines DAC, zumindest solange du das Abtasttheorem einhältst.

von Michael W. (Gast)


Lesenswert?

Dein DAC Signal hat Spiegelfrequenzen im Abstand von 8kHz.

Obertöne gibt es dann in Abständen +/- 800Hz zu 8Khz, 16kHz, 24kHz. usw.

Wenn es dir nur um die Rekonstruktion der 800Hz geht, könntest du die 
Abtastfrequenz auf 12kHz legen; Spiegelfrequenzen der Obertöne hast du 
dann erstmals bei +/- 4kHz. Du kannst dann ein FIR Filter bauen, mit 
einem Durchlassbereich 0-1kHz und einem Sperrbereich 3kHz-6kHz und einer 
Abschwächung von 40dB. Das ergäbe etwa 9 Taps. Bei 60dB 13 Taps.

von erfahrener Top-Entwickler (Gast)


Lesenswert?

Bei der Rechnung stimmt aber irgendwas nicht. Entweder hast Du dich bei 
den 800(0)Hz verschrieben oder Du meinst etwas anderes. Woher kommen 
denn die +/- 4kHz? Möchtest Du die Abstatfrequenz nur des DAC verändern 
oder komplett, also auch beim Aufnehmen?

von Michael W. (Gast)


Lesenswert?

erfahrener Top-Entwickler schrieb:
> Bei der Rechnung stimmt aber irgendwas nicht.

Du hast recht, das wäre Pfusch.

Bei f=2*12kHz liegt eine Spiegelfrequenz 24kHz = 3*8Khz, die bei 24kHz 
+/- 800Hz immerhin noch 3% beträgt. Da das Spektrum in beide Richtungen 
periodisch ist, muss man das noch mal 2 nehmen. Viel zu ungenau...

Ich habe mich vorher verrechnet und glaubte, die Abschwächung bei 24kHz 
läge schon im Promille Bereich.

Sorry für die Verwirrung.
Da bleibt wohl nichts anderes übrig, als ein Filter zu nehmen, und einen 
Kompromiss zwischen Steilheit und Abtastrate zu finden.

von Kik N. (electroprince)


Lesenswert?

Danke sehr für all eure hilfreichen Antworten!



Ich habe nicht verstanden, welche 12 kHz gemeint sind.

Die vom DAC, wo man den 800-Hz-Sinus generiert, oder die vom ADC, wo der 
Sinus eingelesen wird???

Mein ADC läuft derzeit mit 2 MHz, was auch das Maximum ist.

Wenn es um die Erhöhung der Abtastfrequenz des DAC geht, dann bin ich 
bei 8 kHz am Limit wegen einer GLCD-Anzeige, die den Prozessor auch noch 
sehr beansprucht.

 Zum Thema Spiegelfrequenzen weiß ich zu wenig (noch), jedenfalls lege 
ich  wie von euch vorgeschlagen f_stop auf 4 kHz und erhöhe den 
Durchlassbereich auf f_pass = 1 kHz um zumindest die Filterordnung zu 
drücken. Die Abtastfrequenz des DAC muss bei 8kHz bleiben.

 Zur Filterwahl schlägt jemand von euch ein FIR-Filter vor. Danke dafür.
 Die Dimensionierung wird sich wohl aber ändern, wenn es bei 8 kHz 
Abtastfrequenz bleibt?

Es war von mir aus ursprünglich ein IIR- Filter nach Chebyshev Type 2 
angedacht. Ich komme aber hier mit der Skalierung der Koeffizienten im 
1.15 Format nicht zurecht. (Festkommaarithmetik vom Hersteller)


Vielleicht bitte nochmal, welcher der digitalen Filter hier am 
einfachsten realisierbar wäre und wie seine Dimensionierung kurz 
ausschauen könnte.
Das wäre mir sehr wichtig

Bezüglich des FIR-Filters habe ich nur einmal eins im Matlab mit 
Kaiser-Fenster gemacht. Die anderen Verfahren sind mir für heute noch zu 
komplex.

 Zusammenfassend:

 Abtastfrequenz des DAC = 8kHZ ( analoger Sinus wird rausgeschickt)
 Abtastfrequenz des ADC = 2 MHz ( Sinus wird eingelesen)
 ( ist die ADC-Abtastfrequenz auch die Abtastfrequenz für das digitale 
Filter?)

 schwaches analoges RC-Glied 1-Ordnung vor dem ADC-Eingang - f_cut = 
ca.850Hz- 1kHz

 Dimensionierung des digitalen Filters:

 f_pass= 1kHz
 f_stop = 4kHz

 A_pass= 3 dB (??)

 A_stop = 40 dB (??)

 Filterwahl.....

von Michael W. (Gast)


Lesenswert?

Nur falls du es noch nicht bemerkt hast:
Mein Vorschlag war Unsinn und wäre nicht sehr genau.
Vergiss alles was ich gesagt habe, vor allem das mit den 12kHz !!!
Es war ein Versuch, das Abtasttheorem (für einen speziellen Fall) 
auszutricksen - geht aber nicht, da zu ungenau. Du hättest einen Fehler 
von einigen Prozent!

von Michael W. (Gast)


Lesenswert?

Die Idee war:

Das vom 8kHz DAC generierte Signal hat Oberwellen bei Vielfachen von 
8kHz. Wenn du dieses mit fa abtastet, so ist das Frequenzspektrum des so 
erhaltenen diskreten Signals mit fa periodisch.
Da deine Nutzfrequenz bis etwa 800Hz geht, hast du keine 
Spiegelfrequenzen im Basisband, solange die Vielfachen von 8Kz 
mindestens 1kHz von den Vielfachen von fa entfernt sind. Bei f=12kHz ist 
das zwar bei 8kHz und 16kHz der Fall, aber nicht mehr für 24kHz, da 8*3 
= 24 und 12*2=24. Bei 24kHz+/-800Hz ist die Oberwellenamplitude aber 
noch im % Bereich! Genauso für 48kHz = 12*4 = 6*8, usw. Es geht nicht.

Du solltest das DAC Signal analog filtern, und die Abtastfrequenz so 
weit hinaufsetzen, dass die 8kHz-Oberwellen nicht mehr stören können. Wo 
das ist, hängt von deinen Genauigkeitsanforderungen ab.

von Michael W. (Gast)


Angehängte Dateien:

Lesenswert?

Hier ein Excel, mit dem du die Oberwellenamplituden und die Auswirkung 
eines analogen Filters 1. Ordnung berechnen kannst. Bei 50kHz ist der 
Fehler im Promille Bereich. Übrigens wäre es auch keine Hexerei, einen 
analogen Filter etwas höherer Ordnung zu bauen.

http://t-filter.appspot.com/fir/index.html

liefert brauchbare Filter. Natürlich kann man das noch tagelang 
optimieren, wenn man will, aber es reicht.

Das beste digitale Filter nützt aber nichts, wenn du Aliasing Frequenzen 
einfängst! Dazu musst du eben erst mal analog filtern.

von Kik N. (electroprince)


Lesenswert?

& Michael

 Erstmal eine herzlichen Dank für all die Tipps!

 Dein Link mit den Tools ist mir nicht bekannt.
 Ich verwende oft Wiz Lite. Dort werden schon professionelle aktive 
Filter bestens dimensioniert. Aber ich schaue mir das auch gerne an!

 Und danke auch für die Excel-Tabelle.

 Ich wollte das Signal niemals mit 12kHz abtasten.


 Mir steht die maximale Abtastrate des ADC bis zu 2 MHz, wie ich oben 
geschrieben habe. Ich hoffe, ich liege damit gut über den ersten hundert 
8kHz-Oberwellen. Und das genügt mir auch.

  1* f_abtast_dac = 8kHz

 100*f_abtast_dac = 800kHz < 2MHz

 Das ich das DAC-Sinussignal schön analog filtern kann, wie du es auch 
empfiehlst, ist mir absolut klar.

 Daher wollte ich auch ein RC-Glied 1-Ordnung belassen, um die 
Bandbreite
 einzuschränken und die Aliasing-Effekte weitgehend auszuschließen, 
falls
 ein digitales Filter das Signal auch noch zusätzlich mitfiltern würde.

 OHNE digitales Filter muss ich dann einen aufwendigen aktiven 
Analogfilter bauen, um wirklich reine Grundfrequenz = 800 Hz 
rauszubekommen. Und da wird mein Dozent darauf pochen (chebyshev, 
butterworth oder sonst was) , auch wenn mich das zusätzlichen Platz= 
Geld auf der Leiterplatte kostet, ohne dass ich das möchte!


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 Ich hätte vielleicht kurz noch eine allgemeine Frage bezüglich 
Skalierung der Koeffizienten im 1.15 Format.  Das lässt mich irgendwie 
nicht in Ruhe und ich wollte es auch für mich verstanden haben:

z.B.

 Gegeben ist z.B. ein Koeffizient a = 0.9993

 Skaliert 0.9993* (2^15) = 32745
 Binär:

    1111 1111 1101 001   ->> 0x 7FE9

 Möchte jetzt aber a = -0.9993 haben

 Skaliert |0.9993| * (2^15)

 mit  Zweierkomplement und MSB=1  ergibt es:

 1 0000 0000 0010 111 --> 0x8017

Wie könnte ich es aber skalieren wenn die b- bzw. a- Koeffizienten
 außerhalb von < -1; 1 > liegen?? Was mache ich z.B. mit -2.0281 oder 
1.0018 ??

  Danke.

von Michael W. (Gast)


Lesenswert?

Du skalierst die Koeffizienten solange, bis sie sich als 1.15 darstellen 
lassen. Z.B. rechts shift = faktor 1/2

Das Signal wird dann natürlich um den Faktor kleiner; du kannst es aber 
nachher wieder rück-skalieren, wenn es geht.

von Kik N. (electroprince)


Lesenswert?

Das heißt einfach, dass ich ALLE Koeffizienten aller biquads, die ich 
z.B. in einer  (Matlab)

      sos [ b01   b11   b21   1  a11  a21
            b02   b12   b22   1  a12  a22
            ........
            b0N   b1N   b2N   1  a1N  a2N ]

    habe, mit einem beliebigen Faktor (1/2, oder 1/3, usw..) 
runterteilen kann, bis ich in meiner sos- Matrix keine Elemente 
außerhalb von <-1; 1> mehr habe.

 Folge ich dir richtig?

von Michael W. (Gast)


Lesenswert?

Ja, das Signal wird dann (bei FIR) um den gleichen Faktor runtergeteilt 
(bei IIR nicht).
Dass die Koeffizienten dadurch ungenauer werden, ist aber auch klar.

von Kik N. (electroprince)


Lesenswert?

Danke dir.

 Was ich aber noch für mich im Allgemeinen wissen möchte, ist ob die 
Abtastfrequenz eines ADC, zugleich die Abtastfrequenz des digitalen 
Filters sein könnte/müsste.

  DAC(f_abtast1)--> analog -- > 
ADC(f_abtast2)-->diskret--->Digitalfilter(f_abtast2?)

Es erscheint mir plausibel, dass  im ADC fertig diskretisierte Werte 
vorliegen, die mit einer f_abast2 abgetastet wurden,  auf die ein 
Digitalfilter nur mit derselben f_abtast2 zugreifen kann. ( 
Dezimationsfilter  oder ähnliches erstmal außer Acht).

Denke ich da richtig?

von Michael W. (Gast)


Lesenswert?

Kik Nik schrieb:
> Es erscheint mir plausibel, dass  im ADC fertig diskretisierte Werte
> vorliegen, die mit einer f_abast2 abgetastet wurden,  auf die ein
> Digitalfilter nur mit derselben f_abtast2 zugreifen kann. (
> Dezimationsfilter  oder ähnliches erstmal außer Acht).

Diese Frage ist in sich nicht konsistent:
Wenn ein AD Wandler mit der Abtastrate fa abtastet, so erhält man eben 
ein zeitdiskretes Signal im Intervall Ta=1/fa. Du kannst dieses nun mit 
einem digitalen Filter verarbeiten. Das Filter an sich kennt aber keine 
"Abtastfrequenz", sondern macht einfach einen neuen Ausgangswert aus 
einer gewichteten Summe der vorangegangenen Eingangswerte.

Man kann natürlich die Folge beliebig dezimieren und/oder expandieren 
und ein Filter auf das neue Signal mit geänderter Taktrate anwenden. Die 
Filterkoeffizienten müssen dann aber angepasst werden: Wenn du z.B. ein 
Tiefpassfilter mit fg=1kHz bei einer Taktfrequenz Ta=10kHz dimensioniert 
hast, so funktioniert dieses bei einer Taktfrequenz 20kHz zwar auch, 
hätte aber eine Grenzfrequenz von 2kHz. Es ist aber trotzdem das selbe 
Filter! Um diese scheinbare Abhängigkeit von Ta zu umgehen, normiert man 
die Frequenz in der DSV üblicherweise wie folgt auf die Abtastrate:


Die Filtereigenschaften wiederholen sich dann in dieser neuen normierten 
Frequenz im Zyklus


Vorsicht: Groß- und klein-Omega werden in der Literatur oft 
unterschiedlich verwendet.

Falls du das ohnehin schon wusstest, dann steht es halt da...

von Michael A. (michiavelli)


Lesenswert?

Ich finde, die Frage in sich ist konsistent!

Ein Digitalfilter wird stets in Bezug auf eine bestimmte Abtastfrequenz 
dimensioniert. Wenn man das gesampelte Signal des ADCs nicht dezimiert 
oder interpoliert, dann ist das Filter mit der ADC-Abtastfrequenz zu 
dimensionieren.

Ich kann immernoch nicht nachvollziehen, wieso ein 800Hz Sinus mit 2MHz 
abgetastet werden soll.

Das was hier - vorzugsweise von Analogtechnikern - als Spiegelfrequenzen 
und Oberwellen bezeichnet wird, sind genaugenommen periodische 
Fortsetzungen des Nutzsignalspektrums. Ich kenne kein 
Signale-und-Systeme-Buch, in welchem bei der Abtastung von 
Spiegelfrequenzen und Oberwellen die Rede ist, lasse mich aber gerne vom 
Gegenteil überzeugen.

Du bist doch Analogtechniker oder armeinsteiger?! ;)

von Kik N. (electroprince)


Lesenswert?

Danke sehr für die ausführliche Erklärung.

Die normierte Frequenz mit k-"Kopien" jeweils um 2*PI periodisch 
fortgesetzt ist mir natürlich ein Begriff.


Tja, man merkt dass die Zusammenhänge fehlen, wenn man den ganzen Sommer 
3 theoretische Bücher zu Thema DSP durchgeackert hat, und nie mal was 
praktisches auf dem µController ausgetestet hat...

Aber auch die Bücher überschütten viel zu viel mit mathematischen 
Beweisen , statt sich mehr auch auf graphische Darstellungen zu 
konzentrieren, damit sich der Mensch die Abläufe einfach vor Augen 
führen kann.

Falls ich noch Fragen hätte, melde ich mich.

von Kik N. (electroprince)


Lesenswert?

& Michael Avelli

ok. alles klar. danke. Das wäre logisch, das die bilineare 
Transformation vom Übergang von s zu z-Ebene ein Ts voraussetzt.
Das war mir unklar welches fs ich nehme.

 ADC soll mit 2 MHz laufen. Ich habe es schon vorher mit einem anderen 
Kollegen abgeklärt.

von Michael W. (Gast)


Lesenswert?

Kik Nik schrieb:
> Es erscheint mir plausibel, dass  im ADC fertig diskretisierte Werte
> vorliegen, die mit einer f_abast2 abgetastet wurden,  auf die ein
> Digitalfilter nur mit derselben f_abtast2 zugreifen kann. (
> Dezimationsfilter  oder ähnliches erstmal außer Acht).

Die Aussage ist insofern inkonsistent, als dass zuerst die Möglichkeit 
in den Raum gestellt wurde, vom Filter aus mit einer anderen Frequenz 
zugreifen zu können. Das ginge aber nur, wenn man up- oder down-sampled. 
Und da dies erst mal "außer Acht" gelassen werden sollte, ist die 
Aussage (meines Erachtens) sinnlos, da es per Definition nicht anders 
geht. Das ist jetzt aber schon Haarspalterei, da jeder weiß, was gemeint 
ist ;-)

Du, Michael Avelli, hast das ja selbst gesagt:

Michael Avelli schrieb:
> Wenn man das gesampelte Signal des ADCs nicht dezimiert
> oder interpoliert, dann ist das Filter mit der ADC-Abtastfrequenz zu
> dimensionieren.

Michael Avelli schrieb:
> Das was hier - vorzugsweise von Analogtechnikern - als Spiegelfrequenzen
> und Oberwellen bezeichnet wird, sind genaugenommen periodische
> Fortsetzungen des Nutzsignalspektrums. Ich kenne kein
> Signale-und-Systeme-Buch, in welchem bei der Abtastung von
> Spiegelfrequenzen und Oberwellen die Rede ist, lasse mich aber gerne vom
> Gegenteil überzeugen.

Du hast zwar recht, aber Kik Nik spricht in seiner ersten Frage von 
"Obertönen", und obwohl dies nicht ganz stimmt, zweifle ich keine 
Sekunde daran, dass er genau wusste wovon er spricht. Im Übrigen finde 
ich die Bezeichnung "Spiegelfrequenz" nicht so abwegig, da der Prozess 
der Abtastung sein analoges Gegenüber in der analogen Mischung zweier 
Signale besitzt. Auch dort tritt eine periodische Fortsetung des 
"Nutzspektrums" auf, wenn dies im Detail auch anders aussehen mag (z.B. 
phasenselektiver Verstärker). In vielen Lehrbüchern über DSV wird der 
Abtastprozess zunächst tatsächlich als Erzeugung eines analogen 
Mischprodukts mit einer Delta-Funktions-Folge beschrieben, und erst 
anschließend ein Vergleich mit der Fourier Transformierten eines 
diskreten Signals herausgearbeitet.

von Kik N. (electroprince)


Lesenswert?

Meine Frage war nicht sinnlos, sonst hätte ich sie nicht gestellt.

 Für einen der sich auskennt, wird jedes Unwissen sinnlos sein.

 Und es gibt übrigens keine sinnlosen Fragen.

 Danke allerseits!

von Michael W. (Gast)


Lesenswert?

Sorry für meine Wortwahl, war nicht abwertend gemeint. Ich wusste 
einfach nur nicht was du sagen wolltest. Ich denke, es war, "dass ein 
Filter für eine bestimmte Abtastfrequenz dimensioniert wird", während 
ich es dahingehend interpretierte, "dass ein Filter generell nur auf die 
Abtastfrequenz seiner Eingangsfolge losgelassen werden könne", was ja in 
sich einen Zirkelschluss birgt. Manchmal sagt man verschiedenes und 
denkt das selbe.

von Kik N. (electroprince)


Lesenswert?

Kein Problem, Michael :-))

 Bin nicht nachtragend.

 Brauche dich sicherlich schon bald für die nächsten mehr oder weniger 
sinnlosen Fragen. hahahahaahahha :-))

 Gruß aus Wien

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.