Sinusamplitude bei bekannter f ermitteln über Abtasttheorem

Gast #5803781
Lesenswert?

Du könntest die Scheitelpunkte bestimmen. Anhand der Abstastrate weißt 
du auch wie weit diese zeitlich auseinander liegen. Damit kannst du 
Frequenz berechnen. Daran denken das Abtastheorem einzuhalten.

Daneben gibt es natürlich noch eine ganze Menge anderer Techniken. Z.B. 
eine Fouriertransformation.
Gast #5803784
Lesenswert?

Ups. Habs bisschen überlesen. Dachte du suchst die Frequenz.
Amplitude ist ja noch einfacher: Geh alle Werte innerhalb einer 
Schwingungsperiode durch und vergleich die Größe. Der größte Wert ist 
die Amplitude.
Gast #5803842
Lesenswert?

AbcAbc schrieb:
> (...) Der größte Wert ist die Amplitude.

Nicht unbedingt... Es koennte sein dass wir beim Abtasten den maximalen 
Wert gar nicht erwischen. Es haengt von der Phasenverschiebung des 
Signals ab!
Ich wuerde eine Discrete Fourier Transform mit 23 Punkten durchfuehren. 
Bei einer Abtastfrequenz von 2,3kHz waere die Aufloesung des Spektrums 
100Hz. Der absolute Betrag vom 10. Abtastwert des Spektrums, dividiert 
durch die halbe DFT-Groesse (11,5), bestimmt die Amplitude des 
1kHz-Sinussignales.
Gast #5803855
Lesenswert?

@Jaroslaw Da hast du natürlich recht. Frage ist halt wie genau muss die 
Amplitude bestimmt werden und wie viel Rechenleistung steht zur 
Verfügung. Wenn man die Frequenz des Signals und die Phasenlage kennt, 
kann man natürlich auch einfach nur zum Richtigen Moment abtasten.

Im allgemeinen Fall ist eine DFT natürlich der zu bevorzugende Weg 
braucht aber auch mehr Rechenleistung.
Gast #5803859
Lesenswert?

Danke.

Die Methode mit der Suche nach dem höchsten Abtastwert als Amplitude 
finde ich zwar gut und simpel, aber wenn ich es etwas eleganter 
hinkriege wäre es mir etwas lieber.

Das mit der DFT klingt ganz gut.
Gibt es da eine gute Quelle für die praktische Anwendung für die 
mathematisch nicht so begabten?

Ich bin bereits davor auf FFT und DFT gestoßen, aber konnte damit nicht 
so viel anfangen.

Ich würde gerne wissen wie man das herleiten kann mit den 23 Punkten?
Gast #5803907
Lesenswert?

Einfach die Samples nach dem Maximum zu durchsuchen ist natürlich 
Quatsch, insbesondere, wenn du gerade mal etwas mehr als 2 Abtastwerte 
pro Periode hast.

Da du das Abtastheorem eingehalten hast, kannst du theoretisch das 
Signal perfekt rekonstruieren. Google nach Rekonstruktionsfilter oder 
Sinc-Interpolation. Das sind Sachen im Zeitbereich.
Oder du fittest einen Sinus im Zeitbereich hinein, du hast ja sogar den 
Offset und die Phase.
Oder halt Sachen im Zeitbereich, FFT, Görtzel etc.
Gast #5803943
Lesenswert?

Jan schrieb:

> Einfach die Samples nach dem Maximum zu durchsuchen ist natürlich
> Quatsch, insbesondere, wenn du gerade mal etwas mehr als 2 Abtastwerte
> pro Periode hast.

Das ist einer der typischer Beiträge auf dem µCNet. Schreiben ohne zu 
denken. Es sind 1000 Hz, die mit 2300/s abgetastet werden.

Fange an zu denken und poste die minimale Anzahl von Abtastungen, die 
zur Amplitudenbestimmung benötigt werden.
Moderator #5803971
Lesenswert?

Das Signal hat die Gleichung

  y = a · sin(ωt + φ)

ω ist bekannt, a und φ nicht. Du kannst für zwei Abtastzeitpunkte t₁ und
t₂ mit den Messwerten y₁ und y₂ ein Gleichungssystem aufstellen

  y₁ = a · sin(ωt₁ + φ)
  y₂ = a · sin(ωt₂ + φ)

und daraus a und φ bestimmen.

Nachteil dieses Verfahrens: Da nur zwei einzelne Messwerte in das
Ergebnis eingehen, ist es empfindlich gegenüber Messrauschen.

Besser:

Du bildest zwei Produkte

  I = y · sin(ωt)
  Q = y · cos(ωt)

Daraus bildest du die Mittelwerte I̅ und Q̅ über ein ganzzahliges
Vielfaches der Periodendauer des Signals.

S. auch:

  https://de.wikipedia.org/wiki/I%26Q-Verfahren
Dann ist

  a = 2 · √(I̅² + Q̅²)
  φ = atan2(Q̅, I̅)

Je mehr Abtastwerte du in diese Berechnung eingehen lässt, umso besser
wird das Messrauschen unterdrückt.

Edit:

Der Faktor vor der Wurzel in der Amplitudenberechnung ist nicht ½,
sondern 2. Ich habe den Fehler oben entsprechend korrigiert.
Gast #5804284
Lesenswert?

Bernd schrieb:
> Das ist einer der typischer Beiträge auf dem µCNet. Schreiben ohne zu
> denken. Es sind 1000 Hz, die mit 2300/s abgetastet werden.
>
> Fange an zu denken und poste die minimale Anzahl von Abtastungen, die
> zur Amplitudenbestimmung benötigt werden.

Das kann ich nur zurückgeben. Soll ich dir ne Skizze machen?
Gast #5804409
Lesenswert?

Wenn das Signal nicht verrauscht ist, korrekt. Wenn man nun davon 
ausgeht, dass die Phase zufällig ist (oder man zufällig anfängt 
abzutasten) und man sich nur sehr wenige Perioden anguckt, so 
funktioniert die Methode der Maximum Suche nicht.
Werden es aber mehr Perioden, funktioniert es sogar ganz gut, habe mal 
ein paar Tests gemacht, siehe Anhang.

Ich hätte echt erwartet, dass die Maximum Methode deutlich schlechter 
bei Rauschen abschneidet.
Gast #5805164
Lesenswert?

Demnach habe ich nun die Qual der Wahl.
Am besten teste ich alle 3 Möglichkeiten, also das I&Q-Verfahren, die 
DFT und die Maximalamplitudenbestimmung.
Der Programmieraufwand hält sich da ja relativ in Grenzen.
Danke.
Moderator #5805301
Lesenswert?

aleXX schrieb:
> Am besten teste ich alle 3 Möglichkeiten, also das I&Q-Verfahren, die
> DFT und die Maximalamplitudenbestimmung.

Das I&Q-Verfahren ist bei näherer Betrachtung nichts anderes als die
DFT, beschränkt auf eine bestimmte Zielfrequenz. Die Begriffe I und Q
verwendet man bevorzugt im Zusammenhang mit der analogelektronischen
Demodulation von Signalen.
Moderator #5805409
Lesenswert?

aleXX schrieb:
> Demnach habe ich nun die Qual der Wahl.

Ich habe als Entscheidungshilfe mal kurz die wesentlichen Vor- und
Nachtteile der einzelnen Verfahren zusammengestellt:


Gleichungssystem mit zwei Gleichungen:

Bei unverrauschten Signalen ist das Ergebnis theoretisch exakt, mit
Rauschen kann es aber sehr ungenau werden.


Maximumverfahren:

Bei nur wenigen Abtastwerten ist du Chance gering, dass einer davon
genau auf einen Scheitelpunkt des Sinussignals fällt. Dann wird das
Ergebnis ungenau. Bei sehr vielen Abtastwerten konvergiert das Maximum
gegen das tatsächliche Maximum plus die Rauschamplitude und wird damit
ebenfalls ungenau. Deswegen ist das Verfahren nur für unverrauschte
Signale mit einer ausreichden Anzahl von Abtastwerten brauchbar. Ein
Vorteil ist der geringe Rechenaufwand.


DFT bzw. I&Q:

Man sollte drauf achten, dass der für die Berechnung betrachtete
Zeitraum möglichst genau einem ganzzahligen Vielfachen der Signalperiode
entspricht. Bei 1000 Hz und 2300 Hz entsprechen 23 Abtastperioden exakt
10 Signalperioden (10 ms). Deswegen sollte die Anzahl der ausgewerteten
Abtastwerte 23 oder ein Vielfaches davon sein. Nur dann ist bei
unverrauschtem Signal das Ergebnis theoretisch exakt. Bei verrauschtem
Signal verbessert eine große Anzahl von Abtastwerten das Ergebnis. Nimmt
man n·23 Abtastwerte, so ist der Fehler des Ergebnisses proportional zu
1/√n. Eine Erhöhung der Anzahl der Abtastwerte um den Faktor 100
reduziert also den Fehler auf ein Zehntel. Bei fixer Signal- und
Abtastfrequenz müssen die Sinusse und Kosinusse nur einmal vorab
berechnet werden, so dass der Rechenaufwand für die Signalauswertung
immer noch recht gering ist.


Nichtlineare Optimierung:

Da es sich um ein iteratives Verfahren handelt ist, das Ergebnis auch
bei unverrauschtem theoretisch nicht exakt, durch eine größere Zahl von
Iteration kann der Fehler aber praktisch beliebig reduziert werden, so
dass dies keinen Nachteil darstellt. Das Verfahren liefert auch dann
gute Ergebnisse, wenn der Betrachtungszeitraum keinem Vielfachen der
Signalperiode entspricht. Erkauft wird dies mit einem gegenüber der DFT
höheren Rechenaufwand. Auch der Programmieraufwand ist höher, jedoch
sind fertige Implementation der des dafür üblicherweise eingesetzten
Levenberg-Marquardt-Algoprithmus frei im Web verfügbar.
Gast #5805611
Lesenswert?

@Yalu X.
Vielen Dank, also dann wird es auf jeden Fall ein DFT-basiertes 
Verfahren.

Ich muss dazu noch erwähnen dass das Messsystem (der Abtaster) und die 
Signalquelle völlig unabhängig voneinander laufen.
Annähernd exakt kann ich keine Samples, immer zur gleichen Zeit der 
Periode, nehmen. Die Phase ist also auch unbekannt, aber das haben hier 
eigentlich auch alle sofort erkannt und intuitiv angenommen. Wobei nur 
die Amplitude bestimmt werden muss.

Für DFT-basierte Verfahren wurde hier genannt:
- Die ganz normale DFT.
- I&Q-Verfahren: Laut Wikipedia kann man die Wurzelrechnung durch 
spezielle Algorithmen annähern um Rechenaufwand einzusparen.
- Der Goerzel-Algorithmus, mit dem man z.B. nur die Amplitude ermitteln 
kann und der in diesem Fall schneller als die FFT wäre.

Wobei mir die Messgenauigkeit in diesem Fall wichtiger als die 
Geschwindigkeit ist.

Es ist schön zu sehen was es für verschiedene Ansätze gibt.
#5805616
Lesenswert?

Yalu X. schrieb:
> DFT bzw. I&Q:
>
> Man sollte drauf achten, dass der für die Berechnung betrachtete
> Zeitraum möglichst genau einem ganzzahligen Vielfachen der Signalperiode
> entspricht.

Ist das denn tatsächlich so relevant? Ich würde denken, wenn man 
ausreichend Zero-Padding macht und dann eine Parabel an die paar 
höchsten Punkte des Ergebnisses fittet, spielt das fast keine Rolle.
Moderator #5805747
Lesenswert?

Sven B. schrieb:
> Ist das denn tatsächlich so relevant? Ich würde denken, wenn man
> ausreichend Zero-Padding macht und dann eine Parabel an die paar
> höchsten Punkte des Ergebnisses fittet, spielt das fast keine Rolle.

Ja, damit kann man das Ergebnis sicher verbessern. Man muss dazu eben
das Spektrum noch für die beiden Nachbarfrequenzen berechnen, was ja
auch kein großes Problem ist.

Ich bin bei meinen Überlegungen davon ausgegangen, dass die Berechnung
nur für einzige Frequenz (im Beispiel die 1000 Hz) durchgeführt wird.
Das spart Rechenzeit, und da Signal- und Abtastfrequenz beide bekannt
sind, ist die Bedingung für den Betrachtungszeitraum bzw. die Anzahl der
Abtastungen i.Allg. leicht zu erfüllen.

aleXX schrieb:
> Für DFT-basierte Verfahren wurde hier genannt:
> - Die ganz normale DFT.
> - I&Q-Verfahren: Laut Wikipedia kann man die Wurzelrechnung durch
> spezielle Algorithmen annähern um Rechenaufwand einzusparen.

Die Wurzel brauchst du in beiden Fällen. Bei der klassischen DFT taucht
sie in der Betragsbildung des komplexen Ergebnisses auf. Beim
I&Q-Verfahren entsprechen I und Q dem Real- und Imaginärteil des
Ergebnisses der DFT.

Wenn du die Berechnung bspw. über 23 Abtastwerte machst, kostet schon
das mit sin und cos gewichtete Aufsummieren 46 Multiplikationen und 44
Additionen. Da fällt die Zeit für das anschließende Wurzeln kaum ins
Gewicht.
Gast #5806212
Lesenswert?

Yalu X. schrieb:
> Wenn du die Berechnung bspw. über 23 Abtastwerte machst, kostet schon
> das mit sin und cos gewichtete Aufsummieren 46 Multiplikationen und 44
> Additionen. Da fällt die Zeit für das anschließende Wurzeln kaum ins
> Gewicht.

und noch besser geht es bei 46 Werte n, usw.

Ich würde mit dem Sinus-Fit arbeiten. Das ist das Schnellste. Mittlere 
Abweichungen als Parameter in die Gleichung und über möglichst viele, 
als z.B. 46 rechnen.
#5806437
Lesenswert?

Mir wäre bei dem Sinus-Fit deshalb ein bisschen unwohl, weil das halt 
non-linear least squares ist, und keinesfalls garantiert ist dass das 
konvergiert. Hängt halt auch davon ab, wo und für was das verwendet 
werden soll. In meinem Python-Skript zur Datenanalyse auf dem 
Desktop-Rechner, klar, in irgendeinem Controller einer Maschine ... ich 
weiß nicht.
#5806851
Lesenswert?

Hallo aleXX.
Interessantes Thema, welches du hier aufgegriffen hast.  Die 
Sinusamplitude zu mit einer bekannten f zu ermitteln habe ich bis jetzt 
so noch nicht gemacht.
Man könnte aber eigentlich die Scheitelpunkte ermitteln. Außerdem schaut 
man dazu noch auf die Abtastrate, um zu schauen, wie weit das Ganze 
zeitlich auseinanderliegt. EineUSV-Funktion 
(https://www.mornsunpower.de/) wäre auch eine gute Möglichkeit. Man muss 
eben schauen, dass das Signal nicht verrauscht ist. Das mit der Maximum 
Suche ist auch schwierig, da die Phase ja eigentlich zufällig ist und 
sich selber relativ wenige Perioden anguckt.
Gast #5808345
Lesenswert?

Yalu X. schrieb:

> Gleichungssystem mit zwei Gleichungen:
>
> [...]
> Maximumverfahren:
>
> [...]
> DFT bzw. I&Q:
>
> [...]
> Nichtlineare Optimierung:

Hmm.
Die Ausgleichsrechnung (Fehlerquadrat-Methode nach Gauss)
fehlt in der Liste.

Ich vermute eine weit verbreitete, aber irrige Ansicht als
Grund: Die Fehlerquadrat-Ausgleichsrechnung funktioniert --
entgegen der verbreiteten Meinung -- NICHT nur mit linearen
Funktionen.

Richtig ist: Die Modellfunktion (d.h. die Funktion, die an
die Messwerte "angefittet" werden soll) muss sich als
Linearkombination von Basisfunktionen darstellen lassen; die
Koeffizienten dieser Basisterme werden durch die Ausgleichs-
rechnung bestimmt.
Die Basisterme SELBST können jedoch beliebig nichtlineare
Gestalt haben. Die Modellfunktion a*sin(x)+b*cos(x) erfüllt
diese Forderung, wenn alle Stützstellen x_n bekannt sind
und nur die Koeffizienten a und b gesucht sind.

Das Verfahren führt -- auch bei nichtlinearen Basisfunktionen --
auf ein lineares Gleichungssystem, das man direkt lösen kann,
wenn man möchte.

Die Begründung für diesen Sachverhalt ist zwar nicht wirklich
schwierig, aber doch etwas trickreich.
Moderator #5808602
Lesenswert?

Ich habe das Gauß-Verfahren mal durchgerechnet mit folgendem Ergebnis:

ω=2π·f_signal ist dabei die Kreisfrequenz des Signals, t_i=i/f_abtast
sind die Abtastzeitpunkte und y_i die Abtastwerte.

Wenn die n Abtastperioden zusammen ein ganzzahliges Vielfaches der
Signalperiode sind, durchläuft ω·t_i ein ganzzahliges Vielfaches von 2π.
Dadurch vereinfachen sich drei der obigen fünf Summen zu

Damit ist

womit wir für diesen Spezialfall wieder beim I&Q-Verfahren gelandet
sind.


Noch eine Ergänzung:

Wenn man die Abtastfrequenz frei wählen kann, ist es evtl. vorteilhaft,
sie auf das Vierfache der Signalfrequenz und die Anzahl der Abtastwerte
auf ein Vielfaches von 4 festzulegen. Dann sind nämlich die Werte der
Sinus- und Cosinus-Funktionen in den obigen Formeln alle -1, 0 odet +1,
und man erspart sich bei der Berechnung der Amplitude n Additionen und
2n Multiplikationen. Die Amplitudes ist dann
Gast #5808616
Lesenswert?

Wenn es wirklich ein sauberer Sinus ist, dann wäre der klassiche Weg 
dies über eine Hilbert Transformation der Eingangsdaten zu machen. Das 
erzeugt Dir aus deinen gemessenen Daten ein um 90° verschobenes Signal. 
Das kannst Du dann direkt als IQ Signal verwenden.

Die Hilbert Transformation kannst du per FFT erzeugen. Wenn Du den 
Messpunkt genau in der Mitte des Zeitbereiches, den Du überwachst legst, 
dann ist das Ergebniss am genauesten.

Der Vorteil: Es fließen alle Messdaten über den Zeitinterval in die 
Berechnung ein. Der Anteil des Rauschens nimmt also mit steigendem 
Zeitintervall ab.

Nachteil: Wenn Dein Sinus nicht sauber ist, dann wird das Ergebnis 
ungenau. Die anderen Verfahren haben da aber auch Probleme.
Gast #5809193
Lesenswert?

Ein filter f für samples s nehmen der bei der messfrequenz exakt 90° 
phase verschiebt und verstärkung 1 hat. Dann über gewünschte zahl von 
samples mittelwert sqrt(s**2+f**2) bilden.

Ist genau für jede zahl von samples, IQ oder DFT bräuchte zeitfenster 
sowie rechen-, und implementierungsaufwand ist gering.
#5809220
Lesenswert?

Ein Sinusfit funktioniert eher nicht wie bisher vorgeschlagen, da die 
Signalfrequnz nicht exakt 1000Hz ist und ebenso ist die Abtastfrequenz 
nicht exakt 2300Hz. Da müsste man als erstes die Zahl der Signalperioden 
mit den abgetasteten Werten bestimmen um die exakte Signalfrequenz 
bezogen auf die Abtastfrequenz zu bestimmen.

Beispiel:
fsignal 1000,05Hz
Fabtast 2299,95Hz

Das führt über 10000 Perioden des Signals zu einem kontinuierlichen 
Versatz bis zu 1 Periodendauer am Ende des Intervalls.
Moderator #5809265
Lesenswert?

Helmut S. schrieb:
> Ein Sinusfit funktioniert eher nicht wie bisher vorgeschlagen, da die
> Signalfrequnz nicht exakt 1000Hz ist und ebenso ist die Abtastfrequenz
> nicht exakt 2300Hz ...
>
> Beispiel:
> fsignal 1000,05Hz
> Fabtast 2299,95Hz
>
> Das führt über 10000 Perioden des Signals zu einem kontinuierlichen
> Versatz bis zu 1 Periodendauer am Ende des Intervalls.

Wenn man den Abtastzeitraum so lang macht (im Beispiel 10s oder 23000
Samples), dass das Signal am Ende um eine volle Periode daneben liegt,
ist das Ergebnis in der Tat unbrauchbar.

Verkürzt man den Abtastzeitraum auf 1/10, was einen Versatz der letzten
Periode von immer noch 1/10 Periode bedeutet, liegt der Amplitudenfehler
unterhalb von 1%. Ist das Signal nicht übermäßig verrauscht, genügt auch
schon eine Abtastung über 100 Perioden (das sind 230 Samples) reduziert
sich der Fehler auf 0,01-0,03% (je nach Phasenlage des Signals). Hab's
gerade getestet.

Wenn die Frequenzabweichungen größer sind, kann die Frequenz halt nicht
mehr als bekannt angenommen werden und muss deswegen durch das Fitting
mitbestimmt werden (s. Beitrag von Detlef).
#5809468
Lesenswert?

Moin,

Einen Vorschlag haett' ich auch noch, der hat aber wohl auch sicher 
aehnliche Genauigkeitsprobleme, wenn Samplezeitraum/frequenz und 
Signalfrequenz "bloed" sind:
Wenn man davon ausgehen kann, dass das Signal ein rauschfreier Sinus 
sein soll, dann wuerd' ich einfach den Effektivwert des Signals messen 
und daraus die Amplitude bestimmen: also jedes Sample quadrieren, aus 
allen Quadraten den arithm. Mittelwert bilden, den dann verdoppeln 
(Effektivwert vs. Amplitude) und einmal die Wurzel draus ziehen. 
Fertsch.

Gruss
WK
#5809649
Lesenswert?

Man könnte auch zwischen Abtastwerten interpolieren, wie beim 
Abtasttheorem normal unter "Rekonstruktion" beschrieben. Damit kann man 
dann das Maximum erwischen, auch wenn es zwischen Abtastwerten liegt. 
Ich würde zur Rekonstruktion ein paar zig Abtastwerte heranziehen und 
mir das graphisch mal ansehen.
Gast #5810176
Lesenswert?

Bernd K. schrieb:
> Wenn er eine FFT macht fällt das Ergebnis (I und Q) doch direkt unten
> raus, wozu musst Du da noch den Hilbert bemühen?

Nein, zur passablen Annäherung braucht man ein Fenster im Zeitbereich 
und dann eine Summe der Beträge der Frequenzbins um die Messfrequenz 
herum.

Eine DFT analysiert in Frequenzbins von 0/n(dc), 1/n, 2/n ... (N-1)/n 
"negative frequenzen", was nicht exakt in eine bin fällt, verteilt sich 
über einen evtl. sehr großen bereich darum.

Um das zu kontrollieren multipliziert man im Zeitbreich mit einem 
Fenster.

Auch dann muss wie gesagt ein Summe über ein paar Frequenzbins gemacht 
werden um sich anzunähern.

Goertzel hat die gleiche Problematik.

Hilbert ist in dem Sinne besser weil die Fenster und bin-summierung 
entfällt. Jedoch würde man es mit einer DFT realisieren, läuft man in 
eine ähnliche Problematik des spektralen Aliasings, ist also 
unpraktikabel.

Die Hilberttransformation wäre hier besser mit einem FIR Filter zu 
realisieren.

Die Anzahl an Taps bestimmt wie genau es sich annähert und wie breit das 
nutzbare Frequenzband des Transformators nach unten ist.

Dann ist die Lösung in der Tat recht universell, von einer unteren 
Grenzfrequenz des Transformators bis in Nyquistnähe.

Natürlich hat der Transformator eine Verzögerung und das FIR muss erst 
mal mit Samples gefüllt sein bevor die Messung beginnen kann.

Rauschen spektral ausserhalb der Messfrequenz jedoch addiert sich zum 
Amplitudenmesswert und macht die in diesem Fall trivial mögliche 
Mittelung der Amplitudenmesswerte ab einer gewissen Zahl sinnlos.

Eine etwas einfachere Lösung wäre den Hilbert Transformator durch ein 
Filter zu ersetzen dass bei der Messfrequenz genau die Phase um 90 Grad 
verschiebt. Etwas einfacher zu realisieren, jedoch nicht mehr 
breitbandig.

Wenn ich mehr Genauigkeit und Robustheit gegen Rauschen wollte dann 
würde ich es mit einer PLL realisieren.

Die PLL entsprechend schmalbandig ausgelegt lockt auf die Messfrequenz, 
ein  NCO liefert IQ, mit signal multiplizieren, Phasenvergleicher, 
Schleifenfilter auf NCO rückkoppeln, tiefpassfiltern und daraus 
Amplitude berechnen.
Tiefpassfiltern bestimmt die Bandbreite des mitlaufenden Filters und 
damit wie gut Rauschen aus dem Messergebnis raus bleibt.

Aufwand wohl weniger als die Hilbert-Transformator Lösung, jedoch eine 
gewisse Einschwingzeit für die PLL und das Tiefpassfilter.
Evtl. eine Adaptivität im Schleifenfilter um schnell und sicher lock der 
pll in breitem Frequenzbereich zu bekommen.
#5810504
Lesenswert?

Raymund Hofmann schrieb:
> Eine DFT analysiert in Frequenzbins von 0/n(dc), 1/n, 2/n ... (N-1)/n
> "negative frequenzen", was nicht exakt in eine bin fällt, verteilt sich
> über einen evtl. sehr großen bereich darum.

Hmm, das ist schon richtig, aber nichtsdestotrotz gehen ja dabei keine 
Informationen verloren. Ich denke ja immer noch, eine Parabel mit drei 
Punkten an das Maximum der FFT dranrechnen ist eine ziemlich exakte und 
robuste Methode.
Gast #5811610
Lesenswert?

Interesantes Problem, hatte leider erst jetzt die Zeit
gefunden, es nachzurechnen/zu lösen.

Am vielversprechenstens ist die QI-Lösung von Yalu
(bzgl. Rechenzeit/Aufwand und Genauigkeit),
die man mithilfe angewandter Mathematik noch wesentlich
verbessern kann, siehe z.B. folgendes Buch:

https://books.google.de/books/about/Best_Approximation_in_Inner_Product_Spac.html?id=XFoWaDq6_mYC&redir_esc=y

z.B. Problem 1 (Seite 1) und deren Lösung (Seite 61)
und einige Ergänzungen (nicht direkt im Buch erwähnt)
führt zu folgender Beschreibung (ob Polynome oder
Sinus-Funktionen spielt überhaupt keine Rolle):

Vektor v   = [sample_1,..,sample_n]
Vektor v_s = [sin(w_1),sin(w_2),..,sin(w_n)]
Vektor v_c = [cos(w_1),cos(w_2),..,cos(w_n)]

Matrix M = [v_s,v_c]

mit MI = invert(transpose(M)*M)*transpose(M)
(*:MatrixMult, MI:von einigen Autoren Pseudoinverse
genannt) erhält man:

v_p = MI*v

v_p ist der Parameter-Vektor, der das Signal v
am besten approximiert (least-square):

v_ba = v_p[0]*sin(w) + v_p[1]*cos(w)

Die Amplitude ist damit:

a = sqrt(v_p[0]^2 + v_p[1]^2)

Die Matrix M bzw. MI muss nur einmal berechnet werden.
Fär das Ergebnis (d.h. a) muss dabei keine ganze Periode
gesampelt werden, es funktioniert für jeden Bereich
sehr gut, eine genauere Analyse ergibt aber, das mindestens
eine Periode gesampelt werden sollte, bei dem ungünstigen
und kleinen Verhältnis 2300/1000 sollten es aber möglichst
viele Perioden bzw. Anzahl Samples > eine Periode sein.

Probiert man ein wenig rum, dann erkennt man eine sehr
günstige Abhängigkeit von Rauschen, Anzahl Samples
und Periode (meisst linear).

Bem. zur QI-Methode: für eine ganzzahlige Periode an
Samples ergibt sich aus die Matrix invert(transpose(M)*M)
die Lösung von Yalü.
Moderator #5811745
Lesenswert?

Sigi schrieb:
> Vektor v   = [sample_1,..,sample_n]
> Vektor v_s = [sin(w_1),sin(w_2),..,sin(w_n)]
> Vektor v_c = [cos(w_1),cos(w_2),..,cos(w_n)]
>
> Matrix M = [v_s,v_c]
>
> mit MI = invert(transpose(M)*M)*transpose(M)
> (*:MatrixMult, MI:von einigen Autoren Pseudoinverse
> genannt) erhält man:
>
> v_p = MI*v

Das ist doch genau dieses:

Egon D. schrieb:
> Die Ausgleichsrechnung (Fehlerquadrat-Methode nach Gauss)

Yalu X. schrieb:
> Ich habe das Gauß-Verfahren mal durchgerechnet mit folgendem Ergebnis:
> ...

Leider war ich zu faul, den Weg zu diesem Ergebnis zu aufzuschreiben,
was du jetzt nachgeholt hast. So kann der TE die dahinterliegende
Mathematik besser nachvollziehen.
Gast #5811749
Lesenswert?

Yalu X. schrieb:
> Das ist doch genau dieses:
>
> Egon D. schrieb:
>> Die Ausgleichsrechnung (Fehlerquadrat-Methode nach Gauss)

Ja und Nein: so wie ich es hingeschrieben habe,
hast du natürlich recht, aber allgemeiner muss
man ja nicht den Standard-L2-Raum verwenden.
Nimmt man gewichtete Normen (um einige Wertebereiche
zu betonen, andere zu "schwächen"), dann kann
man evtl. noch mehr Informationen rausholen bzw.
mehr Genauigkeit erzielen. Das wird auch im Buch
beschrieben.
Gast #5811762
Lesenswert?

Ich habe noch zum konkreten Problem eine
Simulation durchgeführt. Die X-Achse
zeigt die Sekunden (*2300 = Anz. Samples),
die Y-Achse zeigt die absollute Abweichung
von der tatsächlichen Amplitude (hier 1).
Dem Signal wurde noch gausches Rauschen
hinzuaddiert (Sigma=0.01). Der Fehler
ist prop. zu 1/sec^2.

0.25 Sekunden (d.h. ca. 500 Samples)
ergeben einen Fehler von 2*Sigma,
1.0 Sekunden einen Fehler von etwas
weniger als Sigma.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren