Forum: Digitale Signalverarbeitung / DSP / Machine Learning bandlimitierte Rechtecksignale zielgenau erzeugen


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 M. W. (elektrowagi78) Benutzerseite


Lesenswert?

Es sollen möglichst steilflankige Signale für einen DAC erzeugt werden, 
die eine variable Grundfrequenz besitzen, aber keine Komponenten 
oberhalb der Nyquist-Frequenz besitzen. Eine einfache Rampenfunktion mit 
begrenztem Anstieg und Filterung hat den Nachteil, dass der Filter schon 
vorher eingreift und trotzdem im Stoppband zu schwach ist.

Die Signale sind grundsätzlich Rechtecke / PWM.

Der Gedanke war jetzt eine IFFT, die mit höchstens genau der maximalen 
Frequenz benutzt wird und deren Restkomponenten 0 sind. Das gibt zwar 
das richtige Signal, ist aber unhandlich, weil die IFFT gerastert ist 
und nur sprunghaft richtig in die Nähe der Zielfrequenz kommt, wenn ein 
sweap gefahren wird. Das führt zu einem unakzeptablen Pulsieren in der 
Oberwellen.

Welche Möglichkeiten gäbe es noch?

von Bernd (Gast)


Lesenswert?

Markus W. schrieb:
> Welche Möglichkeiten gäbe es noch?
Was ist das Problem, wenn Du Dir das "Rechteck" aus Sinusschwingungen 
zusammenbaust und dabei nur die Oberwellen bis zu Deiner Wunschfrequenz 
berücksichtigst?
https://de.wikipedia.org/wiki/Rechteckschwingung#Fouriersynthese

von M. W. (elektrowagi78) Benutzerseite


Lesenswert?

Das ist ja das, was ich probiere. Die FFT hat aber eine bestimmte 
Taktfrequenz und wenn eine steigende Zielfrequenz (Motor) generiert 
werden soll, verschiebt sich das Spektrum nach oben. Ich mache das mit 
linearen Überblendungen der Frequenzen, d.h. das Profil, das den Impuls 
formt, wird nach oben geschoben.

Aber oben muss eine nach der anderen Oberwelle, die jenseits der Grenze 
ist, wegfallen. Ich habe probiert, auch das mit einem fade auszublenden, 
komme aber zu praktisch denselben Ergebnissen, wie mit einem normalen 
Filter.

Auch wenn nur die Frequenz der FFT hochgezogen wird und die Relation der 
Oberwellen konstant bliebe, muss die oberste Welle irgendwie 
weggeblendet werden.

Vielleicht ist linear nicht der richtige Ansatz?

von Hp M. (nachtmix)


Lesenswert?

Markus W. schrieb:
> Es sollen möglichst steilflankige Signale für einen DAC erzeugt werden,
> die eine variable Grundfrequenz besitzen, aber keine Komponenten
> oberhalb der Nyquist-Frequenz besitzen.

Wirklich für einen DAC??
Oder doch eher für einen ADC?

von no (Gast)


Lesenswert?

Klar kannst Du eine iFFT nehmen, warum einfach wenns auch komlpijoziert 
geht...


Besser das was Bernd sagt!


Markus W. schrieb:
> Aber oben muss eine nach der anderen Oberwelle, die jenseits der Grenze
> ist, wegfallen.

Wegfallen ist kein Fade, weg ist weg.


Du nimmst die Grundschwingung, summierst die Oberwellen in den folgenden 
Amplituden:
1
1 
2
0 
3
0.333333 
4
0 
5
0.2 
6
0 
7
0.142857 
8
0 
9
0.111111 
10
0 
11
0.090909 
12
...
 bis Niquist und dann ist Schluss.

von Fpgakuechle K. (fpgakuechle) Benutzerseite


Lesenswert?

Markus W. schrieb:
> Es sollen möglichst steilflankige Signale für einen DAC erzeugt werden,
> die eine variable Grundfrequenz besitzen, aber keine Komponenten
> oberhalb der Nyquist-Frequenz besitzen.

Steile Flanke und keine Oberwellen gibt es nicht.

Ich nehme an, du hast einen DAC an dessen Ausgang du misst und eine 
steile Flanke erwartest. Diese Flanke willst du erreichen in dem du in 
deinen DAC-Input ein digitales Pattern schickst.

Andere Einflußfaktoren wie Bufferung des DACS und Kapazität der 
Messspitze betrachtest du nicht. Die sind aber bei kurzen Anstiegszeiten 
wesentlich für das Verschleifen.

Ferner wäre eine Frage wie du das Verschleifen feststellen willst, 
vielleicht lügt dir ja ein Digital-Oszi mit seiner Interpolation ein 
Verschleifen vor, wo keines ist.

Ebenso fehlt eine Angabe zur bitauflösung des DAC und von welchen 
Anstiegszeiten und Steigungsraten sprechen wir hier überhaupt?

IMHO bring so eine diffuse Spezifikation wie "möglichst steilflankig" 
nur ewige Probleme.

Einfach mal einen konkreten Fall durch rechnen (Simulieren), wie hoch 
darf die Kapazität C am Ausgang höchstens sein um innerhalb von 500 ps 
von 0 auf 3.3V den Pegel anzuheben? Welche Strom ist dazu nötig (I = 
dQ/dt)? Wie hoch darf daher der elektrische widerstand höchstens sein?

von M. W. (elektrowagi78) Benutzerseite


Lesenswert?

Hp M. schrieb:
> Wirklich für einen DAC??
Natürlich für einen DAC. Das Signal soll ausgegeben werden.

Fpgakuechle K. schrieb:
> Steile Flanke und keine Oberwellen gibt es nicht.
> Ich nehme an, du hast einen DAC an dessen Ausgang du misst und eine
> steile Flanke erwartest.
Der DAC ist nicht der begrenzende Faktor. Die Bandbreite seines Ausgangs 
mit Filter und Leistungsverstärker ist um eine Dekade über der 
Zielfrequenz.

Fpgakuechle K. schrieb:
> Ferner wäre eine Frage wie du das Verschleifen feststellen willst,
> vielleicht lügt dir ja ein Digital-Oszi mit seiner Interpolation
Auch das Oszilloskop hat eine ausreichende Bandbreite. Mit 100MHz liegt 
diese nochmals deutlich über der des DAC.

Die Bandlimitierung des Signals hat regelungstechnische Gründe.

von M. W. (elektrowagi78) Benutzerseite


Lesenswert?

no schrieb:
> bis Niquist und dann ist Schluss.

Wenn ich dein Beispiel betrachte, würde irgendwann die 
Frequenzkomponenten von 11 dort stehen, wo die Position 12 ist und 
danach rausfallen müssen. In dem Moment, wo sie rausfällt ist die 
Signalform schlagartig eine andere auch wenn ihr Beitrag schon recht 
klein ist. Das verträgt keine Regelung.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Markus W. schrieb:
> In dem Moment, wo sie rausfällt ist die
> Signalform schlagartig eine andere auch wenn ihr Beitrag schon recht
> klein ist. Das verträgt keine Regelung.

Ein typisches: "Wasch' mir den Pelz, aber mach' mich nicht 
nass"-Problem.
Wenn du eben immer die maximale Flankensteilheit haben willst, dann 
ploppt dir halt die hoechste Harmonische in dem Moment ersatzlos weg, wo 
sie auch nur ein pHz zu hoch ist. Und in dem Moment wird deine 
Flankensteilheit wohl stark nachlassen.
Kannst vielleicht versuchen, die einzelnen Oberschwingungen so zu 
gewichten, dass es so aussieht, als waeren sie durch ein sehr 
steilflankiges Besselfilter durchgepurzelt. Dann verschwinden sie nicht 
so ploetzlich und trotzdem sollte deine Kurvenform noch halbwegs OK 
bleiben.

Gruss
WK

von Xilinx-user (Gast)


Lesenswert?

Dergute W. schrieb:
> Ein typisches: "Wasch' mir den Pelz, aber mach' mich nicht
> nass"-Problem.
die Kunst hierbei besteht darin, den Pelz nur feucht zu machen.

Die Harmonischen müssen sanft herausgenommen werden. Das sollte 
eigentlich der shaper machen, der die Koeffizienten der iFFT bestimmt. 
Benötigt wird ein Fenster, in das die Koeffizientenmatrix hineingedrückt 
wird. Ich sehe da einen Cosinus ausgehend von der Welle (n-2) bis 0 bei 
Welle (n-1). Oder anders: Die Faktoren, die die Amplitude der 
Harmonischen bestimmen, werden nach oben hin nicht nur kleiner, sondern 
immer mehr kleiner -> Fensterung im Frequenzbereich.

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Die Schwierigkeit ist doch grundsätzlich die, dass die Frequenzen nach 
Fourier gerastert sind. D.h. man kann nicht "eine" Frequenz weglassen, 
sondern immer nur Bereiche. Wenn das sehr genau sein soll, müsste die 
FFT-Auflösung erhöht werden. Das ist trotzdem immer endlich.

Nach meinem Gefühl müsste es auch gehen, die Frequenzen nur im oberen 
Bereich zu verdichten, also eine weitere i-FFT zu addieren, die sich um 
den Bereich kümmert, der ausgeblendet werden soll. Die hätte z.B. 1024 
Frequenzen, benutzt aber nur die oberen 64. Die unteren 960 sind alle 
null und werden erst gar nicht erzeugt. Die Haupt FFT ist 64x gröber und 
besteht nur aus 16 Frequenzen. Bei der ist der obere Bereich, also die 
16 Null. Oder man nimmt 16x gröber und legt die oberen 4 Frequenzen 
lahm. Dann wären 60 + 64 Frequenzen zu erzeugen.

no schrieb:
> Klar kannst Du eine iFFT nehmen, warum einfach wenns auch komlpijoziert
> geht...
Das ist nicht unbedingt "kompliziert", sondern durchaus Standard in der 
digitalen Frequenzsynthese, besonders für die Erzeugung bandbegrenzter 
Signale, siehe -> "BLEP":
https://ieeexplore.ieee.org/abstract/document/4117934
https://www.ness.music.ed.ac.uk/wp-content/uploads/2016/12/ISMRA2016-48-1.pdf

diskret realisiert hier: 
Digitaler LaPlace-Funktionsgenerator im FPGA

von Jürgen S. (engineer) Benutzerseite


Angehängte Dateien:

Lesenswert?

Markus W. schrieb:
> Die Signale sind grundsätzlich Rechtecke / PWM.
Das Spektrum muss dann eben auf das Frequenzverhalten des Ausgangs und 
des angeschlossenen Systems angepasst werden. Bei höheren Frequenzen 
gibt es meistens Phasenverschiebungen durch den Frequenzgang, die zu 
korrigieren wären. Wenn man das außer Acht lässt, weil das System mit 
dem Anstieg mitgeht, ergibt sich einfach ein optimiertes Rechteck für 
das jeweilige Bandlimit. Der erste Ansatz ist das Einfügen der ersten 
Oberwelle -beim Rechteck die dreifache Frequenz - mit theoretisch Faktor 
0,125 gegenüber 1,125 x Grundwelle.

Für die f1+f3+f5 gibt es dann Abweichungen, je nach dem, wie flach die 
Platte sein soll und ob es monoton sein muss.

von Jürgen S. (engineer) Benutzerseite


Angehängte Dateien:

Lesenswert?

Der nächste theoretisch optimale Fall wäre 1,2 x f1 + 0,24 * f3 + 0,048 
* f5.

Allerdings machen immer mehr Oberwellen irgendwann kaum mehr zusätzliche 
Steilheit und lokal gibt es andersherum auch Bereiche wo sich lokal die 
Differentiale so überlagern, dass das Maximum schon erreicht ist, ohne 
dass man das an der höchsten Oberwelle direkt hätte ablesen können.

von M. W. (elektrowagi78) Benutzerseite


Lesenswert?

Dergute W. schrieb:
> Kannst vielleicht versuchen, die einzelnen Oberschwingungen so zu
> gewichten, dass es so aussieht, als waeren sie durch ein sehr
> steilflankiges Besselfilter durchgepurzelt. Dann verschwinden sie nicht
> so ploetzlich und trotzdem sollte deine Kurvenform noch halbwegs OK
> bleiben.

Die Frage wäre, wie die Gewichtung auszusehen hätte. Lässt sich das in 
eine Formel packen?

Jürgen S. schrieb:
> Der nächste theoretisch optimale Fall wäre 1,2 x f1 + 0,24 * f3 + 0,048
> * f5.
Wie gelangt man zu diesen Faktoren?

von no (Gast)


Lesenswert?

Jürgen S. schrieb:
> no schrieb:
>> Klar kannst Du eine iFFT nehmen, warum einfach wenns auch komlpijoziert
>> geht...
> Das ist nicht unbedingt "kompliziert", sondern durchaus Standard in der
> digitalen Frequenzsynthese, besonders für die Erzeugung bandbegrenzter
> Signale, siehe -> "BLEP":

Ich möchte nicht behaupten, dass ich hier der Pro wäre, und bin 
neugierig dazu zu lernen,
- aber alles was Du beschreibst ist eine Verkomoplizieung [sic.] der 
"naiven" Synthese bandlimitierter Wellen durch Addition von 
Sinusschwinungen:

> Die Schwierigkeit ist doch grundsätzlich die, dass die Frequenzen nach
> Fourier gerastert sind. D.h. man kann nicht "eine" Frequenz weglassen,
> sondern immer nur Bereiche. Wenn das sehr genau sein soll, müsste die
> FFT-Auflösung erhöht werden. Das ist trotzdem immer endlich.


Bernd schrieb:
> Was ist das Problem, wenn Du Dir das "Rechteck" aus Sinusschwingungen
> zusammenbaust und dabei nur die Oberwellen bis zu Deiner Wunschfrequenz
> berücksichtigst?

Eben. Das wurde noch nicht beantwortet.

Markus W. schrieb:
> no schrieb:
>> bis Niquist und dann ist Schluss.
>
> Wenn ich dein Beispiel betrachte, würde irgendwann die
> Frequenzkomponenten von 11 dort stehen, wo die Position 12 ist und
> danach rausfallen müssen. In dem Moment, wo sie rausfällt ist die
> Signalform schlagartig eine andere auch wenn ihr Beitrag schon recht
> klein ist. Das verträgt keine Regelung.

Jetzt wird es interessant.
Ich denke, alle bereits daraufhin erwähnten Methoden fühern zum Erfolg.

Klar ist, dass Du Kompromisse in Deinen Anforderungen machen musst
und diese für jeden Parameter definieren musst
bzw. die Zusmmenhänge zwischen den Parametern ergründen musst:

Markus W. schrieb:
> möglichst steilflankige Signale für einen DAC erzeugt werden,
> die eine variable Grundfrequenz besitzen, aber keine Komponenten
> oberhalb der Nyquist-Frequenz besitzen.

> In dem Moment, wo sie rausfällt ist die
> Signalform schlagartig eine andere auch wenn ihr Beitrag schon recht
> klein ist. Das verträgt keine Regelung.

Ich fange mal an zu sammeln:
- Samplerate?
- Wie steil?
- Frequenzumfang des Oszillators?
- Max. Geschwindigkeit des Wechsels zwischen max. wie großem Unterschied 
zweier Frequenzen?
- Max. Verformung der Hüllkurve?

Jürgen S. schrieb:
> Der erste Ansatz [...] die dreifache Frequenz - mit theoretisch Faktor
> 0,125 gegenüber 1,125 x Grundwelle.

>> Der nächste theoretisch optimale Fall wäre 1,2 x f1 + 0,24 * f3 + 0,048
>> * f5.
> Wie gelangt man zu diesen Faktoren?

Das würde mich auch interessieren!

von M. W. (elektrowagi78) Benutzerseite


Lesenswert?

no schrieb:
> Bernd schrieb:
>> Was ist das Problem, wenn Du Dir das "Rechteck" aus Sinusschwingungen
>> zusammenbaust
> Eben. Das wurde noch nicht beantwortet.
Doch, wurde es. Das Problem besteht darin, dass die Frequenzen oben in 
irgend einer Weise wegfallen müssen. Schlagartig führt zu Sprüngen. Es 
muss also eine Art von Ausblendung geben. Das ist das, was noch offen 
war.

no schrieb:
> - Samplerate?
> - Wie steil?
> - Frequenzumfang des Oszillators?
Welche Samplerate?

Das Signal soll auf einen DAC. Der hat eine deutlich höhere Bandbreite 
als das benötigte Signal und auch dessen anti aliasing Filter am 
Ausgang. Es gibt also dadurch keine Bandbegrenzung.

Praktisches Beispiel: Bandbreite bei Verstärkung 1:1 sind über 20MHz, 
die Ansteuerung erfolgt mit Pulsen im Bereich <100kHz, Auflösung 100ns.

von Bernd (Gast)


Angehängte Dateien:

Lesenswert?

Markus W. schrieb:
> no schrieb:
>> Bernd schrieb:
>>> Was ist das Problem, wenn Du Dir das "Rechteck" aus Sinusschwingungen
>>> zusammenbaust
>> Eben. Das wurde noch nicht beantwortet.
> Doch, wurde es. Das Problem besteht darin, dass die Frequenzen oben in
> irgend einer Weise wegfallen müssen. Schlagartig führt zu Sprüngen. Es
> muss also eine Art von Ausblendung geben. Das ist das, was noch offen
> war.
Ich verstehe es nicht. Wenn das Rechteck aus einzelnen Sinussignalen ( 1 
* f1 + 1/3 * f3 + 1/5 * f5 + ...) zusammengebaut wird, dann gibt es 
keine höheren Frequenzen, die irgendwie ausgeblendet werden müssen oder 
die schlagartig zu Sprüngen führen.

Als Beilage ein Pythonskript, mit dem das jeder durchspielen kann.


> Praktisches Beispiel: Bandbreite bei Verstärkung 1:1 sind über 20MHz,
> die Ansteuerung erfolgt mit Pulsen im Bereich <100kHz, Auflösung 100ns.
Wenn Du die Pulse durch plötzliche Umschaltung zwischen Minimum und 
Maximum des DACs machst, mußt Du die Bandbreite mit einem eigenen 
(Software-)Tiefpass begrenzen.

von no (Gast)


Lesenswert?

Markus W. schrieb:
> Das Problem besteht darin, dass die Frequenzen oben in
> irgend einer Weise wegfallen müssen. Schlagartig führt zu Sprüngen. Es
> muss also eine Art von Ausblendung geben. Das ist das, was noch offen
> war.

Ja, aber dafür braucht es keine iFFT (!?), sondern Faktoren für 
Amplituden der ungeraden Oberwellen, die von dem ideal-steilflankigen 
Rechteck abweichen, und so zum Ausblenden der Oberwellen bis Niquist 
führen.
Wie die Flanke dieses Ausblendens aussieht, entscheidest Du.

Bernd schrieb:
> ( 1* f1 + 1/3 * f3 + 1/5 * f5 + ...)
> nicht schlagartig zu Sprüngen führen.

Doch, bei einem Frequenzwechsel kommen schlagartig neue Oberwellen hinzu 
oder fallen ohne Auszublenden weg. Daher muss zu Niquist hin der 
Quotient Null werden.

Markus W. schrieb:
> Welche Samplerate?
> Das Signal soll auf einen DAC. Der hat eine deutlich höhere Bandbreite
> als das benötigte Signal und auch dessen anti aliasing Filter am
> Ausgang. Es gibt also dadurch keine Bandbegrenzung.
>
> Praktisches Beispiel: Bandbreite bei Verstärkung 1:1 sind über 20MHz,
> die Ansteuerung erfolgt mit Pulsen im Bereich <100kHz, Auflösung 100ns.

Warum erwartest Du eine Lösung für Dein Problem, obwohl Du die 
Anforderungen nicht genau definierst?

von Bernd (Gast)


Angehängte Dateien:

Lesenswert?

no schrieb:
> Bernd schrieb:
>> ( 1* f1 + 1/3 * f3 + 1/5 * f5 + ...)
>> nicht schlagartig zu Sprüngen führen.
>
> Doch, bei einem Frequenzwechsel kommen schlagartig neue Oberwellen hinzu
> oder fallen ohne Auszublenden weg. Daher muss zu Niquist hin der
> Quotient Null werden.
Natürlich muß die Reihe an geeigneter/gewünschter Stelle abgebrochen 
werden.

Zum Verhalten bei Frequenzwechsel habe ich bisher keine Anforderung 
gelesen (oder ich habe sie übersehen).

von M. W. (elektrowagi78) Benutzerseite


Lesenswert?

Bernd schrieb:
> Ich verstehe es nicht. Wenn das Rechteck aus einzelnen Sinussignalen ( 1
> * f1 + 1/3 * f3 + 1/5 * f5 + ...) zusammengebaut wird, dann gibt es
> keine höheren Frequenzen, die irgendwie ausgeblendet werden müssen oder
> die schlagartig zu Sprüngen führen.
Doch, freilich gibt es die:

Bernd schrieb:
> Zum Verhalten bei Frequenzwechsel habe ich bisher keine Anforderung
> gelesen (oder ich habe sie übersehen).
Die Anforderung steht im allerersten Beitrag:

Markus W. schrieb:
> weil die IFFT gerastert ist und nur sprunghaft richtig in die
> Nähe der Zielfrequenz kommt, wenn ein sweap gefahren wird.

Das ist innerste Problem der gesamten Thematik.

no schrieb:
> Ja, aber dafür braucht es keine iFFT (!?),
Wie möchtest du denn sonst effektiv und zeitsparend eine Reihe von 
Oberwellen erzeugen wenn nicht mit inverser FFT, bei der sehr viele 
Operationen mehrfach genutzt werden.

Wir sprechen hier von eventuell sehr langen Pulsen, bei denen wenigstens 
10-12 Oberwellen benötigt werden. Das würde bedeuten 10x Sinus bilden 
oder sie über Multiplikationen punktweise ausrechnen.

von no (Gast)


Lesenswert?

Markus W. schrieb:
> effektiv und zeitsparend

oh da erscheint eine weitere Vorraussetzung!


> Wie möchtest du denn sonst

Sinus mittels linearer Interpolation aus einer Tabelle auslesen, dann 
multiplizieren und addieren.
Je nachdem wie flexibel das sein muss und wie wenig Zeit Du hast, kannst 
Du auch die ersten 5 Oberwellen schon fertig addiert aus einer Tabelle 
auslesen, also Rechenzeit sparen, in dem Du dich nur um die restlichen 
Oberwellen kümmerst.

Ich wage zu behaupten, dass das schneller geht als eine inverse FFT. 
Außerdem hast Du nicht das Problem der Fenster.


Bin mir nicht sicher, ob Du dir wirklich noch Antworten aus dem Thread 
erhoffst, aber für mich scheint die Lage jetzt so:

Der Thread dreht sich im Kreis,
während unterschiedliche Lösungen inkl. dem Ausblenden gebracht wurden, 
Jürgen S. und Andere anscheinend leider ausgestiegen sind, weigerst Du 
dich die Anforderungen klar zu definieren und so bleibt uns nur der 
Blick in die Glaskugel, wie es so schön heißt.
So gut wie alle Antworten fragen dich nach mehr Infos mit denen Du 
teilweise stückchenweise raus rückst.

Und einerseits, soll das Rechteck "möglichst setilflankig sein" und bis 
Niquist bandbegrenzt, andererseits sollen die Oberwellen nicht 
schlagartig raus fallen, und das nicht einzeln und nicht in größerer 
Anzahl, wie bei einem FFT-Fenster, - was durchaus verständlich ist, 
wodurch es aber nicht mehr so steilflankig wird, und wofür wie gesagt 
auch Lösungen genannt wurden, Du aber nicht definieren möchtest, wie 
steilflakig vs. wie weich die Oberwellen raus genommen werden sollen.
Des Weiteren ist dann die Samplerate doch nicht der Flaschenhals, 
sondern etwas "regelungstechnisches", und die Samplerate sei sogar egal 
und auch ein Antialiasing-Filter sei vorhanden, wodurch die Frage 
aufkommt, warum Du von Niquist redest?

Was ist für Dich die richtige Antwort auf Deine Frage?
Und warum wurde sie nicht genannt?

von M. W. (elektrowagi78) Benutzerseite


Lesenswert?

no schrieb:
> oh da erscheint eine weitere Vorraussetzung!
Diese Forderung muss man explizit erheben? Entschuldigung, dass ist die 
Hauptanforderung in allen Projekten.

no schrieb:
> Ich wage zu behaupten, dass das schneller geht als eine inverse FFT.
Was zu beweisen wäre.

Die Sinuswerte lassen sich eben nicht in einer Tabelle speichern, da 
(Anforderung ebenfalls in der Einleitung beschrieben!) die Frequenzen 
variieren.

von Gerhard Z. (germel)


Lesenswert?

Markus W. schrieb:
> Die Sinuswerte lassen sich eben nicht in einer Tabelle speichern, da
> (Anforderung ebenfalls in der Einleitung beschrieben!) die Frequenzen
> variieren.

Aber selbsverständlich. Du brauchst im Endeffekt natürlich nur eine 
Tabelle (je nach Aufwand bis 2PI oder auch nur PI/4), du lässt für jede 
Ordnung einen Zeiger mit der jeweiligen Momentanfrequenz rotieren, um 
die momentane Phase zu berechnen, und dann werden nur noch aus der 
Tabelle die linearen Interpolationen der einzelnen Ordnungen gebildet 
und aufsummiert.

Genau so wurde ein Active Sound Design System im Fahrzeug realisiert mit 
bis zu 15 in Phase und Amplidude frei wählbaren Ordnungen, die synchron 
mit der Drehzahl mitliefen. Phase und Amplitude wurden von Sample zu 
Sample jeweils gemäß Drehzahl, Last und gewünschten Soundprofil 
angepasst. Das ganze lief auf einem Stellaris Launchpad mit 80 MHz und 
hat den Prozessor zu etwa 5% ausgelastet.

von PolyMoly (Gast)


Lesenswert?

>Ich möchte nicht behaupten, dass ich hier der Pro wäre, und bin
>neugierig dazu zu lernen,
>- aber alles was Du beschreibst ist eine Verkomoplizieung [sic.] der
>"naiven" Synthese bandlimitierter Wellen durch Addition von
>Sinusschwinungen:

Die Realisierung mit PolyBLEPs ist sehr einfach:
https://www.metafunction.co.uk/post/all-about-digital-oscillators-part-2-blits-bleps

Unten der Code, der sich leicht in die FPGA Welt portieren lässt.

von malsehen (Gast)


Lesenswert?

Passive Filter sollten MINDESTENS
40dB
haben!
AUDIO!!!
BOXENxVOLUMEN!

von malsehen (Gast)


Lesenswert?

malsehen schrieb:
> Passive Filter sollten MINDESTENS
> 40dB
> haben!
> AUDIO!!!
> BOXENxVOLUMEN!

ALLES TUT MIR LEID!
Dachte es geht um Goldöhrchen!

von M. W. (elektrowagi78) Benutzerseite


Lesenswert?

Gerhard Z. schrieb:
> Aber selbsverständlich. Du brauchst im Endeffekt natürlich nur eine
> Tabelle (je nach Aufwand bis 2PI oder auch nur PI/4), du lässt für jede
> Ordnung einen Zeiger mit der jeweiligen Momentanfrequenz rotieren,
Du sprichst von einer DDS, nehme ich. Ist mir gekläufig, aber:

> Genau so wurde ein Active Sound Design System im Fahrzeug realisiert mit
> bis zu 15 in Phase und Amplidude frei wählbaren Ordnungen,
Was für Autosound taugt, nämlich grobe Phasenfehler durch DDS und 
hingefummelte Interpolation, taugt in meinem Fall leider nicht. Ich kann 
auch nach dem DAC nicht mehr Höhen und Spitzen wegfiltern.

Bevor der nächste Einwand kommt: Ja der DAC hat einen AA-Filter, der 
wird aber nicht ausgelastet. Die höchsten Frequenzen, die das System ab 
kann, liegen tiefer, als Nyqist. (Die DAC-Einheit wurde extra so 
ausgelegt, dass deren Grenzfrequenz kein show stopper ist).

Im Übrigen gewegen wir uns auf geringfügig höheren Frequenzen, als 
Audio.

von no (Gast)


Lesenswert?


von M. W. (elektrowagi78) Benutzerseite


Lesenswert?

Schlechte Idee mit der linearen Interpolation.

von no (Gast)


Lesenswert?

Markus W. schrieb:
> grobe Phasenfehler durch DDS und
> hingefummelte Interpolation

> Schlechte Idee mit der linearen Interpolation.

Magst du das genauer erläutern?
Welche Phasenfehler?
Was stört dich an einer Interpolation, wenn Nuquist sogar weit höher als 
die geforderte Bandbreite liegt?

von M. W. (elektrowagi78) Benutzerseite


Lesenswert?

Jede DDS hat eine begrenzte Auflösung und muss interpoliert werden. Eine 
lineare ist aber in aller Regel zu simpel. Es entstehen Spektralanteile, 
die wieder nach unten spiegeln. Außerdem ist der Aufwand mit den vielen 
Sinus-Berechnungen und Interpolationen sehr schnell höher, als ein 
aufwändigeres Filtern.

von Hochfrequenz-Theoretiker (Gast)


Lesenswert?

Bernd schrieb:
> Ich verstehe es nicht. Wenn das Rechteck aus einzelnen Sinussignalen ( 1
> * f1 + 1/3 * f3 + 1/5 * f5 + ...) zusammengebaut wird, dann gibt es
> keine höheren Frequenzen, die irgendwie ausgeblendet werden müssen oder
> die schlagartig zu Sprüngen führen.
Dir ist bewusst, dass das niemals ein Rechteck gibt, wenn man es 
abbricht?

Und wenn das gewollt ist, dann muss bei steigender Grundfrequenz bei 
immer niedrigeren Ordnungszahlen abgebrochen werden?

Sagen wir Rechteckfrequenz = 100 kHz  GF = 1 MHz

100kHz -> Wellen #1 - #9 (900kHz)
110kHz -> Wellen #1 - #9 (990kHz)
111kHz -> Wellen #1 - #9 (999kHz)
112kHz -> Wellen #1 - #7 (784kHz) - #9 fällt raus
140kHz -> Wellen #1 - #7
150kHz -> Wellen #1 - #5 (750kHz) - #7 fällt raus
199kHz -> Wellen #1 - #5 (995kHz) -
200kHz -> Wellen #1 - #3 (600kHz) - #5 fällt raus.
(Schade um "Nummer 5 - den mochte ich  immer am Liebsten :-))
333kHz -> Wellen#1 - #3 (999kHz)
334kHz #3 raus und damit Sinus.

Ich glaube spätestens ab 150kHz wird das irgendwie ein Problem. Ohne 
einen Ausklingbereich dürfte das nicht funktionieren. Und ab 300kHz ist 
das irgendwie Murks. Dazwischen zumindest komisch, weil das Bandende 
nach unten springt.

von Bernd (Gast)


Lesenswert?

Hochfrequenz-Theoretiker schrieb:
> Dir ist bewusst, dass das niemals ein Rechteck gibt, wenn man es
> abbricht?
Ja.

Ich habe auch noch keinen DAC gefunden, der ein perfektes Rechteck 
ausgibt.
Das wird immer mehr oder minder trapezförmig, z.T. mit Über- und 
Unterschwingern. Ich habe es noch nicht geschafft Signale zu erzeugen, 
deren Anstiegszeit kürzer als 300 ps ist (das Oszi ist mit 85 ps 
spezifiziert).

> Und wenn das gewollt ist, dann muss bei steigender Grundfrequenz bei
> immer niedrigeren Ordnungszahlen abgebrochen werden?
Ja.

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.

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