Hi, mal eine kurze Frage, bevor ich mich ins Unglück stoße und erst am ende sehe, dass das alles nichts wird. Realisieren möchte ich eine Digitale Frequenzweiche mittels FIR-Filter mit vielleicht 100 Koeffizienten pro Filterzweig. Ich würde euch bitten mir eine kurze bestätigung zu geben ob ich das jetzt alles richtig verstanden habe und das so funktionieren könnte. Speziel die Programmierung eines FPGA. - Die Koeffizienten berechne ich mir aus den Messdaten meines Lautsprechers (SciLab ist mein Freund) - Mit VHDL beschreibe ich mein FIR-Filter. Simuliere und anschließend synthetisiere ich dieses mit einer frei verfügbaren Software. - Schreibe die daraus entstandenen Daten in ein EEPROM um diese dann mit einem Atmel bei jedem neustart in den FPGA zu laden (http://www.mikrocontroller.net/articles/Low_Cost_FPGA_Konfiguration) Klar sind da noch bestimmt viele ecken die noch nicht gesehen habe. Aber kann ich das grundsätzlich so realisieren ohne noch teure (>50€) Soft- und Hardware zu kaufen (benötigte Hardware für den Atmel ist vorhanden)? Grüße, Sven
@sven im Prinzip geht das so. Vllt erst Testhalber die VHDL-Software schreiben und simulieren und dann die Koeffizienten berechnen (diese lassen sich ja durch das EEProm jederzeit ändern, von daher ist der Schritt hardware-technisch gesehen eher zweitrangig). Es ist halt die frage wie du die AD/DA Seite machen willst. Egal ob du selbst einen 1-Bit-DAC baust und die analoge Eingangsseite über einen AD-Wandler machst (z.b. I2S) oder ob du auch die Ausgangsseite per I2S machst (wäre zu empfehlen). Aber vom Prinzip her ist es richtig. Ich weiß nicht wie du das preislich meinst, aber wenn du sagst das die Hardware schon vorhanden ist (Atmel), benutzt du dann einen FPLSIC als FPGA ?!
Hallo Rene, danke erstmal für deine bestätigende Antwort! Rene Böllhoff schrieb: > Es ist halt die frage wie du die AD/DA Seite machen willst. Egal ob du > selbst einen 1-Bit-DAC baust und die analoge Eingangsseite über einen > AD-Wandler machst (z.b. I2S) oder ob du auch die Ausgangsseite per I2S > machst (wäre zu empfehlen). Ich würde mir aus dem großen Angebot der AD- sowie DA Umsetzer jeweils einen passenden herraussuchen (Analog Devices klingt nicht verkehrt). Wie ich die Daten dann genau zu dem FPGA bekomme weiß ich noch nicht. Wahrscheinlich werde ich diesem I²C oder SPI beibringen müssen. Rene Böllhoff schrieb: > Ich weiß nicht wie du das preislich meinst, aber wenn du sagst das die > Hardware schon vorhanden ist (Atmel), benutzt du dann einen FPLSIC als > FPGA ?! Eigentlich habe ich mich damit auf die low-cost Variante beziehen wollen http://www.mikrocontroller.net/articles/Low_Cost_FPGA_Konfiguration Insbesondere interessiert mich, ob nicht doch noch ein nicht frei erhältliches Softwarepakett oder ähnliches nötig ist. Aber so wie ich es verstanden habe, wohl nicht... Vielleicht hast du dazu nochmal ein paar Worte. Grüße, Sven
>Ich würde mir aus dem großen Angebot der AD- sowie DA Umsetzer jeweils >einen passenden herraussuchen (Analog Devices klingt nicht verkehrt). Für die ersten Test reicht z.b. ein TLV320AIC23B. Der hat einen AD ud DA Wandler drin (Codec). Damit kann man erstmal ausprobieren und optimieren. Die Konfiguration des Codecs kann man auch recht einfach in VHDL umsetzen. Wenn nachher alles funktioniert kann man sich über einen richtigen High-Quality Wandler Gedanken machen, bzw aufbauen (dann Analog Devices, Burr Brown, usw ...) mit symmetrischer Versorgung, guten Operationsverstärkern usw ... >Wie ich die Daten dann genau zu dem FPGA bekomme weiß ich noch nicht. >Wahrscheinlich werde ich diesem I²C oder SPI beibringen müssen. 64-Bit Schieberegister (davon werden dann nur 2x24Bit genutzt) für Eingang und Ausgang, Einsynchronisation der Clocks (am einfachsten ist es den Codec bzw AD/DA Wandler als Master laufen zu lassen und die Bitclock bzw Wordclock im FPGA auf den Systemtakt einzusynchronisieren sodaß der FPGA als Slave läuft und fertig). >Eigentlich habe ich mich damit auf die low-cost Variante beziehen wollen Die Konfiguration ist nicht der ausschlaggebende Presifaktor. Es kommt ja darauf an welchen FPGA du verwenden willst. Das bestimmt ja maßgeblich den Preis deines Systems. Wenn du schon ein FPGA Board hast du meist das Platform-Flash schon mit drauf, somit bräuchtest du dann keine Low-Cost-Konfiguration. Wenn du es selberbauen willst dann wärs natürlich ne Alternative, wobei das halt etwas frickelig ist mit den 3 Versorgungsspannungen, die Konfiguration des FPGA's ist da eher ne "Fingerübung". >Insbesondere interessiert mich, ob nicht doch noch ein nicht frei >erhältliches Softwarepakett oder ähnliches nötig ist. Wenn du Xilinx oder Altera FPGA's verwendest ist die Entwicklungsumgebung (Xilinx ISE oder Altera Quartus) umsonst. Wie es bei Atmel, Lattice oder Actel FPGA's aussieht weiß ich nicht. Ich selbst verwende in meinem Audio-Projekt hier im Forum einen Xilinx, und das läuft ganz gut. Allerdings ist die ISE von Xilinx stellenweise echt ne Zumutung. Aber nem geschenkten Gaul ... Vllt kannst du ja auch das ein oder andere aus dem Audio-Projekt brauchen. Ich verwende allerdings IIR-Filter. Aber ansonsten wäre alles da was man braucht für eine Frequenzweiche bzw für ein solches vorhaben.
Hallo Sven, wenn du von Analogsignalen ausgehst, und diese zuerst AD-wandeln musst, dann ist das anspruchsvoll. Wenn du schon so einen Aufwand machst, solltest du eine Tonqualität und Rauschabstand hinbekommen, dass es sich lohnt. Dann solltest du zuerst den AD-Wandler heraussuchen (Anzahl Bit, Abtastrate, Sigma-Delta oder SAR?), denn danach bestimmt sich das FPGA-Interface und der Filter. Für den Wandler brauchst du eine (Semi-)professionelle Platine (=> PCB-POOL, etc.). Mit "Lochrasterplatine" gehts nicht (vernünftig). Zusätzlich brauchst du auch noch den Anti-Alias-Tiefpassfilter vor dem ADC. Dieser bestimmt die Tonqualität und den Frequenzgang mit. Nach dem Digitalfilter kommt der DAC, danach brauchst nochmal ein Tiefpassfilter... ----- Wenn es nicht unbedingt eine FPGA sein muss, gäbe es noch die Möglichkeit die Weiche mit digitalen Analogfiltern "switched-cap oder so" zu realisieren. Das signal bleibt dabei analog. Alex
>wenn du von Analogsignalen ausgehst, und diese zuerst AD-wandeln musst, >dann ist das anspruchsvoll. Es geht. Vom Beschaltungsaufwand des Wandlers her vllt (je nach Anspruch der Qualität), aber das in VHDL umzusetzen ist nicht soo schwierig. Man muß ja lediglich die Clock-Signale einsynchronisieren und über eine Statemachine das Schieberegister befüllen/entleeren. Dann hat man digital das Audio-Signal im FPGA. >Für den Wandler brauchst du eine (Semi-)professionelle Platine (=> >PCB-POOL, etc.). >Mit "Lochrasterplatine" gehts nicht (vernünftig). Nicht zwangsweise. Man erreicht vllt keine 96-100dB Rauschabstand per Lochraster, aber ich denke wenn man ca 75-80dB erreicht hat man schon vernünftig gearbeitet. Und fürs erste kann man damit wunderbar arbeiten bzw. sein Vorhaben umsetzen. Wenns dann nachher gut funktioniert kann man ja immer noch Aufwand treiben um den Wandler zu verbessern. Aber das ändert ja nichts an der grundsätzlichen Funktionalität.
Hi Rene, natürlich könnte man die prinzipielle Funktion des ADC einfacher testen. Aber was ist dann getestet? Was nützt ihm ein funktionierender Digitalfilter wenn er die analoge AD und DA nicht gut hinbekommt (-> Mixed Signal!). Normalerweise fängt man sowas damit an, Frequenzgang, Rauschabstand, Klirrfaktor usw. festzulegen. Danach bemisst sich der ganze Rest. Der ADC muss vor der Realisierung des Filters feststehen. Für Audiosignale werden meist Sigma-Delta-Wandler eingesetzt, habe aber keine Erfahrung mit denen. Alex
@Alex Ich weiß was du meinst. Es wäre/ist die normale Vorgehensweise erst alle Parameter zu sammeln und dann zu entscheiden was man braucht bzw wie man es realisiert. Aber da die Realisation schon feststeht (FIR, FPGA, Koeffizienten per SciLab im EEProm gespeichert) würde mich persönlich erstmal interessieren ob das ganze auch so funktioniert (selbst wenn die Audio-Qualität nicht 100%, sondern nur 97% ist), da zwischen Simulation und realer Hardware meist ja doch ein Unterschied besteht :-) Und ich denke das der TO nicht die absicht hat einen Wandler zu designen der 110 oder gar 120dB Rauschabstand hat (da sitzt man recht lange dran), sondern eben den FIR-Filter als zentralen Projektbestandteil. Ich kann nur aus meiner Erfahrung mit meinem (never-ending)-Audio-Projekt sprechen das die Qualität der einfachen Codecs (hier TLV320AIC23B) doch sehr gut ist. Und dafür das ich essentielle Dinge bei meinem Wandler falsch gemacht hab (einfache SMD-Kondensatoren, keine Spule vor AVCC, keine separate Massefläche, alles auf Daumennagelgröße zusammengequetscht) hab ich doch recht akzeptable Werte (so um die 80dB). Und ich denke wenn der FIR-Filter erstmal läuft ist ein besserer Wandler nicht das Thema, zumal man ja den FIR-Filter ohne weiteres auch von beispielsweise 16 auf 24 Bit aufbohren kann, was dann den Wandler letztenendes in den Hintergrund rücken lässt (zumindest was die Parameter wie 16/20/24 Bit angeht, da der FPGA ja einfach nur vor sich hinrechnet). Aber wie man es realisiert (ob erst Wandler und dann FPGA oder umgekehrt) ist eig. zweitrangig. Hauptsache der Lerneffekt ist da, und man ist zufrieden mit dem was man gebaut hat. Geht mir mit meinem never-ending-Audio-Projekt ja nicht anders :-) War vllt alles auch nur aus meiner Warte gesehen, da bei mir der Hauptbestandteil eben der Audio-Prozessor und nicht die Audio-Quali ist, die ich ja jederzeit durch nen anderen Wandler verschlimmbessern oder wirklich verbessern kann (was ich auch in einem nächsten Design machen werde, Stichwort : anderer Wandler, Spule vor AVCC, vernünftige Kondensatoren, usw ...).
Nabend, Ersteinmal danke für die rege Beteiligung! Um mal die ersten Bedenken aus dem Weg zu räumen. Ich bin auf dem Gebiet des Platinendesigns kein Neuling. Sicher habe ich noch eine Menge dazu zu lernen, aber Eagle und Co sind für mich keine fremden Werkzeuge. Ähnlich das Herstellen von Platinen. Ich sehe auch kein Problem eine Mehrlagige Platine (mehr als zwei Layer) herzustellen. Was hindert mich daran mehere Platinen übereinander zu kleben :-). Aber trotzdem Danke für die gutgemeinten Tips! Wenn man sich nicht sicher ist, wer da auf der anderen seite der Tastartur sitzt, sollte man ihn immer vor dem bösen Erwachen des totalversagens der Elektronik warnen Der switched-cap kommt nicht in betracht. Er bringt mir nicht die Vorteile eines FIR-Filters. Ich denke ich werde mich an Renes vorschlag halten und ersteinmal einen Versuch mit dem TLV320AIC23B aufbauen. Wenn ich darauf die FPGA mit einem FIR-Filter zum laufen gebracht habe, dann denke ich über eine HIGH-END version nach. Da ich aber jetzt erstmal von euch die bestätigung habe, das es in etwa so funktionieren müsste. Begebe ich mich ersteinmal daran die Filterkoeffizienten zu bestimmen. Das Richtige bearbeiten der Koeffizienten mit SciLab ist ja nochmal eine Kunst für sich, auch wenn man die Arbeit von Swen Müller zu seinem HUGO kennt :-). Grüße, Sven
>Begebe ich mich ersteinmal daran die Filterkoeffizienten zu bestimmen. Ich würde vllt erstmal die grobe Struktur in VHDL programmieren und simulieren. Vor allem ist es wichtig zu wissen wieviele Taps du brauchst. Je mehr Taps du hast desto weiter kannst du mit der Grenzfrequenz deines Filters runtergehen, und das bestimmt auch maßgeblich die Programmierung in VHDL (selbst wenn man da sicherlich parametrieren kann, aber so hat man das "Herzstück" erstmal fertig). Die Koeffizienten sind erstmal nebensächlich (bis auf die Anzahl).
Vllt noch einen Tipp zur Vorgehensweise (nur exemplarisch) : Zentraler Bestandteil eines FIRs ist ja die MAC-Einheit. Je nachdem ob du mit 16/24/32 Bit arbeiten willst schreib und simulier dir die MAC-Einheit als erstes (bei Pipelining bietet es sich an die MAC-Einheit als erstes zu schreiben). Dann die Verzögerungselemente sowie den Koeffizientenspeicher dazu (BlockRAMs bieten sich an, wenn man Xilinx verwendet) mit Test-Daten. Und als Top-Level Entity die I2S-Komponente mit der der Audio-Datenstrom eingelesen bzw ausgegeben wird. Wenn das alles passt kannst du dir das Interface zu einem uC (wenn ich das richtig verstanden habe und du das EEProm nicht direkt an den FPGA anklemmst) überlegen um die Koeffizienten zu schreiben. Da würde sich der einfachheit halber ein SPI-Interface anbieten. Zudem kann man dann noch unterschiedliche Koeffizientensätze auswählen (EQ-Presets) und/oder Lautstärkeeinstellung/Mute usw vom uC aus setzen. Aber das ist nur optional wenn du die Frequenzweiche noch etwas flexibler halten willst.
Hallo Rene, Ich danke dir erstmal für deine Mühe. Ich komme defenitiv nochmal darauf zurück. Aber das was mir wichtig war, ist geklärt : die Machbarkeit. Jetzt muss ich mich den anderen Baustellen zuwenden, die auch alle mit diesem Projekt zu tun haben und schauen wie es da aussieht. Grüße, Sven
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.