Hi. Wie kann ich die Amplitude eines Sinussignals softwareseitig aus abgetasteten Werten bestimmen? Angenommen die Frequenz beträgt fsin = 1000 Hz und die Abtastfrequenz beträgt fabt = 2300 Hz. Der Offset beträgt 0 und nur die Sinusamplitude ist unbekannt.
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.
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.
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.
@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.
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?
Rechenleistung ist genug vorhanden. Die abgetasteten Werte werden auf einem USB abgespeichert und erst im Anschluss am PC weiterverarbeitet.
Wenn man die Frequenz kennt und nur diese Interessiert, kann man statt der kompletten DFT auch den Görtzel hernehmen
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.
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.
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.
:
Bearbeitet durch Moderator
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?
Bernd schrieb: > Fange an zu denken und poste die minimale Anzahl von Abtastungen, die > zur Amplitudenbestimmung benötigt werden. 2
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.
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.
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.
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.
:
Bearbeitet durch Moderator
@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.
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.
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.
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.
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.
:
Bearbeitet durch User
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.
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.
Das ist natürlich völlig richtig und das habe ich an der Stelle auch (nicht zum ersten mal ;)) übersehen. Dann ist das (also explizites Least Squares) definitiv die Methode der Wahl.
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
:
Bearbeitet durch Moderator
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.
Sehr interessante Diskussion. Nichtlineare Optimierung ist für Sinusfit nicht nötig. Das geht mit einem linearen Verfahren so: Beitrag "Frequenz, Amplitude und Phase eines Sinussignals bestimmen" Cheers Detlef
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.
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.
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).
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
Ich sag es nochmal: Hilbert Transformation, kommt auch mit ungünstigen Verhältnissen klar.
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.
Nils Pipenbrinck schrieb: > 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 er eine FFT macht fällt das Ergebnis (I und Q) doch direkt unten raus, wozu musst Du da noch den Hilbert bemühen?
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.
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.
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ü.
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.
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.
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.
Sigi schrieb: > gausches Gaußsches Rauschen nehme ich an, ist gemeint. Ist das relevant für diesen Fall? Ich hätte eher 1/f-Rauschen angesetzt.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.