Hallo, ich muss demnächst eine digitale Übertragungstrecke simulieren, wozu ich digitale Tiefpässe benötige. Nun wollte ich fragen ob jemand eine Möglichkeit kennt diese in fertigen Blöcken graphisch in einen XC95108, 9572 oder 9536 zu programmieren. Oder gibt es vielleicht fertige Codes dafür, oder eine Möglichkeit mit einem FPGA? Hat evtl. jemand einen Lösungsansatz für dieses Problem? Mein Hauptanliegen liegt aber zunächst in einer digitalen Tiefpass Programmierung, wobei mir z.B. auch ein fertiger C++ Code o.ä. weiterhelfen würde. (Am Ende sollen 64KHz Bitfolgen übertragen werden und die Tiefpässe nach möglicht nach einer Filterberechnung mit dem Programm MatLab mit den dadurch berechneten gewerten parametriert werden...) MfG Christoph
@ Chris >ich muss demnächst eine digitale Übertragungstrecke simulieren, wozu ich >digitale Tiefpässe benötige. Meinst du FIR bzw. IIR Filter? Das kannst du mit CPLDs praktisch vergessen (auf jden Fall die FIR, ein kleiner IIR sollte machbar sein) >Programmierung, wobei mir z.B. auch ein fertiger C++ Code o.ä. >weiterhelfen würde. Im CPLD? Die werden mit VHDL "programmiert" C++ müsste per Hand in VHDL umgestzt werden. MFg Falk
Super, dass Du Dich so schnell meldest, musste kurz mal überlegen, FIR Filter wären ja rekursive, deren Ausgangswerte von bereits vergangegnen Eingangswerten abhängen würde, dehalb wär ein IIR Filter ausreichend. Wie würde denn da eine einfache Form aussehen?
@ Chris >Super, dass Du Dich so schnell meldest, musste kurz mal überlegen, FIR >Filter wären ja rekursive, deren Ausgangswerte von bereits vergangegnen >Eingangswerten abhängen würde, Nee, genau anders herum. IIR ist rückgekoppelt. > dehalb wär ein IIR Filter ausreichend. >Wie würde denn da eine einfache Form aussehen? Gibt überall im Netz. Frag Tante Google. MFG Falk
http://www.mikrocontroller.net/articles/Digitale_Signalverarbeitung http://www.mikrocontroller.net/articles/Digitale_Signalverarbeitung#FIR-_und_IIR-Filter
Hi Falk, habe schon ein ganze Menge darüber gesammellt und das ganze mal kurz in einer pdf gesammelt und würd mich freuen, wenn Du dazu einen guten Ratschlag geben könntest Mfg Chris
Ein strukturelles Beispiel für einen Tiefpass, Amplitudengang und mathematische Formel sind in der pdf dabei... Nur eine Umsetzung der angegebenen Struktur in ein Ersatzschatbild (ESB) für den CPLD bekomme ich nicht hin.
Hab mir eben nochmal die pdf angschaut und irgenwie ne Zeichnung als Eingangssignal angezeigt bekommen. Das muss natürlich X[z] heißen.... MfG
wichtig für die auswahl des cplds wäre noch die frage mit welcher datenwort-breite du arbeiten möchtest/musst.
Hi Alex Trusk, habe ein ganz gutes Anwendungsbeispiel unter Deienem ersten Link gefunden "Unterdrückung von Hintergrundgeräuschen bei Freisprechanlagen" wenn dies bei einer Freispecheinrichtung tatsächlich auf digitaler Basis gemacht wird. Ich Schau da gleich mal unter den weiteren angegebenen Links nach.... Vielleicht findest Du ja noch etwas zur Störungsunterdruckung, wo die digitale Art und Weise beschrieben wird, aber ein konkretes Umsetzungsbeispiel wäre für mich am einfachsten nachzubauen. MfG
Hi Mason, Das binäre 64KHz Einganssignal soll seriell in den CPLD eingespeist und auch wieder ausgegeben werden. Was intern passiert (parallel-Verarbeitung) spielt keine Rolle. Erst zu einem späteren Zeitpunkt sollen z.B. auch ternäre Signale eingespeist werden. Aber auch dann spielt die datenwort-breite doch eigentlich bei serieller Einspeisung keine Rolle, da jedes Bit gleich verfälscht werden soll; durch die Tiefpass-Filter. Oder bedenke ich irgendetwas bezüglich der Datenwotbreite überhaupt noch nicht. Ansonsten würde ich sagen 8bit breit, da keine Paritätsprüfung o.ä. eingeführt werden soll.
Hi Mason, ich glaube jetzt verstehe ich; der TP-Filter soll sich auf mindestens acht Eingangsbit beziehen können, d.h. die Ausgangsfolge würde um mindestens 8bit verögert gegenüber der Eingangsfolge ausgegeben. Hoffe Du meldest Dich nocheinmal. Nicht das ich am Ende an irgend so einem "datenwort-breite Problem" scheitere...
@ Chris >Hi Falk, habe schon ein ganze Menge darüber gesammellt und das ganze mal >kurz in einer pdf gesammelt und würd mich freuen, wenn Du dazu einen >guten Ratschlag geben könntest >Zum einen weiß ich nicht genau mit welcher Abtastfrequenz ich arbeiten sollte da ich dazu >keine verständlichen Informationen in den Datenblättern finde und zum anderen weiß ich >nicht wie ich die Zeitverzögerung programmieren sollte? >Wichtiger wäre erst einmal die Zeitverzögerung im CPLD XC9536, das andere >könnte ich >dann mit meinem OSZI und in der Firma kontrollieren. 1.) Du weisst noch gar nicht so recht was du machen willst. Dir fehlen WICHTIGE Grundlagen. Also such dir ein Buch zum Thema digitale Filter und lies es. 2.) Wenn du 1.) gemacht hast wirst du auch wissen wie man eine Verzögerung programmiert. Ich verrate es dir, aber das erspart dir 1.) nicht. Eine Verzögerung ist nichts weiter als ein Speicher (Register mit mehreren FlipFlops), welcher die Daten um einen Systemtakt verzögert. 3.) Vergiss den CPLD. Die Dinger sind dafür zu klein. Besorg die ein kleines FPGA-Evaluationboard. Es gibt auch welche da sind schon Codecs drauf (AD und DA Wandler). Vorn Mikro dran, hinten Kopfhöhrer, DSP-System fertig (das ist es, was du quasi bauen willst). 4.) Die Abtastratte richtet sich nach deinem Eingangssignal. Telephon hat 8 kHz, Radioqualität 11 kHz, CD 44.1 kHz. 5.) Was meinst du mit deinem "binärem 64 kHz Signal"? Ist das ein Datenstrom vom ISDN? MfG Falk
hi chris, man sollte schon wissen welche breite dein signal hat. das entscheidet maßgeblich deinen ressourcen-verbrauch (dadurch das der cpld ja intern mit einem parallelen datenstrom arbeiten MUß). wenn alle deine multiplizierer den faktor 0,5 haben ist es einfach nur eine schiebe-operation. dann brauchst du laut deinem blockschaltbild noch einen addierer und 2 verzögerungselemente (register). da deine datenwort breite den logik-verbrauch bestimmt wäre es gut zu wissen mit wieviel bits du intern arbeiten mußt damit du einen geeigneten cpld auswählen kannst nur wenn du beispielsweise 32 bit nimmst und hast multiplikatoren von eben nicht 0,5 sondern beispielsweise 0,7946123 dann kannst du sowas wahrscheinlich mit nem cpld vergessen (du brauchst alleine für deine multiplikation mehrere addierer, und das gleich zweimal -> macht der cpld dicke backen). man sollte sich vorm filter design immer klar machen was alles benötigt wird. in deinem fall ists in sofern einfach da du halt alle multiplikatoren auf 0,5 (einmal nach rechts schieben) hast und dann vereinfacht es die sache. bei anderen multiplikatoren wirds schon schwieriger (sofern sie nicht 2^-x sind) gruß rene
@ Falk, Du hast schon recht, dass ich noch nicht genau weiß, was ich machen will... Ich muss mir die Aufgabe auch mal konkret beschreiben lassen. Das mit den Schieberegistren als Zeitverzögerung ist jetzt klar geworden, brauchte wohl jemanden, der mich mal mit der Nase drauf stößt. Werd heute abend mal versuchen die gezeigte Struktur in meinem Schematic-Plan zu programmieren und hier über Erfolg und Misserfolg berichten. Für umfangreichere Filter werd ich mir dann ein FPGA mit Bord besorgen. Allerdings geht es nicht um eine analog-digital Wandlung (Digitalisierung), sondern: Es wird eine binäre Zufallsfolge (auf einer Datenleitung) zu Testzwecken in den digitalen Tiefpaß eingespeist. Die ausgegebene Folge soll dann genauso aussehen, wie durch einen analogen Tiefpass verfälscht. Dies wird vermutlich nur durch eine DA-Wandlung der neu entstandenen Folge möglich sein. aber wie? Am besten ich lass mir die Aufgabe nochmal genau beschreiben und meld mich dann wieder, allerdings bin ich immer für Anregungen offen. MfG
@ Rene, Für erste Tests werde ich erstmal ausschließlich mit Multiplikatoren 2; 1 und 0,5 arbeiten und muss maximal 8bit intern verarbeiten. Allerdings sollen die Faktoren später mit MatLab berechnet werden und dann kommen solche Zahlen wie 0,7946123 auf jeden Fall vor. Werd gleich mal die angegebene Struktur programmieren und mich dann wieder melden, dann weiß ich hoffentlich auch mehr... MfG Christoph
@ Falk, @ Rene und alle anderen habe mich mal mit der Programmierung der angegebenen Struktur beschäftigt und mir ist einiges klar geworden. Die AD-Wandlung habe ich an mein binäres Eingangssignal angepaßt und arbeite intern für erste Versuche mit einem 4-bit Wort (1 entspricht 0010) um den digitalen-TP nicht voll auszusteuern. Das so entstandene 4-bit Ausgangssignal im CPLD muss ich dann noch auf einen AD-Wandler geben. Wäre super wenn Ihr euch das noch mal angucken könntet was ich da in der pdf zuammengestellt habe und mir eure Meinung kurz schreibt. Kann das so funktionieren? Habe das soweit auch alles in den CPLD auf meinen Schematic-Plan bekommen, allerdings suche ich noch nach einer komfortablen Lösung für die Multiplizierer. MfG
@ Chris Lang >@ Falk, @ Rene und alle anderen >habe mich mal mit der Programmierung der angegebenen Struktur >beschäftigt und mir ist einiges klar geworden. >Die AD-Wandlung habe ich an mein binäres Eingangssignal angepaßt und >arbeite intern für erste Versuche mit einem 4-bit Wort (1 entspricht Naja, das ist aber ein wenig inkonsequent. Wenn dein Signal nur binär ist, dann musst du das nicht künstlich auf 4 Bit aufblasen. >0010) um den digitalen-TP nicht voll auszusteuern. Das so entstandene >4-bit Ausgangssignal im CPLD muss ich dann noch auf einen AD-Wandler >geben. ??? Das was du villeicht machen solltest/muss, ist die Koeffizienten in mehr als 1 Bit zu kodieren, 4 oder 8. MfG Falk
@ Falk, wie gehts? Die abgewandelte AC-Wandlung ist doch nötig, da ein digitaler TP nicht nur mit den Werten 0 und 1 arbeiten kann, weil dann an den Additionsstellen des TP Überläufe (Carry bits) entstehen könnten. Deshalb habe ich der 1 am Eingang den Dezimalwert 4 zugeordnet, so wird der TP vermutlich niemals auf seinen maximal möglichen Dezimalwert 15 addieren. Sieh Dir doch bitte mal die verbesserte pdf an, da habe ich das gewünschte Ausgangssignal nocheinmal unter dem Oszilloskop-Block dargestellt. Kann ich so die analogen TP durch digitale TP ersetzen ? MfG
@ Chris >Die abgewandelte AC-Wandlung ist doch nötig, da ein digitaler TP nicht >nur mit den Werten 0 und 1 arbeiten kann, weil dann an den >Additionsstellen des TP Überläufe (Carry bits) entstehen könnten. Das ist kein Problem, du kannst ja mit breiteren Datenworten arbeiten. >Deshalb habe ich der 1 am Eingang den Dezimalwert 4 zugeordnet, so wird >der TP vermutlich niemals auf seinen maximal möglichen Dezimalwert 15 >addieren. Das ist nur eine Frage der internen Datenbreite. >Kann ich so die analogen TP durch digitale TP ersetzen ? Mit ist noch nicht so recht klar, wie deine binäre Signalquelle da reinpassen soll. Prinzipiell kann man einen analogen Tiefpass durch einen digitalen ersetzen. Das Schema ist dabei immer gleich. AD- Wandler - Signalverarbeitung per DSP/uC/FPGA/CPLD - DA Wandler. Der AD bzw DA Wandler laufen sinnvolerweise mit 8..16 Bit. Allerdings ist dann ein binäres Eingangssignal relativ sinnlos. Was du darstellst, ist lediglich die "Abschleifung" der Flanken der binären Signale am Ausgang. Dazu braucht man aber keinen digitalen Tiefpass. Um einen Filter (Tiefpass) zu prüfen, verwendet man entweder a) ein konstantes Rechtecksignal. Dieses stellt eine Sprungfunktion dar, an der Form der Ausgangsflanke kann man die Eigenschaften des Filters ablesen und ggf. in den Frequenzbereich transformieren. b) Einen Wobbelgenerator, welcher periodisch ein Sinussignal zwischen zwei Frequenzen erzeugt. Mittels Hüllkurvendemodulator und Oszi kann man dann den Filterverlauf anzeigen. Es gibt noch mehr Möglichkeiten. MfG Falk
@ Falk, >>Kann ich so die analogen TP durch digitale TP ersetzen ? > Prinzipiell kann man einen analogen Tiefpass durch einen digitalen > ersetzen. Das Schema ist dabei immer gleich. > > AD- Wandler - Signalverarbeitung per DSP/uC/FPGA/CPLD - DA Wandler. OK, das ist jetzt klar geworden. > Mit ist noch nicht so recht klar, wie deine binäre Signalquelle da > reinpassen soll. > Der AD bzw DA Wandler laufen sinnvolerweise mit 8..16 Bit. Allerdings > ist dann ein binäres Eingangssignal relativ sinnlos. Was du darstellst, > ist lediglich die "Abschleifung" der Flanken der binären Signale am > Ausgang. Dazu braucht man aber keinen digitalen Tiefpass. Könnte ich denn die gleiche "Abschleifung", die durch die analogen Tiefpässe verursacht wird, mit folgender Struktur erreichen? AD- Wandler - Digitaler Tiefpass (DSP/uC/FPGA/CPLD) - DA Wandler. Theoretisch sollte ich dann doch bei einer AD-Wandlung des binären Eingangssignal die gleiche "Abschleifung" am Ausgang des DA-Wandlers erreichen können, oder? Natürlich muss ich den Filter dann noch entsprechend berechnen. Oder welche Möglichkeit gibt es denn noch die "Abschleifung" zu erreichen? Nicht ganz so wichtig: Falls ich einen TP entwerfe, muss ich diesen bestimmt auch messen, aber dazu sollte ich mich erst noch ein bischen in das Thema vertiefen. > Um einen Filter (Tiefpass) zu prüfen, verwendet man entweder > > a) ein konstantes Rechtecksignal. Dieses stellt eine Sprungfunktion dar, > an der Form der Ausgangsflanke kann man die Eigenschaften des Filters > ablesen und ggf. in den Frequenzbereich transformieren. Dachte das mit der Sprungfunktion funktioniere nur für theoretische Berechnungen... aber wie erwähnt, muss das nochmal vertiefen. > b) Einen Wobbelgenerator, welcher periodisch ein Sinussignal zwischen > zwei Frequenzen erzeugt. Mittels Hüllkurvendemodulator und Oszi kann man > dann den Filterverlauf anzeigen. Das habe ich irgendwo schon mal gelesen, mal sehen ob ich das wiederfinde wenn ich es brauche. > Es gibt noch mehr Möglichkeiten. Wollte mich an dieser Stelle mal für Deine zahlreichen und guten Anregungen bedanken. Frohe Ostern :-)
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.