Forum: Digitale Signalverarbeitung / DSP / Machine Learning PLL Gleichung lösen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Gordon N. (Gast)


Lesenswert?

Ich möchte folgende Gleichung optimieren: a + b/c

Dies ist die Ausgangsbasis um die Frequenz einer Fractional N PLL 
einzustellen. Was ich bisher mache ist a zu berechnen für den Integer N 
mode. Dann kenne ich den Rest, den ich brauche um b/c zu bestimmen. Das 
funktioniert allerdings nicht immer, da die werte ja diskret sind. Bei 
manchen gewünschten Frequenzen habe ich durchaus mal eine Abweichung von 
512 oder 256, je nach eingestellten Wert. Wie wird so ein System optimal 
gelöst?

von fairwirrta (Gast)


Lesenswert?

Gordon N. schrieb:
> a + b/c

Das ist keine Gleichung, und da gibt es auch nichts zu
optimieren da du keine Forderungen bzw Kriterien dafür
aufgestellt hast.

Entweder du schreibst den kompletten Berechnungs-Weg hin
oder nennst gleich den Chip (inklusive Datenblatt) den
du verwenden willst.

von Gordon N. (Gast)


Lesenswert?

fairwirrta schrieb:
> Das ist keine Gleichung, und da gibt es auch nichts zu
> optimieren da du keine Forderungen bzw Kriterien dafür
> aufgestellt hast.

a + b/c = d so jetzt ist es eine Gleichung. Es geht um einen MAX2870.

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Wahrscheinlich ergibt sich der Gesamtteiler aus dem Hauptteiler und dem 
Quotienten, der dann die Vorgabe macht, für die Umschaltung der Faktoren 
der PLL, um am Ende (jitternd) im Durchschnitt auf die gewünschte 
Zielfrequenz zu gelangen. Das ist ja das gegebene Prinzip, wenn es 
ganzzahlig nicht passt.

Richtig geraten?

Wie auch immer, sollte man das im Kopf können, wenn die Zahlen auf dem 
Tisch liegen, vorausgesetzt (und jetzt mache ich mich wieder unbeliebt) 
man hat ein ordentliches Abitur auf einem ordentlichen Gymnasium besucht 
und in der 8. Klasse Mathe aufgepasst: Dort hieß das 
"Partialbruchzerlegung".

Die U30-Franktion, die bachelor und die anderen, die das nicht können, 
benutzen einfach Excel, um es auszuprobieren. Die mit Promotion bemühen 
selbstredend MATLAB und die "signal processing toolbox".

Wenn das nicht hilft, einfach den SRUM-Master anhauen, ein Krisenmeeting 
anzusetzen.
#

von Martop (Gast)


Lesenswert?

Jürgen S. schrieb:
> 8. Klasse Mathe aufgepasst: Dort hieß das
> "Partialbruchzerlegung"

Hut ab, wenn ihr das Schon ond er 8. Klasse hattet. Du bist einfach 
Mathemann

von Helmut -. (dc3yc)


Lesenswert?

Jürgen S. schrieb:
> SRUM-Master

Heißt der nicht SCRUM-Master oder bist du auch nur Bachelor?

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Gordon N. schrieb:
> a + b/c = d so jetzt ist es eine Gleichung. Es geht um einen MAX2870.

Ah, da war ich noch am Tippen, als das kam. Gleichwohl:

Ohne die Zahlen selber, kann dir hier keiner helfen, außer dir selber. 
Wie wäre es mit einem Taschenrechner?

Die Aufgabe ist im Übrigen dieselbe wie die umgekehrte 
Ganzzahlmultiplikation las Ersatz einer Division ohne Rest. Man muss nur 
den Rest mit dem Divisor multiplizieren, um einen wieder berechenbaren 
Quotienten zu bekommen.

171 / 47 = 3 + 30/47. Die "3" ist der Ganzzahl, die "30" der 
"Modulowert" für 47. Die muss jetzt mit dem Skalierungsfaktor 
multipliziert werden, z.B. 256 ->

= (3 x 256 + 30 * 256 / 47) / 256
-> 163 / 256 für die "30".

Deine Teiler sind also 163 und ab und zu 164. Gemäß dem Restverhältnis.

Wie man sieht funktioniert das bei meinem Beispiel nicht, weil es eine 
"irrationale" Zahl ist (Klasse 9).

Auf Deutsch. Du kriegst deine PLL nur für rationale Teilerverhltnisse 
ans Lafen oder musst selber mitzählen und rechnen und die 
Teilerverhältnisse permanent anpassen, wie bei einer PDM.

Geht im FPGA!

von fairwirrta (Gast)


Lesenswert?

Gordon N. schrieb:
> a + b/c = d so jetzt ist es eine Gleichung.

Und auf was bitte soll die optimiert werden?

Gordon N. schrieb:
> Ich möchte folgende Gleichung optimieren: a + b/c

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Martop schrieb:
> Hut ab, wenn ihr das Schon ond er 8. Klasse hattet. Du bist einfach
> Mathemann
Ich weiss es deshalb weil es in der 8. den bundesweiten Mathewettbewerb 
gab und dort eine solche Aufgabe dran kam.

Helmut -. schrieb:
> Heißt der nicht SCRUM-Master oder bist du auch nur Bachelor?
Eigentlich ja, aber es ist ein Master auf dem dritten Bildungsweg, der 
vergessen hat, sich bei Maren Gilzer ein "C" zu kaufen.

: Bearbeitet durch User
von Martop (Gast)


Lesenswert?

Jürgen S. schrieb:
> Ich weiss es deshalb weil es in der 8. den bundesweiten Mathewettbewerb
> gab und dort eine solche Aufgabe dran kam.

Bundesweiter Mathewettbewerb, merkste selber ne?

von Gordon N. (Gast)


Lesenswert?

Es geht darum das algorithmisch möglichst effizient zu machen. Also 
letztendlich b/c=d lösen unter der Bedingung, dass b und c ganze zahlen 
sind und d positiv reelle Zahl. Schön wenn ihr alle promoviert habt und 
Abitur habt. Ich mit meinem Hauptschulabschluss kann da nicht mithalten.

von Diplomierter (Gast)


Lesenswert?

> und d positiv reelle Zahl

Dazu braucht es keine wesentlich mächtigere reelle Zahl.
Bei Brüchen kommen nur rationale Zahlen heraus.

> algorithmisch möglichst effizient

Vielleicht hat Bresenham da was im Angebot.
Echte zahlentheoretsche Geschütze sind schon unhandlich.

von Rezy (Gast)


Lesenswert?

Jürgen S. schrieb:
> Gordon N. schrieb:
> 171 / 47 = 3 + 30/47. Die "3" ist der Ganzzahl, die "30" der
> "Modulowert" für 47. Die muss jetzt mit dem Skalierungsfaktor
> multipliziert werden, z.B. 256 ->
>
> = (3 x 256 + 30 * 256 / 47) / 256
> -> 163 / 256 für die "30".
>
> Deine Teiler sind also 163 und ab und zu 164. Gemäß dem Restverhältnis.
>
> Wie man sieht funktioniert das bei meinem Beispiel nicht, weil es eine
> "irrationale" Zahl ist (Klasse 9).

Das ist sicherlich keine irrationale Zahl.

von Mario H. (rf-messkopf) Benutzerseite


Lesenswert?

Gordon N. schrieb:
> Fractional N PLL einzustellen

Wurde bereits hier diskutiert, inkl. Lösungsvorschlag: 
Beitrag "Re: RF Sysnthesizer PLL Optimierung".

Beitrag #7120633 wurde von einem Moderator gelöscht.
von Gordon N. (Gast)


Lesenswert?

Mario H. schrieb:
> Gordon N. schrieb:
>
>> Fractional N PLL einzustellen
>
> Wurde bereits hier diskutiert, inkl. Lösungsvorschlag:
> Beitrag "Re: RF Sysnthesizer PLL Optimierung".

Habe mir deinen code zur Einstellung der PLl angesehen. Sehe da mehrere 
Probleme in dem Algorithmus. Da sind so viele Fälle nicht abgedeckt.

von Diplomierter (Gast)


Lesenswert?

> > Wie man sieht funktioniert das bei meinem Beispiel
> > nicht, weil es eine
> > "irrationale" Zahl ist

Auch durch "Gejitter" aka Dithering kann der Wert
nur angenaehert werden.
Und man muss dafuer nicht unbedingt einen FPGA einspannen.

Im uebrigen wird die Zahl dadurch auch nicht irrational.
Es bleibt die Summe zweier rationaler Zahlen mit einer
gewissen Gewichtung.


> Da sind so viele Fälle nicht abgedeckt.

Dann nur zu! Frisch ans Werk.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Auch ein DDS hat das "near integer"-Problem. Integer ist der Fall, dass 
bei jeder Schwingung dieselben Sinustabellenwerte benutzt werden, dann 
ist das Signal sauber. "Near" liegt dicht daneben.

Je nach Anwendung gibt es auch die Möglichkeit, die Umkehrfunktion zu 
benutzen. Wenn die Umrechnung von Wunschfrequenz auf Registerwerte nicht 
geschlossen lösbar ist, kann die umgekehrte Richtung immer noch einfach 
lösbar sein.
Beispiel ein SSB-Empfänger. Ich drehe mit dem großen Drehencoderknopf 
übers Band, höre ein Quäken und stelle langsam die richtige Tonhöhe ein. 
Erst jetzt möchte ich die Empfangsfrequenz wissen. Dazu brauche ich nur 
die Umrechnungsformel (im Datenblatt erklärt) von Registerwerten zu 
Frequenz, die exakt lösbar ist.

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Rezy schrieb:
>> Wie man sieht funktioniert das bei meinem Beispiel nicht, weil es eine
>> "irrationale" Zahl ist (Klasse 9).
> Das ist sicherlich keine irrationale Zahl.
Die Anführungszeichen hast du aber schon gelesen, oder?

Diplomierter schrieb:
>> und d positiv reelle Zahl
> Dazu braucht es keine wesentlich mächtigere reelle Zahl.
> Bei Brüchen kommen nur rationale Zahlen heraus.
Das Problem sind weder rationale noch irrationale Zahlen, sondern die 
Frage, ob sich die Zahl mit dem zur Verfügung stehenden Teiler der PLL 
einstellen lässt. Ist dies ganzzahlig nicht der Fall, geht es nicht 
anders, als den Teiler so geschickt zu wechseln, dass im Mittel diese 
Frequenz heraus kommt.

Christoph db1uq K. schrieb:
> Auch ein DDS hat das "near integer"-Problem.
...und auch dort wird es genau so gelöst :-)

Diplomierter schrieb:
>> algorithmisch möglichst effizient
> Vielleicht hat Bresenham da was im Angebot.
...auch der kann nur ganzzahlig lösbare Brüche ganzzahlig ohne Reste 
lösen.

Martop schrieb:
> in der 8. den bundesweiten Mathewettbewerb
>> gab und dort eine solche Aufgabe dran kam.
> Bundesweiter Mathewettbewerb, merkste selber ne?
Ja, "Bundeswettbewerb Mathematik" und ich meinte mich zu erinnern, dass 
ich noch der für uns in der 8. war, weil ich mich an das Jahr erinnere. 
Die Urkunde habe ich noch. Kann aber auch der Herbst der 9. gewesen 
sein. Werde mal nachsehen. Die Aufgabe war damals jedenfalls das Finden 
der Ganzzahlvorschrift für das Zeichnen einer Gerade - also 
gewissermaßen Bresenham per Hand -> Malen auf Karokästchen.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Im anderen Thread hatte Mario geschrieben:
"Grundsätzlich werden die Integer Boundary Spurs groß, wenn man
nahe an ganzzahligen Teilern ist (deshalb heißen sie so)."
Das wollte ich mit "near integer" ausdrücken, den genauen Ausdruck hatte 
ich vergessen.
https://www.analog.com/media/en/analog-dialogue/volume-49/number-3/articles/analyzing-integer-boundary-spurs.pdf
hier ist der Begriff benutzt. Und hier
https://www.ti.com/lit/an/snaa289/snaa289.pdf?ts=1657515135989&ref_url=https%253A%252F%252Fwww.google.com%252F
"Spur-b-Gone Concept" sehr witzig. Hokus-Pokus-Verschwindibus

: Bearbeitet durch User
von Mario H. (rf-messkopf) Benutzerseite


Lesenswert?

Gordon N. schrieb:
> Habe mir deinen code zur Einstellung der PLl angesehen. Sehe da mehrere
> Probleme in dem Algorithmus. Da sind so viele Fälle nicht abgedeckt.

Sicher? Welcher Fall ist denn nicht abgedeckt? Und was sind die Probleme 
mit dem Algorithmus?

von Mario H. (rf-messkopf) Benutzerseite


Lesenswert?

Vielleicht sollte ich zur Vermeidung von Missverständnissen und für 
zukünftige Anfragen einmal kurz erklären, was der in 
Beitrag "Re: RF Sysnthesizer PLL Optimierung" 
referenzierte Code macht.

Die Sache ist wirklich sehr einfach: Wenn man eine Dezimalzahl wie z.B. 
1,23456789 in eine gemischte Zahl (d.h. eine ganze Zahl plus einen 
echten Bruch) umwandeln will, muss man den ganzzahligen Teil abtrennen, 
d.h. 1 + 0,23456789, und den echten Dezimalbruch (d.h. mit einer Null 
vorm Komma) mit einer hinreichend großen Zehnerpotenz erweitern, hier 
z.B. 1000000000. Dann erhält man für dieses Beispiel
Im nächsten Schritt kann man dann den Bruch dann in einen irreduziblen 
(d.h. einen vollständig gekürzten) Bruch umwandeln, indem man Zähler und 
Nenner durch den größten gemeinsamen Teiler (greatest commen divisor -- 
gcd) von 234567890 und 1000000000 teilt. Da gcd(234567890, 1000000000) = 
10, erhält man für das Beispiel
Die Zehnerpotenz in diesem Beispiel, also 100000000 = 1e8, hat man 
natürlich geeignet zu wählen. Sie darf für Fraktional-N-PLL-Anwendungen 
nur so groß sein dass sie in das entsprechende Register des 
PLL-Synthesizers passt. Wenn die Zehnerpotenz kleiner ist als die 
Dezimalzahl Stellen hinter dem Komma hat, muss man im Zähler Stellen 
abschneiden, und man bekommt nur eine Näherung. Für z.B. 1e6 anstatt 1e8 
hat man
und es ist gcd(234567, 1000000) = 1, d.h. der Bruch ist bereits 
irreduzibel.

In dem oben referenzierten Code sieht das so aus:
1
double pll_div = (double)f_vco_tgt / ( f_pfd_curr * pre );
2
params.pll_int = floor( pll_div );
3
double  pll_frac = pll_div - params.pll_int;
4
const uint32_t precision = 1000000000;
5
uint32_t gcd_val = gcd( round(pll_frac*precision), precision );
6
7
params.pll_num = round(pll_frac*precision) / gcd_val;
8
params.pll_den = precision / gcd_val;
Dabei ist pll_div der Dezimalbruch, der in eine gemischte Zahl 
umgewandelt werden soll, params.pll_int ist der ganzzahlige Anteil 
(32-bit unsigned integer) und pll_frac der echte Dezimalbruch; precision 
ist die Zehnerpotenz, mit der erweitert wird. Durch das Teilen mit 
gcd_val erreicht man, dass der Bruch, der schließlich in die Register 
des PLL-Chips geschrieben wird, irreduzibel ist, genau wie oben in dem 
einfachen Beispiel.

Man sieht, dass man vermutlich ein wenig Laufzeitoptimierung betreiben 
könnte, indem man round(pll_frac*precision) nicht zweimal ausrechnet, 
sondern beim ersten Mal wegspeichert.

Die Berechnung des gcd ist Standard und folgt dem euklidischen 
Algorithmus:
1
static uint32_t gcd(uint32_t a, uint32_t b)
2
{
3
  uint32_t remainder;
4
  while(b != 0)
5
  {
6
    remainder = a % b;
7
    a = b;
8
    b = remainder;
9
  }
10
  return a;
11
}

Der in dem Projekt verwendete PLL-Baustein hat übrigens für den Nenner 
des fraktionalen Anteils des PLL-Teilers einen Wertebereich von 2^32-1; 
die verwendete precision = 1000000000 ist die größte Zehnerpotenz, die 
dort hinein passt. Man könnte allerdings theoretisch auch einen noch 
größeren Wert nehmen, der keine Zehnerpotenz ist.

Warum die Gymnastik mit dem gcd und dem Kürzen zu einem irreduziblen 
Bruch? Man könnte den Bruch auch ungekürzt lassen, d.h. einfach mit 
precision erweitern und im Zähler eventuell verbleibende 
Nachkommastellen abschneiden. Der verwendete PLL-Baustein hat aber einen 
Delta-Sigma-Modulator, bei dem die führende Integer Boundary Spur bei 
f_PFD/Nenner liegt. D.h. je kleiner der Nenner, desto weiter rückt die 
Störlinie vom Träger weg.

Ich bin mir allerdings bei erneuter Betrachtung nicht sicher, ob es 
überhaupt einen Einfluss auf die Störlinien hat, wenn man den Bruch im 
fraktionalen Anteil erweitert, d.h. ob für die Störlinie nur der Nenner 
des irreduziblen Bruchs zählt. Ausprobiert habe ich das nicht. Es lohnt 
sich eventuell, mal wieder im Lehrbuch unter Delta-Sigma-Modulator 
nachzulesen.

: Bearbeitet durch User
von Olf (Gast)


Lesenswert?

Mario H. schrieb:
> Der verwendete PLL-Baustein hat aber einen Delta-Sigma-Modulator
Worauf bezieht sich diese Aussage? Kann dieser den ungenauen Bruch so 
ändern, dass es im Mittel stimmt? Weil so richtig genau "hin" kriegt man 
es ja auch mit noch so großem Nenner nicht.

> 1,23456789 ~ 1 + 1234567 / 1000000
Ich korrigiere mal kurz:

1,23456789 ~ 1 + 1234568 / 1000000  wegen Rundung

Der Modulator müsste also die hintere 7 gegen die 8 so austauschen, daß 
der richtige Wert herauskommt.

von Mario H. (rf-messkopf) Benutzerseite


Lesenswert?

Olf schrieb:
>> Der verwendete PLL-Baustein hat aber einen Delta-Sigma-Modulator
> Worauf bezieht sich diese Aussage?

Auf den LMX2582. Dieser verwendet einen Delta-Sigma-Modulator. Das ist, 
neben dem traditionellen Pulse Swallower, eine weitere Möglichkeit, eine 
Fraktional-N-PLL zu realisieren.

> Kann dieser den ungenauen Bruch so ändern, dass es im Mittel stimmt?

Nein, den "ungenauen Bruch" nicht. Der Bruch, genauer gesagt die ganzen 
Zahlen N, M, D, werden in der Software zu einem gegebenen Dezimalbruch a 
berechnet, so dass a = N + M/D ist, und dann in den PLL-Baustein 
geschrieben. Von den Näherungen, die dabei eventuell gemacht wurden, 
weiß der PLL-Baustein natürlich nichts.

> Weil so richtig genau "hin" kriegt man es ja auch mit noch so
> großem Nenner nicht.

Doch, für endliche Dezimalbrüche schon. Siehe das obige Beispiel
Das Gleichheitszeichen ist ernst gemeint, da ist nichts genähert.

> Ich korrigiere mal kurz 1,23456789 ~ 1 + 1234568 / 1000000
> wegen Rundung

Okay, man kann hier natürlich runden, was sicher auch sinnvoll ist. Der 
oben gepostete Code macht das auch, vermöge der round() Funktion. 
Außerdem müsste es dann
heißen.

> Der Modulator müsste also die hintere 7 gegen die 8 so austauschen, daß
> der richtige Wert herauskommt.

Der Delta-Sigma-Modulator hat mit der Berechnung, wie gesagt, erstmal 
nichts zu tun, das passiert alles im Mikrocontroller. Der Modulator ist 
im PLL-Baustein.

von Rezy (Gast)


Lesenswert?

Jürgen S. schrieb:
> Rezy schrieb:
>>> Wie man sieht funktioniert das bei meinem Beispiel nicht, weil es eine
>>> "irrationale" Zahl ist (Klasse 9).
>> Das ist sicherlich keine irrationale Zahl.
> Die Anführungszeichen hast du aber schon gelesen, oder?

Jep. Wenn ich also schreibe: Ich bin "Ingenieur", bin ich eigentlich gar 
kein Ingenieur? Interessant. Wer so prahlt, sollte mit den 
Begrifflichkeiten einfach auch korrekt umgehen.

von W.S. (Gast)


Lesenswert?

Gordon N. schrieb:
> Ich möchte folgende Gleichung optimieren: a + b/c
> Dies ist die Ausgangsbasis um die Frequenz einer Fractional N PLL
> einzustellen.

Du schreibst zwar Wirrwarr (das oben ist ein Ausdruck aber keine 
Gleichung), aber ich meine dennoch den eigentlichen Sach-Hintergrund 
darin zu erkennen.

Im Prinzip geht es darum, eine echt gebrochene Zahl (b/c) mit b<c so zu 
finden, daß sie dem gewünschten Verhältnis ausreichend nahe kommt. Egal 
ob nun ein bissel kleiner oder größer. Und zwar ohne daß man dafür viel 
Rechenaufwand im DAP bzw. µC erzeugt. Und was "ausreichend" ist, muß 
noch festgelegt werden.

Also die Frage
"Welche ganzen Zahlen b und c ergeben ein Teilerverhältnis b/c, das 
einem beliebigen Wert x (mit 0 <= x < 1) möglichst nahe kommt.
Randbedingungen:
 b < c
und c < 1024  (beispielsweise)
und wie errechnet man am einfachsten b und c bei Kenntnis von x ?"

Mir kommen da noch andere Randbedingungen in den Sinn, so z.B. wie 
sinnvoll ist es, die Größen von b und c möglichst klein zu halten, wenn 
man zugleich auf den wahrscheinlich auftretenden Jitter des 
Ausgangssignales achtet? Gibt es da ein Optimum, wo sich Ablage und 
Jitter die Waage halten?

Ich hatte das Problem vor einigen Jahren schon mal, als ich einen LO für 
einen kleinen Empfänger (so von 9 kHz bis etwas mehr als 30 MHz) mit 
einem SI5351 konstruiert hatte. Wenn ich mich recht erinnere, dann hatte 
ich damals mit Eingabeln gearbeitet. Aber das war für manuelle 
Abstimmung per Knopf am Gerät. Entsprechend niedrig waren die 
Geschwindigkeits-Anforderungen.

W.S.

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

W.S. schrieb:
> Mir kommen da noch andere Randbedingungen in den Sinn, so z.B. wie
> sinnvoll ist es, die Größen von b und c möglichst klein zu halten, wenn
> man zugleich auf den wahrscheinlich auftretenden Jitter des
> Ausgangssignales achtet?

Eher anders herum: In der Regel wird die höchstmögliche Zwischenfrequenz 
angestrebt, weil sich die in Relation zur später (um so stärker 
heruntergeteilten) Endfrequenz besser kompensieren lässt, wobei es auf 
den Chip ankommt. Auch wenn es sehr krumme Verhältnisse sind, kann das 
auch etwas schlechter sein.

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Rezy schrieb:
> Jep. Wenn ich also schreibe: Ich bin "Ingenieur", bin ich eigentlich gar
> kein Ingenieur?
Möchtest du dich nur wichtig machen, oder trägst du auch etwas zum Thema 
bei?

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Mario H. schrieb:
> Man könnte allerdings theoretisch auch einen noch
> größeren Wert nehmen, der keine Zehnerpotenz ist.
Ich würde immer zusehen, dass es gerade Zahl ist, weil sich dadurch ein 
zwangsweise symmetrischer Takt ergibt. Es gibt einen Fall, wo man 
ungerade Verhältnisse benötigt und zwar dann, wenn man eine DDS 
antreiben will, die eine definierte Zielfrequenz hat, die zudem in der 
Nähe von Nyquist liegt. Damit kann man dafür sorgen, dass sich die 
Schwebung, die sich bildet in hohen, besser filterbaren Frequenzen 
abbildet.

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Jürgen S. schrieb:
> Es gibt einen Fall, wo man
> ungerade Verhältnisse benötigt und zwar dann, wenn man eine DDS
> antreiben will,

Korrektur: Bezieht sich in dem Fall natürlich nicht auf den Systemtakt 
mit dem die Daten rausgetaktet werden, sondern den Teiler, mit dem der 
Datentakt der DSS, also deren Grundfrequenz, erzeugt wird.

Gordon N. schrieb:
> Es geht darum das algorithmisch möglichst effizient zu machen.
Wir wissen immer noch nicht welche Zahlen es sind. Dann kann dir auch 
jemand eine Lösung liefern. Auch eine mit wechselndem Teiler wie man das 
in den Fällen macht, in denen es nicht ganzzahlig geht und wie ich das 
schon oben vorgeschlagen hatte.

von Mario H. (rf-messkopf) Benutzerseite


Lesenswert?

W.S. schrieb:
> Mir kommen da noch andere Randbedingungen in den Sinn, so z.B. wie
> sinnvoll ist es, die Größen von b und c möglichst klein zu halten, wenn
> man zugleich auf den wahrscheinlich auftretenden Jitter des
> Ausgangssignales achtet? Gibt es da ein Optimum, wo sich Ablage und
> Jitter die Waage halten?

Bei einer einfachen Fraktional-N-PLL mit Pulse Swallower bzw. einem 
Delta-Sigma-Modulator erster Ordnung kommt es nicht darauf an, welche 
Darstellung des Bruchs man verwendet.

Bei Delta-Sigma mit höherer Ordnung jedoch schon. In den Datenblättern 
von Texas Instrumens (LMX2582 z.B.) sowie in dem Opus Magnum von Dean 
Banerjee (https://www.ti.com/cn/lit/ml/snaa106c/snaa106c.pdf) finden 
sich ein paar Hinweise dazu. Man kann mit größerem Zähler und Nenner 
(bei gleichem Verhältnis natürlich) die Sub-Fractional Spurs positiv 
beeinflussen, was allerdings zu Lasten des Phasenrauschens (bzw. Jitter 
im Zeitbereich) geht.

Da ich möglichst geringes Phasenrauschen erreichen wollte, habe ich den 
in Beitrag "Re: PLL Gleichung lösen" 
gezeigten Code so gestaltet, dass Zähler und Nenner immer relativ prim 
sind (d.h. der Bruch vollständig gekürzt ist).

Ob das auch bewirkt, dass bei einer Delta-Sigma-PLL die Störtöne weiter 
vom Träger weg liegen, was meiner Anwendung auch zupass käme und ich 
eigentlich damit erreichen wollte, ist mir momentan nicht klar. Da 
müsste ich, wie gesagt, die Nase mal etwas in die Bücher stecken. Ich 
finde dazu auf die Schnelle auch keine Hinweise in den Unterlagen von 
TI.

Jürgen S. schrieb:
> Ich würde immer zusehen, dass es gerade Zahl ist, weil sich dadurch ein
> zwangsweise symmetrischer Takt ergibt. Es gibt einen Fall, wo man
> ungerade Verhältnisse benötigt und zwar dann, wenn man eine DDS
> antreiben will, die eine definierte Zielfrequenz hat, die zudem in der
> Nähe von Nyquist liegt. Damit kann man dafür sorgen, dass sich die
> Schwebung, die sich bildet in hohen, besser filterbaren Frequenzen
> abbildet.

Ich bin mir nicht sicher, ob ich verstanden habe, was Du damit meinst. 
Aber für eine PLL-Anwendung sollte es darauf nicht ankommen. Schließlich 
kann man auch nach dem Kürzen des Bruchs einen ungeraden Nenner 
bekommen.

von Thomas U. (thomasu)


Lesenswert?

Jürgen S. schrieb:
> Gordon N. schrieb:
>> Es geht darum das algorithmisch möglichst effizient zu machen.
> Wir wissen immer noch nicht welche Zahlen es sind. Dann kann dir auch
> jemand eine Lösung liefern.
Gordon hat sich schon lange verabschiedet, wie es scheint und ich frage 
mich auch, wo hier der Hase im Pfefferliegt?

Und:

Mario H. schrieb:
> Bei einer einfachen Fraktional-N-PLL mit Pulse Swallower bzw. einem
> Delta-Sigma-Modulator erster Ordnung kommt es nicht darauf an, welche
> Darstellung des Bruchs man verwendet.
Es ist grob gesagt egal, wie genau der Nenner zu definieren ist, wenn er 
aufgrund der Wunschtaktverhältnisse nicht als INTEGER darstellbar ist. 
Da hilft das beste Kürzen nicht. Die Frequenz stimmt nicht(?)

Ob und in welcher Weise sich höhere Zahlen positiv auswirken, hängt von 
der PLL ab. Es dürfte bei einem stabilen Takt ziemlich egal sein, ob es 
eine gerade oder ungerade Zahl ist.

von W.S. (Gast)


Lesenswert?

Thomas U. schrieb:
> Gordon hat sich schon lange verabschiedet, wie es scheint und ich frage
> mich auch, wo hier der Hase im Pfefferliegt?

Ganz einfach:
Es ist ein generelles Problem, wie man irgendwelche Integerzahlen 
kombiniert, um sowohl einem gewünschten Teilerverhältnis möglichst nahe 
zu kommen, als auch den Rechenaufwand in Grenzen zu halten, als auch 
möglichst Jitter, Spurs usw. klein zu halten.

Das ist eine Rechen- und Optimierungsaufgabe, vor der andere Leute auch 
stehen und die es gründlich zu diskutieren wert ist.

W.S.

von Georg B. (georg2011) Benutzerseite


Lesenswert?

W.S. schrieb:
> Das ist eine Rechen- und Optimierungsaufgabe, vor der andere Leute auch
> stehen und die es gründlich zu diskutieren wert ist.

Ja, wobei man meinen sollte, dass das gelöst sein müsste.

Lese ich aber diese links:
Beitrag "Re: PLL Gleichung lösen"
scheint das nicht unbedingt so zu sein.

Diese "spurs" sind ja am Ende immer irgendwie vorhanden. Als nix 
"Verschwindibus". ?

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]
  • [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.