Forum: Digitale Signalverarbeitung / DSP / Machine Learning Mischfrequenzen: DDS oder Singlebuffer


von Peter C. (spacetec)


Lesenswert?

Hallo,

ich habe eine Frage an die Signalspezialisten:

ich muss ein gemischtes Sinussignal mit zwei unterschiedlichen 
Frequenzen generieren (per 16bit-DAC, konkret LTC1668).

Die Frequenzen betragen 1kHz - 10kHz.

Ich habe da jetzt zwei Möglichkeiten:
1.) 2xDDS in einem FPGA, diese dann intern mischen und auf den DAC legen
2.) Da schon im System vorhanden: ein STM32 mit einem Puffer, in den ich 
die vorher berechneten Werte lege und diese dann mit timergetriggertem 
DMA zyklisch zum DAC schicke. Den Puffer würde ich in den SRAM2 des 
STM32 legen, der hat ja einen eigenen Bus, damit ich möglichen Jitter 
umgehe.

Wo seht ihr Vor-/Nachteile der beiden Möglichkeiten? Fehlt noch etwas in 
meiner Fragestellung?

Danke im Voraus,
Peter

von Horst (Gast)


Lesenswert?

Du vergleichst hier zwei Dinge gleichzeitig, nämlich 2 Methoden und 2 
Plattformen. Die Methode 2 der vorberechneten Analogwerte ist um Klassen 
besser, lässt sich aber in beiden Plattformen realisieren. In FPGAs noch 
feiner.

von Programmierer (Gast)


Lesenswert?

Peter C. schrieb:
> Fehlt noch etwas in
> meiner Fragestellung?

Ja, gibt es noch eine weitere Option? Wodurch sind diese beiden 
festgelegt?

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Ich kenne solche Zweitonsignale aus der Sendermesstechnik. Damit werden 
die Verzerrungen 2. Ordnung mit dem Spektrumanalysator gemessen.
Das wichtigste Kriterium ist hier, dass die beiden Töne nicht schon von 
Anfang an Verzerrungen haben. Die sollen erst im Messobjekt entstehen.

von Hans Kanns (Gast)


Lesenswert?

Christoph db1uq K. schrieb:
> Das wichtigste Kriterium ist hier,

Da wäre DDS in meinen Augen auch der komplett falsche Weg.

von Joe F. (easylife)


Lesenswert?

Hans Kanns schrieb:
> Christoph db1uq K. schrieb:
>> Das wichtigste Kriterium ist hier,
>
> Da wäre DDS in meinen Augen auch der komplett falsche Weg.

...und ein LTC1668 auch ein unpassender Wandler.
Warum 50 Msps für 10 Khz?
16 bit, naja -> thd entsprechend.

von Gerd E. (robberknight)


Lesenswert?

Christoph db1uq K. schrieb:
> Ich kenne solche Zweitonsignale aus der Sendermesstechnik. Damit werden
> die Verzerrungen 2. Ordnung mit dem Spektrumanalysator gemessen.

Genau. Ist aber im Audio-Bereich genauso ein üblicher Test für 
Verzerrungen.
Und die Frequenzen hier sind genau die üblichen Audio-Frequenzen.

> Das wichtigste Kriterium ist hier, dass die beiden Töne nicht schon von
> Anfang an Verzerrungen haben. Die sollen erst im Messobjekt entstehen.

Ganz genau. Die Frage ist welchen Teil der Signalkette der TO hier 
messen möchte. Den DAC? Die Analogkette wie Opamps und Filter hinter dem 
DAC? Oder ein anderes Gerät (z.B. Verstärker) mit Analogeingang?

Joe F. schrieb:
>> Da wäre DDS in meinen Augen auch der komplett falsche Weg.
>
> ...und ein LTC1668 auch ein unpassender Wandler.
> Warum 50 Msps für 10 Khz?
> 16 bit, naja -> thd entsprechend.

Ja, denke ich auch. Ich würde mich nach Audio-DACs umschauen, z.B. 
AK4490, und die dann mit I2S ansteuern. Das können die meisten STM32 
direkt. Also einfach die beiden Sinusse in Software mischen und in einen 
kleinen Puffer schreiben. Diesen Puffer dann per DMA aufs I2S geben. Und 
nimm einen STM32 der eine extra Audio-PLL hat, das gibt deutlich bessere 
Jitter-Werte als mit der normalen PLL.

von Joe F. (easylife)


Lesenswert?

Gerd E. schrieb:
> Ich würde mich nach Audio-DACs umschauen, z.B.
> AK4490, und die dann mit I2S ansteuern.

Genau. Oder super high-end: DAC von ESS
http://www.esstech.com/index.php/en/products/sabre-digital-analog-converters/audiophile-dacs/

von Gerd E. (robberknight)


Lesenswert?

Joe F. schrieb:
> Gerd E. schrieb:
>> Ich würde mich nach Audio-DACs umschauen, z.B.
>> AK4490, und die dann mit I2S ansteuern.
>
> Genau. Oder super high-end: DAC von ESS
> 
http://www.esstech.com/index.php/en/products/sabre-digital-analog-converters/audiophile-dacs/

ESS ist Stress. Du kriegst die Datenblätter nur gegen NDA, dann 
erfordert der Current-Output eine I/V-Wandlung,...

AKM ist dagegen zahm und einfach und der AK4490 auch preislich 
interessant.

von Joe F. (easylife)


Lesenswert?

Gerd E. schrieb:
> ESS ist Stress. Du kriegst die Datenblätter nur gegen NDA, dann
> erfordert der Current-Output eine I/V-Wandlung,...

Klar, ist nicht ganz einfach zu bekommen. Der LTC1668 ist auch ein 
current DAC, daher dachte ich ja, könnte ganz gut passen...

von Follsplunk dulch Telchnik (Gast)


Lesenswert?

Der Chinese hätte einen PT8211 genommen und einfach das
Chipgehäuse neu gelasert.

von -gb- (Gast)


Lesenswert?

Kann man die beiden Frequenzen auch mit einem DDS Akku erzeugen? Also 
dass man z. B. die Schrittweite abwechselt die man draufaddiert. Mal 
großen Wert für die niedrigere Frequenz und mal kleineren Wert für die 
höhere Frequenz.

von stm32er (Gast)


Lesenswert?

Du kannst Sinussignale auch in Echtzeit berechnen. Algorithmus ist ganz 
einfach. Und auf nem STM32 mit FPU theoretisch in 4 Takten gemacht.

Das erzeugt einen Sinus:
1
fSin += fFrq * fCos;
2
fCos -= fFrq * fSin;


Und damit regelst Du die Amplitude nach, damit sie auch über längere 
Zeit 1.0 bleibt. (Wegen Rundungsfehler). Kannst Du aber in einer 
langsameren Task machen.
1
fCorr = 1.0f +((1.0f - (fSin * fSin + fCos * fCos))*0.01f);
2
fCos *= fCorr;
3
fSin *= fCorr;

von Dergute W. (derguteweka)


Lesenswert?

Moin,

-gb- schrieb:
> Kann man die beiden Frequenzen auch mit einem DDS Akku erzeugen?
> Also
> dass man z. B. die Schrittweite abwechselt die man draufaddiert. Mal
> großen Wert für die niedrigere Frequenz und mal kleineren Wert für die
> höhere Frequenz.

Nein. Sowas gaebe irgendeine wilde Phasenmodulation mit jeder Menge 
Frequenzen zusaetzlich zu 1 und 10 kHz.

Gruss
WK

von Andi (Gast)


Lesenswert?

-gb- schrieb:
> Kann man die beiden Frequenzen auch mit einem DDS Akku erzeugen? Also
> dass man z. B. die Schrittweite abwechselt die man draufaddiert. Mal
> großen Wert für die niedrigere Frequenz und mal kleineren Wert für die
> höhere Frequenz.

Also eigentlich ist die Schrittweite proportional zur erzeugten 
Frequenz, also grosse Schrittweite für hohe Frequenzen.
Und du würdest einfach nur einen Sinus erhalten, mit der Frequenz aus 
der Summe der beiden Schrittweiten mit leichter Verzerrung.

Wenn man 2 Frequenzen mit ganzzahligem Frequenzverhältnis, also z.B. 
1kHz und 10kHz mit einer DDS erzeugen will, kann man die Wellentabelle 
entsprechend vorberechnen. Statt nur einem Sinus enthält die Tabelle 
noch die 10 fache Frequenz dazugemischt. Allerdings lässt sich dann 
weder das Frequenverhältnis, noch die Amplitude der beiden nachträglich 
beinflussen.

von Peter C. (spacetec)


Lesenswert?

Hallo,

vielen Dank für das rege Feedback.

Es geht in der Tat um eine Zweitonmessung zur Bestimmung von 
Intermodulations-Verzerrungen.

Ich bin an sich nicht an die zwei Optionen gebunden. Den LTC1668 habe 
ich halt bereits verfügbar, aber die THD ist im Vergleich zu anderen 
DACs ohnehin nicht so berauschend.

Die Lösung mit den Audio-DACs klingt schon sehr interessant, die Teile 
und Datenblätter von ESS scheinen aber nicht sehr leicht verfügbar zu 
sein.
Ich habe mir jetzt den TI PCM1795 mal genauer angeschaut, der dürfte für 
meine Zwecke schon gut passen.

Mir ist aber nicht ganz klar, wie der Mono-Mode funktioniert und wie die 
"balanced outputs" zu verstehen sind.
Werden da beide Kanäle über den Bus übertragen und dann nur einer der 
beiden ausgewertet? Reicht es, z.B. nur den linken Ausgang zu 
beschalten?

Danke,
Peter

von Signalverarbeiter (Gast)


Lesenswert?

-gb- schrieb:
> Kann man die beiden Frequenzen auch mit einem DDS Akku erzeugen? Also
> dass man z. B. die Schrittweite abwechselt die man draufaddiert. Mal
> großen Wert für die niedrigere Frequenz und mal kleineren Wert für die
> höhere Frequenz.

klar, dann hat man 2 Werte mit je 16 Bit Auflösung, die man zu einem 
Wert mit 16 Bit herunterrechnen kann / muss. Das geht dann auch mit 
anderen Oberwellen.

Wenn man vorher die Frequenzen weiß, kann man es direkt in die Tabelle 
einbauen.

von Joe F. (easylife)


Lesenswert?

Peter C. schrieb:
> Mir ist aber nicht ganz klar, wie der Mono-Mode funktioniert und wie die
> "balanced outputs" zu verstehen sind.

balanced = differential

> Werden da beide Kanäle über den Bus übertragen und dann nur einer der
> beiden ausgewertet?

Genau, I2S ist für Stereosignale gemacht.
https://en.wikipedia.org/wiki/I²S

Im Mono mode kannst du dir aussuchen, ob du L oder R auf beiden 
Ausgängen haben willst.
Macht aber auch nur Sinn, wenn du beide Ausgänge zu einem balanced mono 
out zusammenfassen willst, wie in Figure 55 dargestellt.
Damit kitzelt man halt noch das letzte Quäntchen Qualität heraus.

> Reicht es, z.B. nur den linken Ausgang zu beschalten?

Ja.
Dann brauchst du auch im Prinzip nichtmal den "mono mode".

: Bearbeitet durch User
von T.U.Darmstadt (Gast)


Lesenswert?

Joe F. schrieb:
> Im Mono mode kannst du dir aussuchen, ob du L oder R auf beiden
> Ausgängen haben willst.

Wird das Signal dann automatisch gedreht oder muss man auf beiden I2S 
jeweils komplementäre Signale ausgeben?

von Joe F. (easylife)


Lesenswert?

So wie ich das Datenblatt verstehe suchst du dir raus, ob du die L oder 
R samples auf beiden Ausgängen haben willst und für die richtige 
Polarität sorgt der DAC. Der andere I2S Kanal wird dann einfach nicht 
benutzt.
Im Zweifel: nachmessen.

: Bearbeitet durch User
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.