www.mikrocontroller.net

Forum: FPGA, VHDL & Co. FPGA Größe ausreichend für komplexen FM Synthesizer


Autor: Olaf Hilgenfeld (Firma: skinnerbox) (billy_the_mountain)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Ich möchte einen monophonen FM (PM) Synthesizer auf einem FPGA 
implementieren und frage mich, welche "Größe" gebraucht wird, also wie 
viele Logikzellen. Es geht um 4 numerisch gesteuerte Sinusoszillatoren, 
4 Butterworthfilter, zwei 4x4 Matrizen für Modulation und einen recht 
komplexen LFO der ca. nochmal den selben Umfang hat.
Reicht dafür ein Xilinx Spartan-3AN Starter Kit aus oder nicht?
Ich hab noch keine Erfahrung damit und kann die erforderliche Menge an 
Logikzellen nicht einschätzen.

Vielen Dank.
Olaf

PS. Mit welcher Samplingfrequenz kann auf dem Xilinx Spartan-3AN Starter 
Kit der DAC betrieben werden?

Autor: melt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Spontan würde ich befürchten dass du da an die Grenzen stößt... Digitale 
FM braucht schon ordentliche Abtastraten und Genauigkeiten um vernünftig 
zu klingen, ensprechend groß werden Oszillatoren und Recheneinheiten...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Olaf Hilgenfeld schrieb:
> Reicht dafür ein Xilinx Spartan-3AN Starter Kit aus oder nicht?
Ich würde sagen: ja.

Allerdings kommt es schon ein wenig auf deine Ansprüche auf die 
Rechengenauigkeit an. Es macht ja durchaus einen Unterschied, ob du 
alles mit 8 Bit oder mit 32 Bit berechnest...
Und dann ist das Interface zur Aussenwelt auch nicht uninteressant. 
Woher kommen die Rechenwerte (welcher Ton soll berechnet werden)?

> Es geht um 4 numerisch gesteuerte Sinusoszillatoren, 4 Butterworthfilter
Ein Filter hinter einem Sinusoszillator ist eigentlich ziemlich 
witzlos...

> Ich hab noch keine Erfahrung damit und kann die erforderliche Menge an
> Logikzellen nicht einschätzen.
Das geht auch mit Erfahrung nicht sooo einfach. Am einfachsten ist es, 
eine Komponente zu beschreiben, zu synthetisieren und dann zu schauen, 
wieviel Platz benötigt wird...  ;-)

Autor: dose (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Reicht dafür ein Xilinx Spartan-3AN Starter Kit aus oder nicht?
Das habe ich auch benutzt.

http://www.dossmatik.de/cordic/cordic_flyer.pdf


PS. Mit welcher Samplingfrequenz kann auf dem Xilinx Spartan-3AN Starter
Kit der DAC betrieben werden?

Ich habe den VGA-Port missbraucht.

Autor: Thomas Reinemann (Firma: abaxor engineering) (abaxor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Olaf Hilgenfeld schrieb:
>  Es geht um 4 numerisch gesteuerte Sinusoszillatoren,
> 4 Butterworthfilter,

> Ich hab noch keine Erfahrung damit
Dann ist ein IIR-Filter (dazu gehört auch der Butterworth) nicht das, 
womit du anfangen solltest. Ich habe sowieso den Eindruck, dass du ein 
analoges Design einfach digital nach bilden willst.

Jede Domäne (analog oder digital) hat ihre Vorteile, rekursive oder 
IIR-Filter sind nicht gerade die Domäne der digitalen 
Signalverarbeitung. Da braucht es eine Menge Erfahrung und 
Simulationswerkzeuge.

In digitalen Systemen setzt man lieber FIR-Filter ein, die gibt es in 
der analogen Welt gar nicht.

Tom

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit einem S3AN wirst Du nicht viel einbauen können. Je nach Güte Deiner 
Filter und Präzision der FM sprengt dein Projekt auch einen kleinen 
Virtex. Spartan 3A DSP 1800 ginge wohl.

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Es geht um 4 numerisch gesteuerte Sinusoszillatoren,
Warum betreibst Du nicht DDS? Geht im FPGA am einfachsten und bei einem 
mittelgroßen FPGA hat man auch genug Platz. Dann schaffst du bequem auch 
mehrere Kanäle gleichzeitig und mit genügend hoher Auflösung. Mit 120MHz 
FPGA Takt kannst Du Samplefrequenzen von 96k mit Faktor 128 auflösen 
(inklusive phase dithering!) und bequem auf effektiv 18bit Phasen / 
Amplitudengenauigkeit kommen. Das reicht dann für 8 Kanäle.

Besonders Vibratoeffekte sind da wesentlich sauberer und feiner 
abzubilden.

>Butterworthfilter
Da gibt es zweckmäßigeres in der digital domain.

Autor: Rene B. (themason) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke mal das ist ohne weiteres möglich.

http://www.fpga.synth.net/pmwiki/pmwiki.php?n=FPGA...

Klingt sehr interessant.

Autor: Olaf Hilgenfeld (Firma: skinnerbox) (billy_the_mountain)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-die filter hinter den sinusoszillatoren sind antialias-filter (lopass 
25kHz, steilflankig). damit bekommt man digitale fm praktisch aliasfrei 
und kann extrem stark modulieren.
 mit dem nachbilden analoger synthese hat das nichts zu tun.
-das ganze soll in 32bit berechnet werden obwohl sicher 16- oder gar 
12bit interessant wären...

"rekursive oder IIR-Filter sind nicht gerade die Domäne der digitalen 
Signalverarbeitung."
-ist es denn nicht möglich schaltungsinhärentes feedback zu 
synthetisieren (also rekursion)?

hat der Spartan 3A DSP 1800 ad/da wandler?

"Mit 120MHz FPGA Takt kannst Du Samplefrequenzen von 96k mit Faktor 128 
auflösen"
-meinst du, man kann bei 96kHz DA-wandlung intern 128-fach oversampeln? 
sowas schwebte mir vor, also gut, wenn es ginge...

Autor: Rene B. (themason) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>"rekursive oder IIR-Filter sind nicht gerade die Domäne der digitalen
>Signalverarbeitung."
>-ist es denn nicht möglich schaltungsinhärentes feedback zu
>synthetisieren (also rekursion)?

Also IIR Filter in VHDL zu realisieren ist im Prinzip nicht das Thema. 
Es kommt halt auf das Design an.
In meinem Audio-Projekt werden IIR-Filter als "Opcode" in dem 
abzuarbeitenden Programm ausgeführt. Dahinter verbirgt sich eine 
Statemachine die ein Rechenwerk schaltet/bedient, welche u.a. die 
IIR-Filter durchrechnet. Bei 80MHz Systemtakt lassen sich bei 48Khz etwa 
20 Filter durchrechnen (ich musste die Multiplikation seriell ausführen, 
da es vom Place&Route her immer Probleme gab).

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Olaf, nein- auch der Spartan DSP hat keine AD-Wandler. Du bekommst aber 
EVAL-Boards mit den meisten FPGAs, die schon Wandler drauf haben. Die 
Frage ist, wie gut die sind.

Zu Deiner anderen Frage: Es geht hier nicht wirklich um oversampling, 
sondern um phasenorientiertes Mehrfachabtasten der DDS-Tabelle und quasi 
"Tunnelung" der diskreten Sprünge. Das scheint aber Dein 
Erfahrungspektrum etwas zu sprengen ;-)

Bei einer DDS wird - anders, als beim z.B. CORDIC - der Sinuswert nicht 
iterativ berechnet, sondern direkt digital aus einem RAM geholt. Die 
Genauigkeit steht und fällt mit der Größe der Tabelle. Amplitude und 
Phase sind ja beide gerastert. Bei so geringen Frequenzen wie im 
Audiobereich, kann man die Tabelle mehrfach mit leicht veränderter Phase 
abtasten und aufaddieren, um so die Rundungsfehler und Quantisierungen 
zu mindern.

Für meinen FPGA-SYN verwende ich z.B. ein RAM mit 64kB, allein für die 
Sinustabelle (16 Bit Sinus x 1024) -> 26 Bit brutto vor den Filtern und 
etwa >22 Bit SFDR bei 192kHz Abtastung.


>die filter hinter den sinusoszillatoren sind antialias-filter
> (lopass 25kHz, steilflankig).

Kommt auf die Abtastfrequenz an. Mitunter sind weniger steile Filter bei 
genügend headromm besser, da weniger verzerrend.

Autor: Thomas Reinemann (Firma: abaxor engineering) (abaxor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Olaf Hilgenfeld schrieb:
> "rekursive oder IIR-Filter sind nicht gerade die Domäne der digitalen
> Signalverarbeitung."
> -ist es denn nicht möglich schaltungsinhärentes feedback zu
> synthetisieren (also rekursion)?

Natürlich ist das möglich

Olaf Hilgenfeld schrieb:
> -die filter hinter den sinusoszillatoren sind antialias-filter (lopass
> 25kHz, steilflankig). damit bekommt man digitale fm praktisch aliasfrei
> und kann extrem stark modulieren.

Xilinx hat in seinem Coregenerator einen DDS, der erzeugt dir schon 
einen sauberen Sinus, der hat bei uns bisher immer ausgereicht. Dort war 
er der lokale Oszillaor für eine DDC. FM haben wir damit noch nicht 
gemacht.

>  mit dem nachbilden analoger synthese hat das nichts zu tun.
> -das ganze soll in 32bit berechnet werden obwohl sicher 16- oder gar
> 12bit interessant wären...

Die Multiplizierer im Spartan sind 18x18 Bit, mit dem Coregen kannst du 
dir einen 32x32 Bit Multiplizierer generieren der entweder 1 Mult + 805 
LUTs oder 4 Mult + 124 LUTs benötigt. (Angaben für normalen Spartan, 
kein DSP)

Nach der Multiplikation hast du 64 Bits. Was machst du mit den 32 
übrigen Bits, hier musst du Runden

> "rekursive oder IIR-Filter sind nicht gerade die Domäne der digitalen
> Signalverarbeitung."
> -ist es denn nicht möglich schaltungsinhärentes feedback zu
> synthetisieren (also rekursion)?

Natürlich kannst du eine Recheneinheit mit Rückführung beschreiben, aber 
du musst dir Gedanken um die Rundung machen. Üblicherweise simuliert man 
soetwas vorher. Damit man nicht ein Haufen Zeit bei der Implementierung 
vertrödelt hat, um später festzustellen, dass die Rundungsfehler zu groß 
sind.
Rundungsfehler können einen IIR-Filter instabil machen. Man sieht es 
schon daran, das die Pole nach Rundung der Koeffizienten nach außen 
wandern.


Tom

Autor: Olaf Hilgenfeld (Firma: skinnerbox) (billy_the_mountain)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
J. S. schrieb:
"Es geht hier nicht wirklich um oversampling, sondern um 
phasenorientiertes Mehrfachabtasten der DDS-Tabelle und quasi 
"Tunnelung" der diskreten Sprünge."

Es geht tatsächlich um oversampling im Sinne einer deutlich höheren 
Samplingrate als für Audio eigentlich notwendig. Frequenzmodulation ist 
nicht bandlimitiert, d.h. bei sehr hohem Modulationsindex treten schnell 
Frequenzen im Megahertzbereich auf, selbst wenn Carrier und Modulator im 
unteren Audiobereich liegen. Da kommt dann der Headroom ins Spiel, den 
Du ansprichst. Je größer der ist, desto geringer die Amplitude der 
Frequenzalia von jenseites der Nyquistfrequenz. Diese Amplituden sind 
ebenfalls deutlich von der Steilheit des Filters abhängig. Die 
Nichtlinearitäten rund um die Grenzfrequenz sind da relativ wurscht.

Ich würde zur Sinusberechnung wahrscheinlich Chebyshev-Polynome 
verwenden...

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>doch over sampling
Bei dem Stichwort "oversampling" ging ich davon aus, daß solche Dinge 
wie Wandlerüberabtasung gemeint waren, daher habe ich das etwas 
verneint. Die DDS in der Phase zu modulieren, um eine höhrere Auflösung 
und weniger Artefakte zu generieren ist doch noch etwas anderers. Es 
kommt mehr einem Verrauschen der Phase gleich, somit liegt die Amplitude 
dieser Modulation im Bereich von ca +/- einem Abtastschritt der DDS.

Das muss man von der Modulation trennen, die im Zuge der FM verwendet 
wird / werden soll. Richtig ist, daß hier theoretisch extreme Frequenzen 
in den Spektren auftreten können, aber diese werden ja durch das 
AA-filter vor der Abtastung "genullt". Mit einem diskreten Filter 
überschaubarer Größe bekommt man das genügend gut hin, daß die 
AA-Effekte, die über bleiben, im Bereich der Genauigkeit der DDS liegen.

>Xilinx hat in seinem Coregenerator einen DDS, der erzeugt dir
>schon einen sauberen Sinus
Naja, einen relativ sauberen, der noch Filterbedürftig ist.
Die Phasen kann man auch nicht beliebig fein einstellen und der CoreGen 
tut letztlich nichts, als "manuell" einen Sinus berechnen und ihn in 
RAMs stopfen. :-)

Das mache ich dann lieber selber! Dann bekomme ich auch RAMs mit den 
benötigten Längen 2hochN-1 und 2hochN+1 gefüllt, was der DDS nicht kann.

Autor: Olaf Hilgenfeld (Firma: skinnerbox) (billy_the_mountain)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke erstmal, für die umfassenden Antworten. Ich bin wie gesagt gerade 
in der Phase wo ich mir Gedanken mache, was ich genau an Hardware 
brauche. Dazu Folgendes:
Wie gut lässt sich Gleitkommaarithmetik implementieren? Sind da Boards 
mit DSP besser geeignet?
Ich habe den Synthesizer in PD (PureData) programmiert und dafür einen 
Controller gebaut (ca. 100 Potis, Fader und Knöpfe). Die Software will 
ich nun in ein FPGA "portieren" für ein Standalone-Gerät. Ich will die 
an sich recht einfache Mathematik mit hohen Abtastraten und 
Feedbackmöglichkeiten (Modulationsmatrix) betreiben.

Olaf

Autor: Unwissender (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was erzeugt denn Pure Data für einen output??

Autor: Olaf Hilgenfeld (Firma: skinnerbox) (billy_the_mountain)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PureData erzeugt in meinem Falle Audio über die Soundkarte (den Output 
einen Synthesizers halt). An sich kann es aber jede erdenklichen Daten 
an alles schicken, was Du an den Rechner angeschlossen kriegst...
Olaf

Autor: Unwissender (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe mir das auch mal angesehen - hört sich  interessant an, aber bei 
mir kam da nur eine komische Konsole. Ist das aufwändig?

Erzeugt Pure Data ein eigenes Format? Oder läuft das Ding einfach nur 
und man muss bei der Erzeugung von C oder VHDL selber alles übersetzen?

Autor: Olaf Hilgenfeld (Firma: skinnerbox) (billy_the_mountain)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PD "erzeugt" kein Format. Du kannst damit speziell signalverarbeitende 
Schaltungen/Algorithmen/Methoden sehr leicht entwickeln, da du keine 
einzige Zeile Programmcode schreibst, sondern building blocks mit 
"Kabeln" miteinander verbindest. Das lässt sich erstens sehr leicht 
debuggen. Zweitens kannst du praktisch parallel arbeitende Strukturen 
erzeugen, indem du einfach nebeneinanderlegst was du willst... Sehr 
anschaulich und lehrreich.
Nach C bzw. VHDL musst du natürlich selbst übersetzen, aber du musst in 
diesen Umgebungen nichts mehr entwickeln und rumexperimentieren, da der 
Algorithmus schon steht. Schau dir mal ein paar Beispiele an; könnte 
sich lohnen. Olaf

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ein Tipp: Bevor Du Dir Gedanken über einen tauglichen Sinusgenerator 
machst und auf DDS oder Interpolation + kommst...

Ich habe in meinem einfachen Musiksynthies in den 80ern immer eine 
generische Funktion für den Sinus verwendet, die den realen 
Schwingungsfall von z.B. Gitarren und Harfen sogar noch etwas näher 
kommt, als der mathematische Sinus.

Du rechnest einfach Y= 4 x p * (1 - abs(p)) mit p = Phase von 0 bis 1.0. 
Das geht bei kleinen Bitbreiten in VHDL in 1-2 Schritten.

Die Funktion weicht maximal 6% vom Endwert ab und die Fehler (rote 
Kurve) sind nicht digitales Rauschen, sondern harmonische Oberwellen. Du 
erhälst so einen wesentlich musikalischeren Sinus, als mit DDS und 
aufwändiger Filterung.

Autor: sandro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
welche kurve ist denn da der sinus und welche die nachbildung?
sieht eigentlich nicht schlecht aus.

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die grüne ist der Sinus und der Orange das "fake". :-)

Im Prinzip entspricht das einfach der Potenzreihenentwicklung für den 
Sinus. Man kann die natürlich auch weiterführen, um den Sinus 
mathematisch zu verbessern, aber ein reiner Sinus ist eben recht 
unmusikalisch und Tongeneratoren, die schon Oberwellen haben, sind 
interessanter zu filtern.

In ähnlicher Weise bekommt man auch eine einfache Funktion für die halbe 
Frequenz einer Welle: Man integriert den Halbwellenbogen und gelangt zu 
einer S-Funktion, die man nach unten auf die Achse verschieben und 
stückweise verwenden kann:

Y= k * ( x*x/2 - x*x*x/3 ) + b

Diese Funktion kann man sowohl für die Generation von Wellen, als auch 
als nachgeschaltetes Effektgerät verwenden - hier als Zumischung eines 
Untertons.

Autor: Christoph K. (christoph_k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

hab etwas ähnliches vor.
ich möchte ein surround konzept, dass in PD (PureData) bereits 
existiert, auf einem Spartan 3AN StarterKit synthetisieren.
der grund für den fpga einsatz ist, dass multichannel audio dsp auf dem 
rechner zu große latenzen produziert. selbst in echtzeitumgebung mit rme 
hdsp 5296 soundkarte (auch ein spartan 3 fpga).

signal verlauf soll sein:
pc-RME Karte -> adat-I2S -> dediziertes PureData -> I2S-adat -> pc-RME 
Karte

kann das Spartan3AN StarterKit überhaupt I2S?

könnte an der stelle c-to-verilog eine lösung sein, oder wäre das zu 
ineffizient?

gruß
Ck

Autor: Sensormann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> kann das Spartan3AN StarterKit überhaupt I2S?
Ein Interface hat das per se nicht drauf, aber mn kann das natürlich 
implementieren. Falls ihr von dem S3A-Starterkit sprecht: Das hat den 
50er drauf und da geht wenig rein. Sehr wenig.

DAS hier ist das richtige board derzeit:

Ebay-Artikel Nr. 220736567863

39,- Euro und ne Menge drauf.

Autor: user (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sensormann schrieb:
>> kann das Spartan3AN StarterKit überhaupt I2S?
> Ein Interface hat das per se nicht drauf, aber mn kann das natürlich
> implementieren. Falls ihr von dem S3A-Starterkit sprecht: Das hat den
> 50er drauf und da geht wenig rein. Sehr wenig.
>
> DAS hier ist das richtige board derzeit:
>
> 
Ebay-Artikel Nr. 220736567863
>
> 39,- Euro und ne Menge drauf.

also ich würde lieber das nehmen, das fpga ist ~4 mal so groß
http://www.terasic.com.tw/cgi-bin/page/archive.pl?...

Autor: Christoph K. (christoph_k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,

danke für den hinweis.
leider kommen die alteras nicht in frage, da ich für andere projekte ne 
bestimmte intellectual property benötige, die ich bislang nur bei xilinx 
gefunden habe (IEEE 802.1AVB (Audio Video Bridging)).

jemand vielleicht einen erfahrungsbericht wie gut c-to-verilog 
funktioniert? kann man damit komplexe programme "so einfach" von c nach 
verilog übersetzen?

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christoph K. schrieb:
> jemand vielleicht einen erfahrungsbericht wie gut c-to-verilog
> funktioniert?
Nein, keine Ahnung. Wo gibt es das zu kaufen und für wieviel Geld?

> kann man damit komplexe programme "so einfach" von c nach
> verilog übersetzen?
Wahrscheinlich nicht, sonst wäre ich schon arbeitslos und müßte mir was 
anderes suchen...

Duke

Autor: Rene B. (themason) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>kann das Spartan3AN StarterKit überhaupt I2S?

I2S ist doch nur ein Protokoll bzw Bitstrom.
Und wenn ein FPGA das nicht hinbekommt ....

Aber keine sorge. I2S kann man ohne Probleme in VHDL implementieren.
Sonst würde mein Audio-Projekt nicht auch schon seit 4 Jahren vor sich 
hindümpeln und tuten (wenn ichs denn mal wieder Anschließe bzw mich 
damit wieder beschäftige)

Autor: Christoph K. (christoph_k)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
> Nein, keine Ahnung. Wo gibt es das zu kaufen und für wieviel Geld?
für umme...
www.c-to-verilog.com
oder aber nach VHDL auch FPAGC oder SHARK

worauf muss ich achten, wenn ich ein c "programm", eher ein algorithmus, 
nach VHDL übersetzen will?
kennt jemand ein tutorial?
habe vorkenntnisse in fpga synthese und VHDL... aber auch nicht mehr
es soll möglichst schnell gehen ^^

Gruß
Ck

Autor: Zonk-8000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> www.c-to-verilog.com

Uiui das macht ja aus 10 Zeilen C-Code (deren Standard Beispiel) grob 
1000 Zeilen supi toll übersichtlichen Verilog Code ;)

...
i_exitcond8___0___ <= (i_cloned37___0___ == (32));
i_reduced_and27238 <= ((((((1)) & (((i_cloned___0___) >> ((24)))))) + ((((1)) & (((i_cloned___0___) >> ((23))))))))+((((((1)) & (((i_cloned___0___) >> ((4)))))) + ((((1)) & (((i_cloned___0___) >> ((3))))))));
i_reduced_and27242 <= ((((((1)) & (((i_cloned___0___) >> ((16)))))) + ((((1)) & (((i_cloned___0___) >> ((15))))))))+((((((1)) & (((i_cloned___0___) >> ((26)))))) + ((((1)) & (((i_cloned___0___) >> ((25))))))));
i_reduced_and27246 <= ((((((1)) & (((i_cloned___0___) >> ((18)))))) + ((((1)) & (((i_cloned___0___) >> ((17))))))))+((((((1)) & (((i_cloned___0___) >> ((14)))))) + ((((1)) & (((i_cloned___0___) >> ((13))))))));
i_reduced_and27250 <= ((((((1)) & (((i_cloned___0___) >> ((28)))))) + ((((1)) & (((i_cloned___0___) >> ((27))))))))+((((((1)) & (((i_cloned___0___) >> ((30)))))) + ((((1)) & (((i_cloned___0___) >> ((29))))))));
...

Autor: Uwe Bonnes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den Code mit Testmuster testen und synthetisieren und mit den richtigen 
Randbedingungen durch P&R jagen, und wenn etwas verneuftiges dabei 
herauskommt und die FPGA Groesse nicht explodiert, dann waere die Aufgae 
erledigt.

Aber 1000 Zeilen Code versprechen etwas anderes...

Autor: Mr Hale (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schock lass nach. Vollkommen untauglich. Dann doch bitte die 
C-Strukturen direkt in einen schnellen Softcore setzen. Was als Software 
gebaut ist, wird eh nicht schnell und strukturell so gebaut, dass es 
eine gute HW gibt.

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Update zur Machbarkeit eines (Audio-) FM-Synthesizers in Hardware:
Beitrag "Drum-Computer in VHDL"

Yes we can :-)

-----------------

Falls der TE noch liest: Effektiver sollte das Ganze in einem DSP zu 
machen sein, wenn es mit float gerechnet werden soll, aber bei den von 
Dir beschriebenen Bandbreiten (MHz) ist das FPGA ein Muss.

Für eine technische App habe ich in einem Spartan einen Modulator 
laufen, der komplex einen Datenstrom von 5MHz auf 200MHz aufmoduliert. 
Um Bandbreite zu gewinnen, mache ich das Mehrfachparallel, d.h. es 
werden 4(8) Sin/Cos-Paare in einem Schritt verarbeitet.

Autor: Mr. Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jürgen S. schrieb:
> Für meinen FPGA-SYN verwende ich z.B. ein RAM mit 64kB
Du schwendest hoffentlich keine 64kB RAM, nur um einen Sinus zu 
produzieren. Warum nimmst Du keinen CORDIC?

Christoph K. schrieb:
> ich möchte ein surround konzept, dass in PD (PureData) bereits
> existiert, auf einem Spartan 3AN StarterKit synthetisieren.
Könntest Du das bitte etwas näher erläutern, wie das mit PureData 
funktioniert? Soweit ich mich nun da hindurchgeklickt habe, ist das nur 
einen Art Simulink zum Simulieren. Wird da auch Code erzeugt? Oder wie 
gelangst Du zum VHDL?

Autor: TippGeber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mr. Zulu schrieb:
> Christoph K. schrieb:
>
>> ich möchte ein surround konzept, dass in PD (PureData) bereits
>> existiert, auf einem Spartan 3AN StarterKit synthetisieren.
> Könntest Du das bitte etwas näher erläutern, wie das mit PureData
> funktioniert?
Gerade gestern wurde eine neuer Internetservice eingerichtet. Er richtet 
sich speziell an Personen, die in der Audio- und Videotechnik unerfahren 
sind und sich über Möglichkeiten informieren wollen, komplexe 
Synthesizer in FM-Technik zu implementieren und nicht wissen, was 
PureData ist. Der hierfür eingerichtete Service heisst Guhgel. Man geht 
auf die Guhgelseite und tipp sein Suchwort ein:

http://puredata.info/

Autor: TippGeber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
>> Es geht um 4 numerisch gesteuerte Sinusoszillatoren, 4 Butterworthfilter
>
> Ein Filter hinter einem Sinusoszillator ist eigentlich ziemlich
>
> witzlos...
Warum? DDS-Sinüsse sind nicht die Besten und ein Filter kann helfen, das 
zu verbesseren.

Autor: Mr. Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TippGeber schrieb:
> Man geht auf die Guhgelseite und tipp sein Suchwort ein:
> http://puredata.info/
Wer die Frage hat, braucht für den Spott nicht zu sorgen, ich weiss. 
Aber Dein link liefert wenig zum Thema und sagt inbesondere nichts 
darüber aus, wie Christian das macht. Leider scheint er aber nicht mehr 
aktiv, genausowenig, wie die anderen Synthesizeringenieure, die bisher 
beigetragen haben. Alle verschwunden?

> Synthesizer in FM-Technik zu implementieren
Fragen wir doch mal so: Warum überhaupt FM-Technik? Meiner Recherche 
nach hat sich Yamaha seinerzeit die Rechte an der Technik gesichert um 
(als einziger ?) Musiksynthesizer zu bauen. Was ist der Vorteil?

Warum nicht einfach klassischer Sinus und dann deduktive Synthese, wie 
es immer genannt und realisiert wird?

Zur Grundfragestellung: Wozu muss man einen FPGA hernehmen, um einen 
solchen Synthesizer zu erzeugen? Die Frequenzen erstrecken sich bis 
maximal 15kHz? Modulationen dieser Art müsste jeder Mikrorechner 
hinbekommen, direkte Synthese erst Recht. Zumal ich bei Rene's Projekt 
zu erkennen glaube, dass der dort verwendete FPGA auch nur zyklisch 
rechnet, wie ein Microprocessor und nicht Parallel wie ein FPGA.

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mr. Zulu schrieb:
>Jürgen Schuhmacher schrieb:
>> Für meinen FPGA-SYN verwende ich z.B. ein RAM mit 64kB
> Du schwendest hoffentlich keine 64kB RAM, nur um einen Sinus zu
> produzieren. Warum nimmst Du keinen CORDIC?

Weil ich den Sinus in dieser erwähnten FPGA-Version sehr genau erzeugen 
möchte, was seinen Grund in einer nachgeschalteten Oberwellensynthese 
hat, die ich mittels einer analytischen Rechnung vollziehe, wie ich es 
bei meinem LaPlace-Generator beschrieben habe. Damit das vernünftig 
funktioniert, muss der Sinus sehr oberwellenarm sein, d.h. ich muss ihn 
entweder sehr genau berechnen und/oder interpolieren. Meinen Erfahrungen 
mit diesem Thema zufolge ist es einfacher, eine kleinere Tabelle zu 
nehmen, diese zu interpolieren und per Filterung zu glätten. Ein Cordic 
liefe auf eine vergleichsweise grosse Tiefe hinaus, die nicht nur 
richtig viel Latenz bringt, die ich bei meiner Architektur nicht 
gebrauchen kann, weil ich im pipeline Betrieb viele andere Werte 
deselben prozessierten Kanals registerintensiv mitschleppen müsste, 
sondern auch noch viel Platz braucht, was in den kleinen FPGAs recht 
relevant ist.

Mit "Platz" sind hierbei konkret DSPs und Register gemeint. Die 
Vorbelegung im RAM macht da durchaus Sinn. Bei den boards, die ich für 
meine Musik-Synthesizer verwende, ist meist ein externes RAM drauf. Beim 
kleinen Altera sind es wenigstens 64MB, da machen 0,1% "Verschwendung" 
nicht viel aus :-)

Daher gehe ich sogar noch einen Schritt weiter und hinterlege für die 
Synthesizer, die ich mit einem echten Sinus ausstatten möchte, 
inzwischen eine 256k lange und 32Bit breite Tabelle mit je 16 Bit für 
den Sinus und einem Komplement für den Cosinus. Damit habe ich die 
Steigung für die Interpolation direkt parat und brauche nicht zweimal zu 
lesen - komme also auf entsprechende Bandbreiten und Genauigkeiten.

Mr. Zulu schrieb:
> Fragen wir doch mal so: Warum überhaupt FM-Technik? Meiner Recherche
> nach hat sich Yamaha seinerzeit die Rechte an der Technik gesichert um
> (als einziger ?) Musiksynthesizer zu bauen. Was ist der Vorteil?

Tja, gute Frage. Yamaha nutzt seit Mitte der 90er die AWM-Synthese, also 
eine Mischung aus Wavetable und Filter. Dasselbe findet man auch bei 
Korg. Welche patentrechtlichen Themen da eine Rolle spielen, kann ich 
nicht sagen. Rein technisch sehe ich keine qualitativen Vorteile oder 
Aspekte, die die FM in der Musik prädestinieren. In der HF-Technik ist 
das was anderes! Reine FM-Synthese kenne ich eigentlich auch nur von den 
EMU-Chips, die auf den Soundblasterkarten verbaut worden und auch die 
arbeiten seit über 20 Jahren auch mit Wavetable -> Soundfonts!

Autor: high tec ing (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frage an Olaf und Christoph: Habt ihr das realisiert? Ich möchte etwas 
Ähnliches für Videodaten / SDR bauen. Die Modulationsfrequenzen liegen 
im Bereich bis 30 MHz. Ich würde es gerne mit einem FPGA realisieren, 
das mit einer freien Webversion zu bearbeiten ist. Wäre da der Spartan 
oder der Cyclone besser?

Ich brauche bis zu 200 MHz Trägerfrequenz und insgesamt 8 Kanäle mit 
komplexer Rechung.

Autor: René D. (Firma: www.dossmatik.de) (dose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
high tec ing schrieb:
> Frage an Olaf und Christoph: Habt ihr das realisiert? Ich möchte etwas
> Ähnliches für Videodaten / SDR bauen. Die Modulationsfrequenzen liegen
> im Bereich bis 30 MHz. Ich würde es gerne mit einem FPGA realisieren,
> das mit einer freien Webversion zu bearbeiten ist. Wäre da der Spartan
> oder der Cyclone besser?
>
> Ich brauche bis zu 200 MHz Trägerfrequenz und insgesamt 8 Kanäle mit
> komplexer Rechung.

Also wenn du 200MHz raushauen willst dann musst du größer 400MHz 
arbeiten.
Abtasttheorem!!!

Das wird mit beiden Bausteinen nichts gescheites.


Besser ist die 30MHz Modulation im FPGA zu erzeugen und extern auf die 
Trägerfrequenz zu modulieren, Wenn du AM modulieren willst.

Autor: high tec ing (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
René D. schrieb:
> Besser ist die 30MHz Modulation im FPGA zu erzeugen und extern auf die
>
> Trägerfrequenz zu modulieren, Wenn du AM modulieren willst.

also ich bräuchte 200MHz als Träger und eine Frequenz von 0 ... 30MHz 
draufmoduliert, aber FM. Die Randbedingungen der 400 MHz ist mir da aber 
nicht klar.

Autor: René D. (Firma: www.dossmatik.de) (dose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo hast du  dein Ing her?
high tec ing

http://de.wikipedia.org/wiki/Nyquist-Shannon-Abtasttheorem

f_abtast > 2*f_max

Dein FPGA gibt abgetastete Werte aus.

Autor: high tec ing (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso, das meinst Du - ich bezog mich erstmal auf die digitale domain. 
Was die Ausgabe angeht, muss ich mir Gedanken machen. Gfs reichen die 
400 MHz gar nicht. Der Träger bleibt ja bei 200 , aber die 30 MHz sind 
ja variabel - können also auch 29,994 sein.

Autor: René D. (Firma: www.dossmatik.de) (dose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 400 MHz gar nicht. Der Träger bleibt ja bei 200 , aber die 30 MHz sind
> ja variabel - können also auch 29,994 sein.

0,006/30=0,0002 Dann musst du alles auf 1/5000 alles genau bauen.

Autor: high tec ing (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, wären dann 200 MHz x 5000 = 1000 GHz, da sehe ich mich mal nach 
geeigneten FPGAs um.

Jetzt aber im Ernst: Das kann es ja wohl nicht sein. Meines Erachtens 
reicht es, die 200 MHz mit den 0...30 MHz zu mischen, weil dann nur 230 
MHz rauskommen können. Oder täusche ich mich da?

Ok, beim Audio sind es 48kHz die z.B. mit einer Tonfrequenz von sagen 
wir 1kHz gemischt werden. Da könnte man auch argumentieren, dass es auch 
999,1 Hz sein könnten und damit 48kHz / 1/10000 = 500 MHz gebraucht 
werden. Ist dem so? Oder beschränkt man sich da auf die echten Tonhöhen 
mit den 1/12tel Sprüngen?

Bei den DDS Chips kann man die Frequenz zum modulieren voreinstellen, 
die Genauigkeit beträgt wenigstens 16 Bit. Intern laufen die z.B. mit 2 
GHz, damit muss es ja gehen. Oder geht das nur grob?

Autor: René D. (Firma: www.dossmatik.de) (dose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
high tec ing schrieb:
> ok, wären dann 200 MHz x 5000 = 1000 GHz, da sehe ich mich mal nach
> geeigneten FPGAs um.
>
> Jetzt aber im Ernst: Das kann es ja wohl nicht sein. Meines Erachtens
> reicht es, die 200 MHz mit den 0...30 MHz zu mischen, weil dann nur 230
> MHz rauskommen können. Oder täusche ich mich da?
>

Sagte ich bereits. FM geht auch mit Mischen.

>Besser ist die 30MHz Modulation im FPGA zu erzeugen und extern auf die
>Trägerfrequenz zu modulieren, Wenn du AM modulieren willst.

Autor: high tec ing (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, dann schaue ich mal und melde mich wieder, wenn ich was habe.
Danke.

Autor: high tec ing (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe in den vergangenen Tagen mit den IO-Delays herum experimentiert 
und denke, dass ich damit arbeiten kann. Ich bekomme den Takt damit 
sicher genau genug hin, um das Signal ausreichen fein modulieren zu 
können.

Laut Spezi sind 50ps einstellbar, bei den angestrebten 200MHz = 5ns sind 
es Faktor 1 zu 100. Der Empfänger wird so und so filtern, um die 
Frequenz wiederherzustellen.

Ich muss mir noch noch überlegen, wie ich das an das Ziel übertrage.

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
high tec ing schrieb:
> ok, wären dann 200 MHz x 5000 = 1000 GHz, da sehe ich mich mal nach
> geeigneten FPGAs um.

Eine Möglichkeit wäre, 10.000 FPGAs parallel zu schalten und diese mit 
jeweils 100 MHz zu betreiben. :-) Das wäre dann die erste SDR-Platine 
mit Starkstromanschluss. Die geschätzten 50kW liessen sich mit einigen 
wenigen 3-Phasen Leitungen versorgen. Mal zurück zur Realität:

high tec ing schrieb:
> Ok, beim Audio sind es 48kHz die z.B. mit einer Tonfrequenz von sagen
> wir 1kHz gemischt werden. Da könnte man auch argumentieren, dass es auch
> 999,1 Hz sein könnten und damit 48kHz / 1/10000 = 500 MHz gebraucht
> werden. Ist dem so? Oder beschränkt man sich da auf die echten Tonhöhen
> mit den 1/12tel Sprüngen?

Ich glaube, hier liegt noch ein grundsätzliches Problem beim Verständnis 
der digitalen Signalrepräsentation vor.

Die digitalisierten Werte, werden nicht diskret unterteilt oder in der 
Zeitachse skaliert, wenn man Frequenzmodulation betreibt. Auch beim 
Audio wird ein Vibrato nicht durch das Verschieben der Frequenzachse 
realisiert, wenn man mal von einem aktiven Entjittern durch 
Taktmanipulation absieht. Zwar kann man z.B. die Gesangspur einer 
Studioaufnahme mit Vibrato versehen, indem man den normalen Datanstom 
ausgibt und den Takt mit einem Verschiebeverfahren mit Schwingungen 
beaufschlagt, wie ich das hier getan habe : 
http://www.96khz.org/oldpages/frequencyshifter2.htm

... und umgekehrt verjitterte Aufnahmen von Bändern mit 
Gleichlaufschwankungen bei der Digitalisierung durch passende Steuerung 
des AD-Wandlers kompensieren, praktisch wird die Modulation aber in die 
Amplitudenachse abgebildet. Die Zeitpunkte der Abtastung bleiben 
konstant, es ändern sich nur die Werte, die im digitalen Datenstrom 
auftauchen. Sie entsprechen derjenigen analogen Welle, die durch die 
Modulation verkürzt oder verlängert würde.

Dass dies so funktioniert liegt an dem Umstand, dass nach der 
Rekonstruktion mit dem AA-Filter wieder eine kontinuierliche Wellenform 
entsteht, wenn die abgebildeten Frequenzen unterhalb der Nyquistfrequenz 
liegen. Es reicht also, die beiden Wellen zu multiplizieren, um den 
mathematisch exakten Datenstrom zu bekommen.
Soweit die Theorie.

Praktisch sieht es etwas anders aus, weil man den idealen Filter für 
diese Rekonstruktion nicht bauen kann, bzw. nicht genügend gut, um die 
Zielfrequenz und die Abtastfrequenz komplett zu trennen, bzw. soäter mal 
die Trägerfrequenz zu entfernen. Deshalb arbeitet man mit möglichst 
hoher Abtastrate, um das Signal zu repräsentieren, weil die 
Filterprobleme dann geringer werden. Beim Audio sind es z.B. 192kHz, um 
Oberwellen bis real 12kHz-15kHz noch sehr gut hinzubekommen. Der Faktor 
10 ist da schon ziemlich gut und reicht bei entsprechenden Filtern auch 
einigermassen für die angestrebte Genauigkeit von 16+ aufwärts.

Wie gut die 230 MHz fürs SDR nachher analog aussehen, hängt somit vom 
DA-Wandler und dem nachgeschalteten realen Filter ab. Üblicherweise 
haben derartige analoge Filter einige Macken, die man digital 
vorkompensieren kann, so wie der anloge Filter seinerseits die Schwächen 
digitaler Filters beheben hilft. Die Frage ist, ob die überhaupt analog 
benötigt werden oder erst noch weiterverarbeitet werden sollen. Unter 
der Annahme der späteren korrekten AA-Rekonstruktion (das ist der 
Grundtenor bei all diesen Überlegungen) ist der Datanstrom soweit 
erstmal clean, solange er in der digitalen Domain bleibt. Klar ist 
natürlich, dass man sich mit jeder rundung der Phase und der Amplitude 
ein Rauschen einfängt, dass später zutage treten wrid.

Was man natürlich tun kann, ist die Trägerfrequenz, die Abtastfrequenz 
und die Filter aufeinander abzustimmen. So sollte ein digitales Filter 
bezüglich der Dämpfung im Sperrbereich für die Trägerfrequenz 
idealerweise eine Null haben, weil diese dann komplett verschwindet - 
des weiteren empfehlen sich sinnvolle Konstellationen von Trägerfrequenz 
und festen Modulationsfrequenz, also möglichst ein Ganzzahlverhältnis, 
sodass die entstehnde Schwebung eine kurze Periodendauer hat und zudem 
noch zur Integraltiefe des Filters passt, wenn machbar. Speziell bei 
DDSen ist es ja so, dass bei bestimmten Frequenzen eine sehr 
niederfrequente Schwebung entsteht, die sich dann im Endsignal abbildet. 
Dies lässt sich durch eine Variation der Tabellenlänge kompensieren, die 
zu einer ungeraden Anzahl von Durchläufen per Perdiode führt. die 
Schwebung ist dann auch einige Peridoen beschränkt, schwingt also 
hochfrequent und wird durch ein Filter besser gedämpft.

Nochmal zum Beispiel des Audio und der Tonhöhen bei der DDS: Ein Vibrato 
wird einfach dadurch erzeugt, indem man die Phase schneller oder 
langsamer addiert und somit frühere oder spätere Amplitudenwerte ausgit. 
Die Abtastrate bleibt gleich. Eine Interpolation ist nicht unbedingt 
nötig, wenn der Fehler im Bereich der Auflösung von Y bleibt. Sie ist 
aber dann sehr hilfreich, wenn man mit zu kleinen Tabellen arbeiten 
muss.

Daher kann man auch für diesen Frequenzbereich mit FPGAs direkt 
modulieren und mit parallelen Methoden auch noch um einige Stufen 
oberhalb der Taktfrequenz.

Beitrag "Re: Rechnen im FPGA, wenn Daten schneller, als der Takt"


> Welche Abtastfrequenz muss ich dann haben?
Ich nehme mal an, dass in Deinem Beispiel die 200 der Träger sein soll 
und die 30MHz irgendwann (verarbeitet, dezimiert) ausgegeben / -gewertet 
werden sollen. Massgeblich ist daher die Representation der 200 in der 
Abtastfrequenz und der oberhead zu den 30 MHz. Ich würde ich einen 
steilen TP sehen, der mit 2x300 MHz Taktfrequenz (6x Ft) gefahren wird 
und eine GF von 300/8 MHz hat mit Nullstelle bei 200MHz. Mit etwas 
Gefummel geht es auch mit der 5 fachen Frequenz - darunter wird es ein 
bissl "wackelig".

Mit der Einschätzung hinsichtlich der Spartanfrage gebe ich daher René 
recht: Das wird aufwändig. Du bräuchtest 4 Rechenstränge mit je 150 MHz, 
das können die noch einigermassen. Sowas ist eine Aufgabe für Virtex und 
Stratix.

Autor: Gustl Buheitel (-gb-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte auch gerne was mit FM machen :-)

Ich habe verstanden, dass hier nicht die Tonhöhe des zu modulierenden 
Tones die Trägerfrequenz verschiebt, sondern nur die Amplitude.

Jetzt bekomme ich ein analoges Sognal (Audio) an einem 8-Bit ADC rein 
ins FPGA und möchte damit die Trägerfrequenz ändern.

Gemacht wird das einfach mit einem Zähler bei dem das höchste Bit dann 
auf die Antenne gegeben wird. Wenn ich also Trägerfrequenz von 100MHz 
haben will, muss an der Antenne 1010101010 ankommen und eine "10" Folge 
darf 10ns Dauern, also der Zähler muss mit mindestens 200MHz zählen.

Wenn jetzt bei dem 8-Bit Wert die Nulllinie bei 127 liegt, dann muss ich 
also den Zähler so gestalten, dass jedes Mal wenn 127 addiert wird die 
Grundfrequenz unverändert rauskommt, also wenn ich z.B. einen 7-Bit 
Zähler nehme würde das passen - Aber der Rest passt natürlich noch 
nicht.

Es gibt dann vermutlich ein "Band" also wieweit die Frequenz verändert 
werden darf maximal für das Minimum und das Maximum der Amplitude. Wie 
sind da die Werte? Diese brauche ich vermutlich um den Zähler richtig 
einzustellen damit das Radio das am Ende auch empfangen kann.

Bin ich auf einem grob richtigen Weg oder habe ich krasse Fehler 
drinnen?

Vielen Dank!

Autor: Gustl Buheitel (-gb-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier:

http://hamsterworks.co.nz/mediawiki/index.php/FM_SOS

Geht es um 75kHz nach oben und nach unten von der Mitte aus, also 150kHz 
Breite - ist das korrekt so oder wird was Anderes empfohlen?

Autor: Jochen Fe. (jamesy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach der Carson-Formel liegen 99% der Leistung einer FM innerhalb 2*Fmod 
+ 2*Fhub, daher ist ein Stereo-Rundfunksignal 2*75 kHz + 2*57 kHz breit.

Autor: Gustl Buheitel (-gb-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke! Also kann ich auch locker 200kHz Breite nehmen. Warum hat der in 
dem Beispiel 320MHz für eine Frequenz von 91MHz verwendet? Ich meine ja 
der Takt muss schon deutlich schneller sein weil man ja so die 
unterschiedlichen Abstände erzeugt aber gibt es da ein unteres Limit? 
Wenn ich 100MHz erreichen will, gibt es da einen minimalen Takt am Accu?

Autor: Jochen Fe. (jamesy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach dem Nyquist-Theorem müssen mindestens 2 Punkte pro Periode 
ausgegeben werden für eine eindeutige Definition. Mehr ist besser.

Autor: FPGA-Fuzzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
2 Punkte reichen nie und nimmer bei der DDS. Wenn das was werden soll 
braucht man erfahrungsgemäß einen Faktor 10 in der Abtastung. Mit FPGAs 
ist da auch irgendwann Schluss. Die 91 sind ein Kundstgiff: Durch die 
Verstimmung tastet der Träger die aufmodulierte Frequenz irgendwann 
komplett ab.

Autor: high tec ing (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich komme nochmals zurück auf mein Problem mit den +/-30 MHz. Brächte es 
etwas auf 100MHz Trägerfrequenz herunterzugehen?

Juergen S. schrieb:
> Auch beim Audio wird ein Vibrato nicht durch das Verschieben der
> Frequenzachse realisiert ...
Danke für Deine Erklärungen. Eine Frage hätte ich noch. Du schreibst:

> Unter der Annahme der späteren korrekten AA-Rekonstruktion,
> ist der Datenstrom soweit erstmal clean, solange er in der
> digitalen Domain bleibt.
D.h. solange ich digital bleibe, reicht die doppelte Abtastfrequenz?

Autor: Gustl Buheitel (-gb-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ist das mit dem Accumulator und dem Takt mit dem ich addiere?

wenn ich einen 8-Bit Accu habe und in jedem Takt 128 dazuaddiere, dann 
kippt in jedem Takt das höchste Bit. Wenn ich das jetzt etwas, und zwar 
nur minimal, verschieben will, dann addiere ich etwas kleinere oder 
leicht größere Werte. Aber dann kippt das höchste Bit trotzdem fast 
immer bei jedem Takt und nur ganz selten sieht es anders aus.

Bei einem 4-Bit Accu zu dem ich immer 8 addiere erhalte ich am höchsten 
Bit:
01010101010101
addiere ich aber jetzt 9:
01010101101 ...

Ich erhalte also nicht einen konstant minmal größeren Abstand zwischen 1 
und 0 zeitlich, sondern nur ganz selten. Also müsste ich mit einer 
deutlich höheren Frequend wie der die ich am Ende verschieben will 
addieren. Aber wieso geht das mit 91MHz und 320MHz? Sooo viel großer ist 
das doch auch nicht?

: Bearbeitet durch User
Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
high tec ing schrieb:
> D.h. solange ich digital bleibe, reicht die doppelte Abtastfrequenz?
In der Theorie ja. In der Betrachtungswelt der idealen SV reicht ein 
infinitisimales Plus der Abtastfrequenz zu deren Representation. Du 
bekommst aber damit eine Schwebung, die weggefiltert werden müsste. Rein 
mathematisch geht das wunderbar, weil die Schwebung aus Frequenzen 
besteht, die mit einem idealen AA-Filter verschwinden. Der Umstand, dass 
es diesen nicht gibt, ist der Grund der Überabtastung.

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gustl Buheitel schrieb:
> wenn ich einen 8-Bit Accu habe und in jedem Takt 128 dazuaddiere, dann
> kippt in jedem Takt das höchste Bit.

Dann bist Du genau an der theoretischen Betriebsgrenze der DDS mit 50% 
Abtastfrequenz. Und Du bist unter Zuhilfennahme der o.g. Darstellung 
bezüglich der Nichtidealität realer Filter bereits deutlich ÜBER der 
praktischen Betriebsfrequenz von DDS-en.

> Ich erhalte also nicht einen konstant minmal größeren Abstand zwischen
> 1 und 0 zeitlich, sondern nur ganz selten.
Das ist der der DDS-Methodik eigenen Jitter, der auch als digitales 
Phasenrauschen bezeichnet wird. Deine Tabelle / Syntheseeinheit muss in 
Verbindung mit dem Phasenvektor genügend groß sein, damit dieser Effekt 
verschwindet, respektive im AA-Filter genügend gedämpft wird.

Stelle Dir die Laplace-Transformation dieses Phasenrundungssprunges dar, 
genauer das dazu generierte dy/dx in Deiner DDS-Tabelle und überlege, 
wie dieser Impuls im Filter gedämpft wird.

: Bearbeitet durch User
Autor: Christian Berger (casandro) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jürgen Schuhmacher schrieb:
> Rein technisch sehe ich keine qualitativen Vorteile oder
> Aspekte, die die FM in der Musik prädestinieren.

Hmm, rechnen wir doch mal ganz einfach mal. Für "Wavetable-Synthese" 
muss man die Quelle samplen. Bei mindestens 20 kHz Abtastrate und 0.1 
Sekunden (man kann ja Schleifen machen) sind das schon 2000 Abtastwerte 
die Du speichern musst. Das sind mindestens 1000 Bytes... für jeden 
Klang! Das war in den 1980gern ziemlich viel Speicher. So ein typisches 
Keyboard hätte viele Kilobytes an Speicher gebraucht.

Bei der FM-Synthese musst Du hingegen nur sehr wenige Parameter 
speichern, und diese Parameter kannst Du vom Nutzer einstellbar machen. 
Sprich der Benutzer kann relativ einfach neue Klänge erstellen, und die 
sind so klein, dass er die Parameter abschreiben kann.

Die FM-Synthese ist eine der Möglichkeiten mit sehr wenig Speicher sehr 
interessante Klänge zu erzeugen.

Autor: Gustl Buheitel (-gb-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Jürgen Schuhmacher:

Das ist mir schon klar, ich möchte aber eine Frequenz von um die 91MHz 
erreichen und kann meinen 4C Spartan 3 nur mit 275MHz takten. Das 
erstaunliche: Es funktioniert trotzdem und ich kann mit einem normalen 
Radio im ganzen Garten die Musik hören die ich auf den AD Wandler 
gegeben habe.

Das finde ich ist das eigentlich komische, also obwohl mein Zähler, also 
das oberste Bit fast immer mit der gleichen Frequenz kippt und nur ganz 
selten einen Takt länger bleibt oder einen früher kippt reicht das 
anscheinend aus um es mit dem Radio zu empfangen. Klingt noch dazu 
erstaunlich gut.

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Gustel

Kann schon hinkommen. Die 275MHz sind gegenüber der 91MHz ja auch um 
einiges höher, als nur Faktor 2. Mit einem guten steilflankigen Filter 
kann man bis zu 40% Nutzfrequenz erzielen, wenn man einen Sinus 
herstellen will - je nach Güteanspruch. Bei der FM braucht man noch 
etwas "Hub" - passt so in etwa. Was für einen Filter verwendest Du? 
Deine Antenne, wie immer sie aussehen mag, dürfte einen 
Resonanzschwingkreis bilden und eine entsprechende Filterwirkung haben.

Wie ist das inzwischen eigentlich rechtlich? Eigene Radiosender zu bauen 
war doch immer verboten?

@Christian
Mit Blick auf das Thema RAM hast Du freilich Recht, wobei ich die FM 
Synthese eher mit der klassischen Synthesizertechnik der 
additiven/deduktiven Synthese vergleichen würde und da braucht(e) man 
auch nur ein wenig RAM für die Parameter. Die wavetable-Synthese kam 
einiges später, ja, allerdings haben wir sie ja nun, von daher war der 
Nutzen der FM aus musikalischer Sicht ab da begrenzt. Musikalisch ist 
WTS flexibler, denn das, was mit FM Operatoren und virtueller 
Synthesetechnik möglich ist, kann ja auch auf das WAVE angewendet 
werden. Nahezu alle WT-basierten Synthies und Keyboards haben 
entsprechende Manipulationsmöglichkeiten intus, z.b. KORG - teilweise 
sogar auch die Yamaha. Habe noch eines dieser Viecher von 1990 (PSR) 
hier rumliegen.

Autor: Gustl Buheitel (-gb-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rechtlich darf man mit 50nW senden, das ist nicht viel und ich bin mit 
einem Pin samt Leiterbahn und ohne Antenne vermutlich schon deutlich 
drüber.

Filter verwende ich auch nicht und mir ist immer noch unklar was das mit 
einem Sinus zu tun hat. Also:

Ich habe einen Zähler, 32 Bit. Und zu dem Addiere ich in jedem Takt eine 
Zahl. Bei FM verschiebt man ja etwas die Frequenz, also addiere ich 
einen etwas höheren Wert wenn die Frequenz schneller und einen 
niedrigeren Wert, wenn die Frequenz langsamer werden soll. Also komplett 
ohne Sinus oder so. Auf die Antenne wird in jedem Takt das höchstwertige 
Bit des Zählers gegeben. Immer noch kein Sinus.

Der Zähler ist lang im Vergleich zur maximalen Wertänderung den ich 
addiere. Also sagen wir mal als Beispiel bei der Mittenfrequenz kippt 
das obere Bit bei jedem 4. Takt. Jetzt will ich die Frequenz minimal 
erhöhen, also addiere ich einen leicht höheren Wert. Was passiert? Das 
Bit kippt immer noch bei jedem 4. Takt bis auf wenige Ausnahmen, denn 
manchmal kippt es einen Takt früher, aber extrem selten.
Aus einem

000111000111000111000111000111000111000111000111000111000111000111000111

wird ein

000111000111000111000111000111000111000111001110001110001110001110001110

Ich habe das jetzt nicht simuliert, werde das aber noch machen. Die 
änderung ist jedenfalls nur extrem selten und ich verstehe einfach nicht 
wie das Radio das erkennen soll.

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha, nun verstehe ich das. Du gibts den Phasenvektor selbst aus, bzw 
dessen höchstes Bit. Damit pulst Du mit einem Rechteck auf Deine 
Pseudoantenne, so wie beim PWM. Üblicherweise würdest Du anhand des 
Phasenvektors in eine Sinustabelle schauen und diesen Wert per DAC 
ausgeben.

Ich würde sagen, dass Deine Anordnung, also die Leiterbahnwiderstände + 
parasitäre Kapazitäten + Leiterbahn-Induktivität einen Schwing-Kreis 
bilden, bzw eine Dämpfung darstellen, die dann etwas halbwegs 
sinusförmiges überträgt. Die Oberwellen, die im Rechteck stecken, werden 
stärker gedämpft und beeinflussen zudem den Empfänger nicht.

Das Ganze geht aber schon ziemlich in Richtung Störsender :D

: Bearbeitet durch User
Autor: Gustl Buheitel (-gb-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das komische ist halt, dass es richtig gut klingt und mit dem Radio zu 
empfangen ist. Und zwar obwohl die "Wellen" fast immer gleich lang sind 
und sich nur extrem selten minimal unterscheiden.

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Prinzip tust Du ja hiermit:

*************************************************************
Ich habe einen Zähler, 32 Bit. Und zu dem Addiere ich in jedem Takt eine
Zahl. Bei FM verschiebt man ja etwas die Frequenz, also addiere ich
einen etwas höheren Wert wenn die Frequenz schneller und einen
niedrigeren Wert, wenn die Frequenz langsamer werden soll.
**************************************************************

... durchaus das Richtige, siehe meine Anmerkungen weiter oben zum Thema 
Vibrato. Das ist ja eine FM. Nur so, wie Du es hier realisierst und 
ausgibst, produzierst Du eine Menge Jitter und unproduktive Oberwellen, 
die nicht zum Nutzsignal beitragen und nur stören. Damit brauchst Du 
viel mehr Leistung. Das Ziel wäre dagegen, möglichst schmalbandig und 
schwach zu senden und nicht, das ganze Band in der Siedlung zu 
verseuchen ;-)

: Bearbeitet durch User
Autor: Gustl Buheitel (-gb-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach so weil es ein Rechteck und kein Sinus ist ... hm, muss ich mir wohl 
mal einen schnellen DAC kaufen oder den VGA Anschluss verwenden :-D

Keine Angst ich sende hier nicht ununterbrochen, nur zum Testen ab und 
zu ein paar wenige Minuten und auch nur "Aqua - Barbie Girl".

Autor: Mr. Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rene B. schrieb:
> Aber keine sorge. I2S kann man ohne Probleme in VHDL implementieren.
> Sonst würde mein Audio-Projekt nicht auch schon seit 4 Jahren vor sich
> hindümpeln und tuten

Wozu hast Du bei Deiner Lösung überhaupt I2S implementiert? Welche Chips 
benutzt Du diesbezpflich?

Oder ist am Ende doch I2C gemeint? - Wenn ich die Artikel hier so lese, 
kommt mir nämlich der Verdacht.

Gustl Buheitel schrieb:
> Keine Angst ich sende hier nicht ununterbrochen, nur zum Testen ab und
> zu ein paar wenige Minuten
Auch die sind nicht ohne, wenn jemand dadurch gestört wird.

> und auch nur "Aqua - Barbie Girl".
Das ist wohl sicherlich das grösste Verbrechen an der Geschichte :-)

Autor: FPGA-Vollprofi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Herr Hilgenfeld scheint hier nicht mehr mitzulesen. Sicher ist der 
FM-Synthesizer schon fertig und dudelt bereits eifrig, sofern es 
überhaupt ein Musiksynthesizer gewesen sein sollte, davon steht nämlich 
nichts.

Falls doch, würden mich mal Konzepte interessieren

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
FPGA-Vollprofi schrieb im Beitrag #3370438:
> Sicher ist der FM-Synthesizer schon fertig und dudelt bereits eifrig,
Sehr wahrscheinlich, wenn man in Betracht zieht, dass das Thema schon 
über 3 Jahre alt ist :-)

> sofern es überhaupt ein Musiksynthesizer gewesen sein sollte
Auch sehr wahrscheinlich, denn:

Olaf Hilgenfeld schrieb:
> Ich möchte einen monophonen FM (PM) Synthesizer auf einem FPGA
"phon" -> "laut" = hörbar.

Wäre aber auch nicht unbedingt relevant, ob der für Musik oder was 
anderes genutzt wird, weil FM ist FM.


Jürgen S. schrieb:
> möglichst ein Ganzzahlverhältnis, sodass die entstehnde Schwebung eine
> kurze Periodendauer hat und zudem noch zur Integraltiefe des Filters
> passt, wenn machbar
Was ist bei Dir die Integraltiefe?

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Definitionssache. Aus sicht der Mathematik ist es erstmal eine Länge. 
Wenn ma Filter aber Parallel baut, ist das Prozessieren zweidimensional. 
Daher gibt es quasi eine Länge (in der Zeitachse) und eine Tiefe (in der 
pipeline-Achse). Kann man natürlich so und so interpetieren. :-)

Autor: Expert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rene B. schrieb:
> Ich denke mal das ist ohne weiteres möglich.
>
> http://www.fpga.synth.net/pmwiki/pmwiki.php?n=FPGA...
>
> Klingt sehr interessant.

Ist das wirklich ein FM-Synthesizer wie der TO es meinte, bzw. ist es 
ein FM-Synthesizer, wie er in Musiksynthesizern Anwendung findet? Ich 
habe das Gegenteiliges dazu gefunden und auch der Betreiber der Seite 
schreibt dazu:

"Please note that I understand that this type of synthesizer, though 
commonly referred to as "FM" is in fact not a frequency modulated 
system. Instead, it is a phase modulated or "PM" system."

Also ein Phasenmodulator?

Autor: Softwerker (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
http://de.wikipedia.org/wiki/FM-Synthese

beantwortet eigentlich beide Fragen, vor allem auch die nach den 
FM-Musiksynthesizern:

Obwohl der DX7 damit für viele Anwender zum Synonym der FM-Technik 
wurde, arbeitet er genaugenommen gar nicht mit diesem Verfahren. Zum 
Einsatz kommt hier hingegen die verwandte Phasenmodulation, die 
mathematisch über eine Integration funktioniert.

Beitrag #4434273 wurde von einem Moderator gelöscht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.