Forum: FPGA, VHDL & Co. CPLD 95xxx o.ä. als digitaler Tiepass nutzbar ?


von Chris (Gast)


Lesenswert?

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

von Falk (Gast)


Lesenswert?

@ 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

von Chris (Gast)


Lesenswert?

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?

von Falk (Gast)


Lesenswert?

@ 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


von alex trusk (Gast)


Lesenswert?


von Chris (Gast)


Angehängte Dateien:

Lesenswert?

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

von Chris (Gast)


Lesenswert?

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.

von Chris (Gast)


Angehängte Dateien:

Lesenswert?

Hab mir eben nochmal die pdf angschaut und irgenwie ne Zeichnung als 
Eingangssignal angezeigt bekommen. Das muss natürlich X[z] heißen....

MfG

von TheMason (Gast)


Lesenswert?

wichtig für die auswahl des cplds wäre noch die frage mit welcher 
datenwort-breite du arbeiten möchtest/musst.

von Chris (Gast)


Lesenswert?

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

von Chris (Gast)


Lesenswert?

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.

von Chris (Gast)


Lesenswert?

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

von Falk (Gast)


Lesenswert?

@ 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

von TheMason (Gast)


Lesenswert?

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

von Chris (Gast)


Lesenswert?

@ 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

von Chris (Gast)


Lesenswert?

@ 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

von Chris c. (chris78)


Angehängte Dateien:

Lesenswert?

@ 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

von Falk B. (falk)


Lesenswert?

@ 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

von Chris (Gast)


Angehängte Dateien:

Lesenswert?

@ 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

von Falk B. (falk)


Lesenswert?

@ 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

von Chris c. (chris78)


Lesenswert?

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