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!!
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?
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.
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.
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.
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.
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.
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.
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?
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.
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.....
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!
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.
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.
& 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.
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.
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?
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.
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?
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...
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?! ;)
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.
& 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.
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.
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!
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.