M.
Handelt es sich um ein Gemisch unterschiedlicher Signale, oder handelt
es sich um eine Grundwelle mit harmonischen Oberwellen?
Oder ist es ein halbwegs sauberes periodisches Signal, bei dem man die
Nulldurchgänge sauber erkennen kann?
Je nachdem, entweder erstmal ein Tiefpassfilter rechnen, oder auch nicht.
Dann den Mittelwert bestimmen und damit den Gleichanteil beseitigen.
Dann die Zeit zwischen den 20.000 Nulldurchgängen deiner 10.000
Schwingungen messen und daraus die Frequenz bestimmen. Die Auflösung
vergrößert sich dann entsprechend der Zahl der Nulldurchgänge.
Wenn sich die Frequenz ändert und/oder eine geringere Auflösung reicht,
einfach weniger Nulldurchgänge nehmen, bzw. direkt die Periodendauer
messen. Letzteres dann nur mit der Auflösung, die sich aus dem
Oversampling ergibt.
Gruß
Stefan DF9BI
> Handelt es sich um ein Gemisch unterschiedlicher Signale, oder
> handelt es sich um eine Grundwelle mit harmonischen Oberwellen?
> Dann den Mittelwert bestimmen und damit den Gleichanteil
> beseitigen. Dann die Zeit zwischen den 20.000 Nulldurchgängen
> deiner 10.000 Schwingungen messen und daraus die Frequenz
> bestimmen. Die Auflösung vergrößert sich dann entsprechend der
> Zahl der Nulldurchgänge.
Das mit den Nulldurchgängen hab ich mir auch schon gedacht, nur sind
die leider nicht so schön gleichmässig verteilt. Mal nen Beispiel, wie
das Signal aussehen könnte: Foto eines Lineals - die mm-Striche
bestimmen die Frequenz und je nach Toleranz ist der eine Strich mal
etwas breiter als der folgende. Im Durchschnitt stimmt aber das Raster
(die Frequenz).
M.
> MEM hat AFAIK nicht dieses feste Frequenzraster. Allerdings habe
> ich noch keinen Code zum Laufen gebracht, trotz Beispiel im
> Numerical Recipes.
Also Wavelet Analyse. In dem Buch scheint es noch Javabeispielcode
dafür zu geben:
http://www.uinet.or.jp/~ishiyasu/wavelet/outline_en.html
M.
Das ist ja nicht unbedingt ein Problem. Kommt nur drauf an, wieviele
Nulldurchgänge du nimmst.
Ich probiers mal mit Psuedo-Code
// erst Mittelwert berechnen
XM := 0;
For i := 1 to 10000 xm := xm + x[i]; // Summe aller Messwerte bestimmen
mx := xm / 10000; // daraus den Mittelwert berechnen
// Dann den ersten Nulldurchgang suchen
n := 0;
i := 1;
Repeat
inc(i)
until (x[i]*x[i-1] < 0); // ersten Vorzeichenwechsel suchen
j1 := i;
// Dann Nulldurchgänge zählen
for i := j1 to 10000
begin
inc(i);
if (x[i]*x[i-1] < 0) then // wenn Vorzeichenwechsel
begin
inc(n); // Anzahl Nulldurchgänge incrementieren
j2 := i; // Zeitpunkt des letzten Nulldurchgangs speichern
end;
end;
t := (j2-j1) * delta_t;
// und Frequenz berechnen
f := n / t / 2;
> abstimmbaren Bandpass
Autokorrelationsfunktion ( delay, multiply, integrate )
und die in tracking-modus nur auf enges Fenster um ersten Peak
oberhalb DC laufen lassen.
MfG JRD
> Autokorrelationsfunktion
Hast Du da mal ne gute Quelle für Einsteiger?
M.
Für eine komplette AKF würde man sonst zwei FFTs brauchen, oder man
müsste das Faltungsintegral komplett durchrechnen.
Die Auflösung wird damit aber auch nicht besser als durch die
Samplefrequenz vorgegeben.
Gruß
Stefan DF9BI
Die AKF bringt dir eigentlich nur etwas, wenn dein Nutzsignal so stark
von Störsignalen überlagert ist, dass du es praktisch gar nicht mehr
erkennen kannst.
Aus deinen bisherigen Postings hatte ich geschlossen, dass du ein Signal
hast, das einigermaßen sauber aussieht. In dem Fall macht AKF keinen Sinn.
Gruß
Stefan
Also insgesamt 2 Millionen Samples?
> und möchte die Frequenz der
> Grundwelle (kann +-10% abweichen) möglichst genau bestimmen (möglichst
> auch genauer als es die Samplerate vorgibt).
Was meinst du damit? Wenn du 200 Samples pro Schwingung hast, möchtest
du die Frequenz genauer als 1/200, also besser als 0,5% genau?
> Die FFT löst ja nur im
> festen Raster auf und ist auf Messfenstervielfache von 2 festgelegt.
Macht nichts, selbst wenn du nur die Hälfte der Messwerte nehmen
kannst, damit du auf 2^x kommst, durch die große Anzahl der Samples
hast du schon eine sehr feine Auflösung. Wenn du eine FFT mit
1 Megasamples in den µC? reinbekommst (schön gefenstert mit Blackman
oder ähnlicher Maske), bekommst du bereits eine Auflösung von
1/500000? der Samplingfrequenz, also bei deiner Frequenz sind das
dann 1/5000 = 0,05% (oder eine Faktor 2 kleiner oder größer).
Wenn das nicht ausreicht, kann man immer noch mit den Nachbarwerten
um den Peak im Frequenzspektrum interpolieren.
Jens
betrachte aus deinem grossen Zeitfenster zunächst nur ein kleines Fenster am
Anfang, sagen wir mal mit 100 Sinusperioden. Per FFT Frequenz und Phasenlage
in diesem Fenster bestimmen.
Das gleiche machst du mit einem kleinen Fenster am Ende des grossen
Zeitfensters.
Dann kannst du die beiden Phasen-Informationen verwenden, um die Frequenz
genauer zu berechnen. Denn der Zeitabstand zwischen den beiden Fenstern ist
ja genau bekannt.
Gruss
Michael
> Matthias Weingart wrote:
>
>> Rafael Deliano <Rafael_Deli...@t-online.de>:
>>
>>
>>>Autokorrelationsfunktion
>
> Die AKF bringt dir eigentlich nur etwas, wenn dein Nutzsignal so
> stark von Störsignalen überlagert ist, dass du es praktisch gar
> nicht mehr erkennen kannst.
>
> Aus deinen bisherigen Postings hatte ich geschlossen, dass du ein
> Signal hast, das einigermaßen sauber aussieht. In dem Fall macht
> AKF keinen Sinn.
Besser als die Nulldurchgangsmethode wäre es mit AKF wohl - weil das
gesamte Signal in die Betrachtung eingeht und nicht nur wenige
(möglicherweise gestörte) Punkte.
Hab grad festgestellt, dass das Signal ziemlich mit DC "versaut" sein
kann. Es kann einfach mal springen - wobei der Sprung über 0.1 bis 5
Perioden gehen kann oder auch schleichend und viel grösser als die
Amplitude der Grundschwingung ist.
Das müsste ich vorher erstmal irgendwie "glattbügeln", (also Hochpass)
und zusätzlich sogar Teile rausschneiden. Kann mir vorstellen, dass die
AKF mit DC überhaupt nicht klarkommt, die FFT stört so etwas vielleicht
weniger?
Rauschen ist nicht das Problem.
Elektronisch würde ne PLL bestimmt ne gute Lösung sein. Im Falle des
DC-Sprungs müsste man dann kurz mal ausrasten.
M.
> Matthias Weingart schrieb:
>> Ich habe ein paar Messwerte im Puffer (sinusähnlich, ca. 10000
>> Schwingungen, Oversampling ist ca. 100)
>
> Also insgesamt 2 Millionen Samples?
>
>> Die FFT löst ja nur im
>> festen Raster auf und ist auf Messfenstervielfache von 2
>> festgelegt.
>
> Macht nichts, selbst wenn du nur die Hälfte der Messwerte nehmen
> kannst, damit du auf 2^x kommst, durch die große Anzahl der
> Samples hast du schon eine sehr feine Auflösung.
Mal wieder ne Änderung der Aufgabenstellung *duck* :-):
Speicherplatz (und Rechenzeit) soll möglichst klein werden, darum
sollte es auch nur mit 10fach oversampling schon gute Ergebnisse
bringen und auch wenn ich nur 100 Perioden habe. Problem bei der FFT
ist ja auch, dass ich verschiedene Ergebnisse bekomme, je nachdem bei
welchem Sample ich das Zeitfenster beginne (und auch die Peaks schieben
sich da hin und her)...
Die Lösung mit einem "Filter" dass auf Resonanz verstimmt wird, hat ja
am Anfang auch Probleme mit dem Einsschwingen, aber wird zum Ende hin
(je mehr Samples dazugenommen werden) immer genauer, so dass man dann
frühzeitiger abbrechen kann. (mhh, gibt aber wieder nen Problem mit dem
DC-Sprung, siehe anderes Posting, also der breitbandige (+-10%)
Bandpass vorneweg bleibt mir wohl nicht erspart).
M.
Deswegen die Fensterung, also Mittelwert bestimmen und zu den
Rändern hin die Signale verkleinern und auf den Mittelwert zulaufen
lassen. Dann sind beide Ränder auf dem selben Wert.
> Die Lösung mit einem "Filter" dass auf Resonanz verstimmt wird, hat ja
> am Anfang auch Probleme mit dem Einsschwingen, aber wird zum Ende hin
> (je mehr Samples dazugenommen werden) immer genauer, so dass man dann
> frühzeitiger abbrechen kann. (mhh, gibt aber wieder nen Problem mit dem
> DC-Sprung, siehe anderes Posting, also der breitbandige (+-10%)
> Bandpass vorneweg bleibt mir wohl nicht erspart).
Das hört sich noch schwieriger an als mit FFT. Wie man Performance
einsparen kann hat Michael schon beschrieben, man kann auch erstmal
ein kleines Zeitfenster samplen, FFT berechen (wenn das schnell genug
geht), dann ausrechnen wie lange man warten kann damit man keinen
Fehler einer ganzen Schwingungsperiode eingeht, dann nochmal sampeln
und nach Michaels Beschreibung vorgehen.
Jens
Ich habs mal aufgepinselt:
http://www.embeddedforth.de/temp/akf.pdf
Das Signal sollte DC-frei sein, da hilft ein simpler Differenzierer.
Die AKF wandelt einen Sinus in eine Cosinuszeitreihe von um.
Das Rauschen sammelt sich nahe DC.
Anders als ursprünglich gesagt würde man hier nicht auf
den Sinuspeak sondern auf den Nulldurchgang sein Fenster legen,
Signal dort steiler.
Für jeden Punkt der Zeitreihe bräuchte man die simple
Schaltung. Delay also jeweils ein Sample länger.
Insofern um Aufwand zu reduzieren nicht die ganze Zeitreihe sondern
nur Fenster.
Das Verfahren wird bekanntlich in FSK-Modems verwendet um
zwei Frequenzen zu unterscheiden. Dort berechnet man nur einen
festen Punkt, den am Nulldurchgang.
Hier würde man mehrere Samples um den Nulldurchgang berechnen.
Anhand der Steilheit der Gerade die durch Null geht sollte man
die Frequenz also auch zwischen den Samples interpolieren
können.
MfG JRD
>> Hast Du da mal ne gute Quelle für Einsteiger?
>
> Ich habs mal aufgepinselt:
>
> http://www.embeddedforth.de/temp/akf.pdf
Thx.
> Für jeden Punkt der Zeitreihe bräuchte man die simple
> Schaltung. Delay also jeweils ein Sample länger.
> Insofern um Aufwand zu reduzieren nicht die ganze Zeitreihe sondern
> nur Fenster.
>
> Das Verfahren wird bekanntlich in FSK-Modems verwendet um
> zwei Frequenzen zu unterscheiden. Dort berechnet man nur einen
> festen Punkt, den am Nulldurchgang.
>
> Hier würde man mehrere Samples um den Nulldurchgang berechnen.
> Anhand der Steilheit der Gerade die durch Null geht sollte man
> die Frequenz also auch zwischen den Samples interpolieren
> können.
Also ist das Fenster viel kleiner als eine Periode (ich hätte das jetzt
grösser gemacht (also mind. eine komplette Periode). Ich möchte
möglichst viel vom Signal verwenden - umso genauer wird es (hoffe ich),
andererseits spart ein kleines Fenster Zeit.
M.
Das Fenster sind hier eigentlich nur 2 Punkten: die unmittelbar
links und rechts vom Nulldurchgang.
Aber wenn das Signal jittrig ist und die Abtastrate hoch kann das
zuwenig sein, weil man den Nulldurchgang dann nicht immer im
Blickfeld hat und kontinuierlich Frequenz berechnen kann.
Deshalb ist oft 3-4 Punkte berechnen für Tracking besser.
Man benötigt die Multiplizierer und Integrator dann aber 3-4 mal,
Aufwand steigt.
Wenn das Signal in FIFO fester Länge ankommt hat man wegen
des Delay-RAM kaum Probleme: kann man über Indexoffset dort
abgreifen. Aber die FIFO muß so tief sein, daß der Nulldurchgang
dort überhaupt noch gespeichert ist. Bei hoher Samplerate und
niederer Sinusfrequenz also entsprechend viel RAM für FIFO nötig.
MfG JRD
War das jetzt die Antwort eines DSPs??
Die AKF läßt sich wunderbar in Analogtechnik realisieren.
- Henry
Richtig. Aber da ist die Frequenz genau bekannt.
>
> Hier würde man mehrere Samples um den Nulldurchgang berechnen.
> Anhand der Steilheit der Gerade die durch Null geht sollte man
> die Frequenz also auch zwischen den Samples interpolieren
> können.
Wie macht es denn ein Mensch, wenn er aufs Scope guckt? Irgendwas mit
Mustererkennung und Gewichtung.
- Henry
MfG JRD
Ich habe hier auf dem Schreibtisch laufen: SC-Bandpassfilter,
Schmitt-Trigger, Delay als digitales Schieberegister realisiert, XOR,
SC-Tiefpassfilter, Schmitt-Trigger. Funzt super.
Nebenher ist der Controller zu 100% rechenleistungsmäßig frei.
Eine PLL eignet sich wohl eher für längerperiodische Signale. Lasse mich
aber gerne belehren.
- Henry
Ein numerischer Fit an einen Sinus. Die Startfrequenz für den Fit
bekommst Du durch die Zahl der Nulldurchgänge. Das habe ich in einem
ähnlichen Fall (1e6 Datenpunkte, 10 bis 1e4 Perioden) erfolgreich
angewendet. In der Diss. von Stefan Götte wird das Verfahren beschrieben:
http://deposit.ddb.de/cgi-bin/dokserv?idn=96575023x&dok_var=d1&dok_ext=ps&filename=96575023x.ps
(ab Seite 42)
Ein Fit für eine Mio Datenpunkte kann erheblich schneller sein als eine FFT.
Dafür erhält man weniger Information, nämlich nur die drei Zahlen
Frequenz, Amplitude und Phase der Grundschwingung. Andere Frequenzanteile,
die im Signal enthalten sein mögen, werden ignoriert. Außerdem ist anders
als bei der FFT die Präzision mit der die Frequenz ermittelt wird, nicht
fest mit der Zahl der Datenpunkte verknüpft.Wahrscheinlich reichen
erheblich weniger Datenpunkte als Du zur Verfügung hast, um eine dem
Problem angemessene Genauigkeit der Auswertung zu erreichen.
---<(kaimartin)>---
--
Kai-Martin Knaak
http://lilalaser.de/blog
Michael Koch schrub:
Dabei könnte es aber passieren, dass man sich mit der Anzahl der
Perioden, die zwischen den beiden Bereichen liegen, verschätzt.
Aber so ähnlich:
Erst mal nur eine sin-Funktion bezüglich Phase und Periodendauer
in die geschätzte erste Periode reinfitten.
Jetzt kennt man den ungefähren Wert der Periodendauer.
Nun die zweite Periode mit einbeziehen. Dadurch bekommt man einen
genaueren Wert für die Phase und Periodendauer.
Jetzt die erste und die die dritte Periode berücksichtigen, die
zweite auslassen. Mit diesen beiden Fenstern wie gehabt
Phasenlage und Periodendauer optimieren. Das Optimieren müsste
recht zügig gehen, da man ja schon einen guten Startwert hat.
So macht man weiter: 1. und 4. Periode berücksichtigen, Phase und
Periodendauer optimieren. Dann 1. und 5. Periode
berücksichtigen....
Der Rechenaufwand steigt nur linear mit der Anzahl der Samples,
müsste also irgendwann schneller als FFT sein.
CU Rollo
Moin!
>> Dann kannst du die beiden Phasen-Informationen verwenden, um
>> die Frequenz genauer zu berechnen. Denn der Zeitabstand
>> zwischen den beiden Fenstern ist ja genau bekannt.
>Dabei könnte es aber passieren, dass man sich mit der Anzahl der
>Perioden, die zwischen den beiden Bereichen liegen, verschätzt.
Dagegen hilft Zählen der Nulldurchgänge, die schnellste Methode, ein
ungefähres Ergebnis als Startwert für kompliziertere Verfahren zu
erhalten. Für die Anzahl der Perioden zwischen zwei Zeitpunkten ist es
exakt exakt genug. :-)
>Erst mal nur eine sin-Funktion bezüglich Phase und Periodendauer
>in die geschätzte erste Periode reinfitten.
Hiervon hingegen würde ich - über das gesamte Signal - das exakteste
Ergebnis überhaupt erwarten. Vermutlich ist es aber auch die
aufwendigste Methode.
Gruß,
Michael.
Moin!
Hab eben erst gesehen, daß Du hier schon ähnliches geschrieben hast
wie ich gerade...
>Ein numerischer Fit an einen Sinus. Die Startfrequenz für den Fit
>bekommst Du durch die Zahl der Nulldurchgänge.
>Ein Fit für eine Mio Datenpunkte kann erheblich schneller sein als eine FFT.
>Dafür erhält man weniger Information, nämlich nur die drei Zahlen
>Frequenz, Amplitude und Phase der Grundschwingung. Andere Frequenzanteile,
>die im Signal enthalten sein mögen, werden ignoriert.
Wobei die Frequenzanteile auch sehr dicht beieinander liegen können...
Genauer gesagt: Bei auch nur minimalen Frequenzschwankungen oder einem
Phasensprung geht das Verfahren zwangsläufig in die Hose, weil der
Fit-Sinus wahlweise vorn oder hinten nicht ins Signal passt.
>Außerdem ist anders
>als bei der FFT die Präzision mit der die Frequenz ermittelt wird,
^^^^^^^^^ Auflösung!
>nicht fest mit der Zahl der Datenpunkte verknüpft.
Die Information über die wahre Frequenz ist durchaus noch vorhanden,
die Quantisierung im Frequenzbereich (also die Einschränkung auf die
Auflösung 1/T) erfolgt erst, wenn man sich bloß den größten Peak
herauspickt.
Das kann man aber auch besser machen:
- Schöne Fensterfunktion übers Signal legen
- FFT
- Transformierte Fensterfunktion dranfitten
So hat man keine Probleme mehr mit Phasensprüngen und leichten
Schwankungen und Rauschen und Störungen in anderen Frequenzbereichen
kann man beim Fit ignorieren. Und man hat eine deutlich höhere
Genauigkeit als max(FFT).
Gruß,
Michael.
Klingt für mich alles so nach mp3.
- Henry
MfG JRD
> Man benötigt die Multiplizierer und Integrator dann aber 3-4 mal,
> Aufwand steigt.
Warum eigentlich Multiplizieren? AKF arbeite ja mit der Summe der
Produkte des Signales mit denen des selben Signalen etwas später. Warum
denn nicht einfach die Summe der Differenzen? (noch besser wäre wohl
Gauss' Quadratsumme, aber das ist ja auch wieder * drin). Die Differenz
würde mir auf den ersten Blick logischer erscheinen.
Also anstelle
Summe( f(t)*f(t+d) )
besser
Summe( f(t)-f(t+d) )
(d=delay, t=Laufvariable)
> Wenn das Signal in FIFO fester Länge ankommt hat man wegen
FIFO braucht's nicht, hab ja alles im RAM.
M.
> Matthias Weingart schrieb:
>> je
>> nachdem bei welchem Sample ich das Zeitfenster beginne (und auch
>> die Peaks schieben sich da hin und her)...
>
> Deswegen die Fensterung, also Mittelwert bestimmen und zu den
> Rändern hin die Signale verkleinern und auf den Mittelwert
> zulaufen lassen. Dann sind beide Ränder auf dem selben Wert.
Nach einer einfachen Differenzierung müsste man ja noch dieselbe
Frequenz für die Grundwelle rausbekommen, oder? Damit hätte ich dann
erstmal DC-Sprünge im Signal eliminiert (thx an Rafael). Die Amplitude
ist ja egal, brauche ja nur die Frequenz.
Wie gut klappt das wirklich mit der Fensterung? Hatte damit mal vor
Jahren gespielt, war aber auch nicht so zufrieden. Lag aber vielleicht
auch daran, dass das Signal ziemlich aperiodisch war.
Zur Auswertung der Frequenzpeaks mit Wichtung: Gibt es da Literatur
dazu? Nehmen wir mal an, ich habe 3 Peaks. Bei 49.9Hz=30%, bei 50=100%,
bei 50.1=35%; also liegt die Frequenz der Grundwelle etwas oberhalb von
50Hz. Nur um wieviel?
M.
Auch eine PLL kann man rechnen.
Hoch- und Tiefpassfilter sind per Software recht einfach zu realisieren.
Musst mal unter digitale Filer googeln.
Der Rechenaufwand ist erheblich geringer, als bei einer FFT oder AKF.
DC-Anteil eliminieren ist ebenfalls sehr einfach, entweder so wie ich
das beschrieben habe, oder per Tiefpassfilter den Gleichanteil bestimmen
und vom Nutzsignal abziehen.
Die Frage wäre noch, wie du die Signale auswerten willst, offline auf
nem PC, oder quasi online auf nem leistungsschwachen Microcontroller.
Im ersten Fall kann man mit den Signalen einfach mal spielen.
Interessant wäre noch zu wissen, ob es während deiner Messdauer, d.h.
über die 10000 Perioden Frequenzwechsel gibt, die du erkennen willst,
oder ob du nur die mittlere Frequenz deines Nutzsignals über alle 10000
Perioden ermitteln willst.
Gruß
Stefan DF9BI
Ich habe vor ca. 20 Jahren mal einen Vortrag über eine Lösung mit
Oberflächenwellenfiltern gehört. Ging dabei um die Faltung eines Signals
mit einem Pseudorauschen für militärische Anwendungen / Spread-Spektrum
Technik.
Habs zwar nicht so ganz verstanden, wie das auf dem
Oberflächenwellenfilter gehen sill und mich auch nicht intensiv damit
beschäftigt, aber damit konnte man angeblich zwei Signale in Echtzeit
miteinander falten. Damit wäre dann auch eine AKF möglich.
Geht aber an der Frage des OP etwas vorbei.
Gruß
Stefan DF9BI
> Ein numerischer Fit an einen Sinus.
Danke für den Tipp. So einen schönen Sinus wie im dem bei Dir
beschrieben optischen Fall habe ich vermutlich aber nicht. Aber das hat
mich auf eine Idee gebracht. Fit auf ein Rechtecksignal. Das würde
sogar völlig ohne Multiplikationen auskommen.
M.
> Rafael Deliano <Rafael_Deli...@t-online.de>:
>
>> Man benötigt die Multiplizierer und Integrator dann aber 3-4 mal,
>> Aufwand steigt.
>
> Warum eigentlich Multiplizieren? AKF arbeite ja mit der Summe der
> Produkte des Signales mit denen des selben Signalen etwas später.
> Warum denn nicht einfach die Summe der Differenzen? (noch besser wäre
> wohl Gauss' Quadratsumme, aber das ist ja auch wieder * drin). Die
> Differenz würde mir auf den ersten Blick logischer erscheinen.
> Also anstelle
> Summe( f(t)*f(t+d) )
> besser
> Summe( f(t)-f(t+d) )
= Summe( f(t)) - Summe( f(t+d)) = Summe über den nicht überlappenden
Bereich. Kann ja wohl nicht stimmen.
Tut mir ja leid, aber die Korrelation ist nunmal das Ensemblemittel über
das Produkt zweier Zufallsvariablen.
Gruß
Henning
> Interessant w„re noch zu wissen, ob es w„hrend deiner Messdauer,
> d.h. ber die 10000 Perioden Frequenzwechsel gibt, die du erkennen
> willst, oder ob du nur die mittlere Frequenz deines Nutzsignals
> ber alle 10000 Perioden ermitteln willst.
Tja, das wird sich alles erst noch herausstellen. Also DC-Sprünge wird
es bestimmt geben. Was ich mir auch noch vorstellen kann, dass die
Frequenz im Messintervall langsam weglaufen könnte. Beim Fit auf Sinus
oder Rechteck wäre das ein dritter oder vierter Parameter der
angleichbar wäre (Frequenzdrift per Gerade oder Parabel oder gar Spline
wegfitten).
Auf jeden Fall wird das Signal komplett im RAM liegen. Spielen werd ich
erstmal auf dem PC. Dann muss ich sehen, wo ich soviel RAM mit nem uC
kriege. Vermutlich wird das ein ARM mit externem RAM. Das bedeutet dann
vermutlich auch BGA's zu löten, ohje...
M.
Es gibt abgespeckte Variante um die Multiplikation zu umgehen:
--+-------+---------| |
| | | switch |----Integrator----
| +-- *-1 --| |
| |
+-Kop --delay----------+
Das Signal das durch die Verzögerung läuft wird
per Komparator auf 1 Bit quantisiert( notfalls mit Dither
verschönern ), also nur noch +1 oder -1.
Der Multiplizierer ist dann Umschalter zwischen
Originalsignal und invertiertem Signal, also aufwandsarm.
MfG JRD
>> Summe( f(t)-f(t+d) )
>
>= Summe( f(t)) - Summe( f(t+d)) = Summe |er den nicht
>|erlappenden
> Bereich. Kann ja wohl nicht stimmen.
Ja, vermutlich zu einfach.
M.
>> Warum eigentlich Multiplizieren? Die Differenz
>> würde mir auf den ersten Blick logischer erscheinen.
> Wenn man vorhat die Theorie so aus dem Stegreif mal umzuentwickeln
> überhebt man sich leicht.
Jo scheint so. :-)
> Es gibt abgespeckte Variante um die Multiplikation zu umgehen:
>
>--+-------+---------| |
> | | | switch |----Integrator----
> | +-- *-1 --| |
> | |
> +-Kop --delay----------+
>
> Das Signal das durch die Verzögerung läuft wird
> per Komparator auf 1 Bit quantisiert( notfalls mit Dither
> verschönern ), also nur noch +1 oder -1.
> Der Multiplizierer ist dann Umschalter zwischen
> Originalsignal und invertiertem Signal, also aufwandsarm.
Eine Gleichrichtung, wie bei meinem "Fit auf ein Rechtecksignal",
allerdings hat man hier nur die Delay zu verändern und nicht Frequenz
und Phase. Man wird aber nicht genauer als die Samplerate.
Auch ne Überlegung wert....
M.
> Eine Gleichrichtung, wie bei meinem "Fit auf ein Rechtecksignal",
> allerdings hat man hier nur die Delay zu verändern und nicht Frequenz
> und Phase. Man wird aber nicht genauer als die Samplerate.
Du kannst sowieso nicht beliebig genau werden, die Cramér-Rao bound
begrenzt die Genauigkeit Deiner Schätzung sowieso.
Schätztheorie ist "eine Wissenschaft für sich", eine "wird schon
irgendwie gehen"-Lösung wird immer suboptimal sein.
Bezüglich Deines Problems fällt mir David C. Rife, Robert R.
Boorstyn, "Single-Tone Parameter Estimation from Discrete-Time
Observations", IEEE Transactions on Information Theory, September 1974
ein, Michael P. Fitz, "Further Results in the Fast Estimation of a
Single Frequency", IEEE Transactions on Communications,
Feb./March./April 1994 hatte ich auch mal gelesen.
Gruß
Henning
*
|\
+---+---+---+
\|
+
MfG JRD
Ich würde dann erstmal das Signal auf dem PC als Kurve darstellen. Sowas
geht mit Delphi ganz gut. Notfalls wohl auch mit Excel.
Dann filtern und wieder als Kurve darstellen und einfach erstmal ansehen
und dann entscheiden, wie aufwendig die Sache werden muss. Das mit der
Frequenzdrift läßt sich durch eine Messung der Periodendauer des
gefilterten Signals über die Zeit erkennen. Also Abstand zwischen zwei
Nulldurchgängen von - nach + messen und die Absolutzeit auf der X-Achse
und die Periodendauer auf der Y-Achse darstellen. Da müsste man schon
was sehen können.
Über was für Frequenzen und Abtastintervalle reden wir hier?
Gruß
Stefan DF9BI
> aber damit konnte man angeblich zwei Signale in Echtzeit
> miteinander falten.
Von der "programmierbaren" SAW-Version war dann aber nichtmehr viel
zu hören.
Nach dem schmählichen Verrat der Russen&Ossis die nichtmehr
den kalten Krieg weiterkämpfen wollten ist schlicht die Regierungs-
Knete überall gestrichen worden und ohne die rührt die Industrie
keinen Finger wenn der Einsatz für Consumeranwendungen nicht
unmittelbar ersichtlich ist.
MfG JRD
> Was ich mir auch noch vorstellen kann, dass die
> Frequenz im Messintervall langsam weglaufen könnte.
Auch das lässt sich auswerten, indem du nur zwei kurze Zeitfenster
betrachtest.
Über jedes Fenster wird eine FFT gerechnet, dann hast du jeweils Frequenz
und Phasenlage. Du hast also 4 Grössen gegeben:
F1, F2, P1, P2
Die mittlere Frequenz nimmst du zunächst an als (F1+F2) / 2.
Die mittlere Frequenzdrift über den gesamten Zeitraum ist F2-F1.
Dann weiter wie bereits vorgeschlagen, die Phaseninformation verwenden um
die Frequenzen genauer zu berechnen. Das geht natürlich nur unter der
Annahme, dass zwischendurch keine wilden Frequenz- oder Phasensprünge
stattgefunden haben.
Nochmal zurück zu deiner ursprünglichen Idee mit einer FFT über alle Daten.
Ich vermute das ist bereits die optimale Methode, wenn es auf möglichst hohe
Genauigkeit ankommt.
Gruss
Michael
Müsste es
> Damit hätte ich dann
> erstmal DC-Sprünge im Signal eliminiert (thx an Rafael).
Wenn man kleinlich wäre, dann ist DC immer DC, Sprünge sind
mit der DC überlagerte Frequenzen ;-)
Die Differenzierung ergibt halt einen 6dB/Oktave Hochpass.
> Die Amplitude
> ist ja egal, brauche ja nur die Frequenz.
Damit bekommt man aber noch nicht die Unstetigkeiten am Rand
weg, eine FFT geht ja davon aus, dass das Signal periodisch ist,
also am Rand mit dem nächsten Sample von vorne wieder beginnt.
> Wie gut klappt das wirklich mit der Fensterung? Hatte damit mal vor
> Jahren gespielt, war aber auch nicht so zufrieden. Lag aber vielleicht
> auch daran, dass das Signal ziemlich aperiodisch war.
Klappt eigentlich sehr gut:
http://en.wikipedia.org/wiki/Window_function
Welche die Beste für eine genaue Frequenzanalyse ist, weiss ich
jetzt auch nicht.
> Zur Auswertung der Frequenzpeaks mit Wichtung: Gibt es da Literatur
> dazu? Nehmen wir mal an, ich habe 3 Peaks. Bei 49.9Hz=30%, bei 50=100%,
> bei 50.1=35%; also liegt die Frequenz der Grundwelle etwas oberhalb von
> 50Hz. Nur um wieviel?
Wüsste ich jetzt auf Anhieb auch nicht, man sollte sich vorher
auch Gedanken machen ob eine Schwerpunktfindung überhaupt Sinn
macht, wenn die Genauigkeit durch andere Fehlerquellen sowieso
nicht gegeben wäre.
Letztendlich geben x samples theoretisch sowieso nur eine begrenzte
Genauigkeit her, da helfen dann nur mehr samples, egal mit welchem
Verfahren du herangehst.
Mit Nulldurchgängen würde ich überhaupt nicht anfangen, da kannst
du Differenzieren wie du willst :-).
Jens
Ja, das war genau die Zeit. Als es dann mit der Jobsuche schwierig
wurde, habe ich mich dann nach der Zeit an der Uni selbstständig gemacht.
Gruß
Stefan DF9BI
Jetzt muß ich erstmal gucken was ein Totzeitglied ist...
Also, der Störabstand darf bescheiden sein! Ich habe das ausführlich
getestet. Im Gegensatz zu den Zählermethoden.
Und der Unterschied zwischen digital und analog sollte bei dieser
Anordnung vermutlich nicht mehr als ca. 2dB sein. Ist gibt dazu Zahlen
im Bereich SS. Denke, sie sind überführbar.
Alles in allem eine sehr effiziente Struktur.
Vielleicht sollte ich noch erwähnen, das die Verzögerung 1-Bit Amplitude
hat aber mit Oversampling arbeitet (bezogen auf die Bit-Nettorate). Also
ein Schieberegister mit z.B. ca. 30 Bits.
- Henry
> Ich habe ein paar Messwerte im Puffer (sinusähnlich,
Also wenig Oberwellen und quasi nur eine einzelne Frequenz
> ca. 10000 Schwingungen, Oversampling ist ca. 100)
> Grundwelle (kann +-10% abweichen)
also ca 10^7 Abtastwerte?
> möglichst genau (möglichst auch genauer als es die Samplerate vorgibt)
Wie genau soll denn das werden?
Ich würde hier erst einmal die Nulldurchgänge zählen und dann den Zeitpunkt
des ersten Nulldurchgang vom Zeitpunkt des letzten Nulldurchgangs abziehen
und dann durch die Zahl der Nulldurchgänge teilen. das Ganze dann noch um
den Faktor 2 korrigieren, weil es ja 2 Nulldurchgänge / Periode gibt. Wenns
noch genauer sein muss, empfiehlt sich ein Bandpass um den fraglichen
Bereich. herum. Da nur eine Frequenz am laufen ist, müsste die Ordnung des
Filters wohl auch gar nicht so groß sein. Den Filter würd ich ja analog vor
den Eingang setzen, aber Digital sollte das auch kein Hexenwerk geben.
Marte
Man kann das Signal auf I/Q mischen, danach per Filter bereinigen
und sodann einem CORDIC Algorithmus vorsetzen. Damit hast Du
die Phase pro Messpunkt und die Frequenz aus der zeitlichen
Ableitung dieser. Der Mittelwert oder ein Wunschfilter sollte
es genau machen.
Wichtig bei einem Frequenzgemisch: Bitte das Zeitgesetz
der Nachrichtentechnik beachten ...
Gruß Oliver
P.s.: Bei der FFT kann man auch mit Null-Samples auffüllen.
--
Oliver Bartels + Erding, Germany + obar...@bartels.de
http://www.bartels.de + Phone: +49-8122-9729-0 Fax: -10
Ein solches Filter ist ideal. Leider bekommt man die nicht außer in den
Standardwerten gezimmert. Da muß man schon anders heißen und mit
Großauftrag oder viel Kohle winken.
Sie sind auch frequenzmäßig beschränkt!
- Henry
Es gibt etwas ähnliches von Jim Thompson in einem FSK-Demodulator für
Telefonleitungen. Er behauptet, seine Schaltung würde vor allem in der
Unterdrückung der Oberwellen (Verursacht durch die alten Kohlemikrofone
und Übertrager) vorteilhaft sein.
http://www.analog-innovations.com/SED/Pat-4472816.pdf
Meine Fragen hat er damals leider nicht beantwortet. In LTspice
funktioniert seine Schaltung gut.
Ist ein Gyrator mit obiger Schaltung.
- Henry
Und was steht nun drin? IEEE können die meisten nicht lesen.
- Henry
Wieviele Stapel hast du eigentlich?
> Die Version mit dem festen Code im IC wurde glaube ich sogar
> hierzulande in Wehrtechnik verwendet.
> Im niederfrequenteren Bereich als CCD-Filter für z.B. Sonar
> hätte man gern ähnliches gehabt. In Europa hat damals
> Wolfson Microelectronics für das englische Verteidigungsministerium
> ICs dahingehend gewerkelt.
>
>> aber damit konnte man angeblich zwei Signale in Echtzeit
>> miteinander falten.
> Von der "programmierbaren" SAW-Version war dann aber nichtmehr viel
> zu hören.
> Nach dem schmählichen Verrat der Russen&Ossis die nichtmehr
> den kalten Krieg weiterkämpfen wollten ist schlicht die Regierungs-
> Knete überall gestrichen worden und ohne die rührt die Industrie
> keinen Finger wenn der Einsatz für Consumeranwendungen nicht
> unmittelbar ersichtlich ist.
Gibt es noch, z.B. für Chirp-Signale:
http://www.nanotron.com/EN/PR_nanoNET_Transceiver.php
- Henry
Unfertig aber gibt zumindest Überblick über Varianten:
http://www.embeddedforth.de/temp/fsk.pdf
Der 1 Bit (Relais-)Korrelator stammt aus den frühen 50ern.
Entsprechende FSK-Demods vgl die Literaturstelle von Bell System 1965.
MfG JRD
MfG JRD
Beispielsweise.
- Henry
> Es gibt abgespeckte Variante um die Multiplikation zu umgehen:
>
> Das Signal das durch die Verzögerung läuft wird
> per Komparator auf 1 Bit quantisiert( notfalls mit Dither
> verschönern ), also nur noch +1 oder -1.
> Der Multiplizierer ist dann Umschalter zwischen
> Originalsignal und invertiertem Signal, also aufwandsarm.
Ja, XOR (XNOR wg. +-1) ist auch eine Multiplikation, ja sogar
"die Mutter aller Multiplikationen" :) also kein 'umgehen von
Multiplikation'.
Der ganze Krom setzt übrigens strenge Stationarität voraus, wird
auch immer gerne übersehen von den Herren Praktikern.
Ergebnis ist natürlich stark verzerrte Variante der ACF, die meisten
Leute stört das aber nicht. Lässt sich ansonsten leicht rückrechnen,
siehe Grundlagenbuch Statistik. Zu praktischen Auswirkungen dann
'van Vleck-Relation'. Ergebnis: Soll angeblich 'robust' gegenüber
Verteilungsannahmen sein, Stationarität vorausgesetzt, drum u.a.
auch sehr beliebt in parameterfreier Teststatistik u.s.w. ;)
Aber alles in allem wirklich ur-ur-ur-uralte Hüte! (Im vorletzten
Jahrhundert entwickelt worden, die AKF oder neumodisch ACF.
Tönnies? Kendall?)
> Legt man aber Wert auf minimalen Aufwand,
Keep it simple.
Es ist nichtnur eine Frage der Hardwarekosten: alles was zu
Kompexität führt fördert Bugs.
MfG JRD
Michael hatte ja schon gesagt, dass man die transformierte Fenster-
funktion an den Peak fitten müsste.
Eine simple Funktion, die man ausprobieren könnte:
Afmax_m1,Afmax,Afmax_p1 = Amplituden bei den Frequenzen fmax-1,fmax,
fmax+1
dl := Afmax - Afmax_m1;
dr := Afmax - Afmax_p1;
if dl>dr then begin
g := dr / dl * 0.5 + 0.5;
f := fmax*g + fmax_p1*(1-g);
else if dr>0 then begin
g := dl / dr * 0.5 + 0.5;
f := fmax*g + fmax_m1*(1-g);
end else;//Peak zu breit
Man könnte das Ganze auch mal mit berechneten Samples simulieren und
dann verschiedene Fenster und Funktionen ausprobieren. Wenn das
Signal verrauscht ist, sind mehr Samples für eine Schwerpunkterkennung
natürlich besser.
Jens
Michael Eggert schrub:
>>> Dann kannst du die beiden Phasen-Informationen verwenden, um
>>> die Frequenz genauer zu berechnen. Denn der Zeitabstand
>>> zwischen den beiden Fenstern ist ja genau bekannt.
>
>>Dabei könnte es aber passieren, dass man sich mit der Anzahl
>>der Perioden, die zwischen den beiden Bereichen liegen,
>>verschätzt.
>
> Dagegen hilft Zählen der Nulldurchgänge, die schnellste
> Methode, ein ungefähres Ergebnis als Startwert für
> kompliziertere Verfahren zu erhalten. Für die Anzahl der
> Perioden zwischen zwei Zeitpunkten ist es exakt exakt genug.
> :-)
Und wenn eine kleine Oberwelle doch mal einen Nulldurchgang mehr
erzeugt? Oder viele mehr?
Abgesehen davon war ja eh schon gesagt worden, dass das mit den
Nulldurchgängen gar nicht so einfach ist, wegen wechselndem
DC-Anteil.
CU Rollo
Moin!
>> Zählen der Nulldurchgänge
>Und wenn eine kleine Oberwelle doch mal einen Nulldurchgang mehr
>erzeugt? Oder viele mehr?
Ein kleine Oberwelle ist kein Problem, ein adaptiver Schmitt-Trigger
sollte ja leicht zu implementieren sein.
Gruß,
Michael.
Moin!
>Danke für den Tipp. So einen schönen Sinus wie im dem bei Dir
>beschrieben optischen Fall habe ich vermutlich aber nicht. Aber das hat
>mich auf eine Idee gebracht. Fit auf ein Rechtecksignal. Das würde
>sogar völlig ohne Multiplikationen auskommen.
Vorausgesetzt, die Frequenz ist über den Abtastzeitraum konstant
genug...
Gruß,
Michael.
Rolf_Bombach <rolfnosp...@bluewin.ch> wrote:
> Oliver Bartels schrieb:
>> P.s.: Bei der FFT kann man auch mit Null-Samples auffüllen.
> IIRC aber nur eine Portion, d.h. eine Zweierpotenz mehr.
> Alles drüber ist dann pseudo und kann auch per Interpolation
> erhalten werden. (Ohne Garantie, ist schon Jahre her...)
Ich überlege gerade ob das stimmt oder nicht. Denn prinzipiell
ist in einer DFT die ich nicht mit Nullsamples aufgefüllt habe
auch alles an Information drinn. Ich bekomme mit Nullsamples am
Ende ja eine feinere Frequenzauflösung weil das Signal von der
DFT nicht mehr als so ganz periodisch (bzw. mit entsprechend
längeren Periode) angesehen wird.
Würde man mit unendlich vielen Nullsamples auffüllen kommt man
ja zu der Zeitdiskrete Fouriertransformation.
Wenn das mit der Interpolation stimmt müsste man ja über eine DFT
mit Interpolation zu einer Zeitdiskrete Fouriertransformation
kommen.
Viele Grüße,
Martin L.
Martin Laabs schrub:
>>> P.s.: Bei der FFT kann man auch mit Null-Samples auffüllen.
>
>> IIRC aber nur eine Portion, d.h. eine Zweierpotenz mehr.
>> Alles drüber ist dann pseudo und kann auch per Interpolation
>> erhalten werden. (Ohne Garantie, ist schon Jahre her...)
>
> Ich überlege gerade ob das stimmt oder nicht. Denn prinzipiell
> ist in einer DFT die ich nicht mit Nullsamples aufgefüllt habe
> auch alles an Information drinn. Ich bekomme mit Nullsamples am
> Ende ja eine feinere Frequenzauflösung weil das Signal von der
> DFT nicht mehr als so ganz periodisch (bzw. mit entsprechend
> längeren Periode) angesehen wird.
> Würde man mit unendlich vielen Nullsamples auffüllen kommt man
> ja zu der Zeitdiskrete Fouriertransformation.
> Wenn das mit der Interpolation stimmt müsste man ja über eine
> DFT mit Interpolation zu einer Zeitdiskrete
> Fouriertransformation kommen.
Angenommen ich habe ein Signal, welche für alle sagen wir 100
Samples konstant =1 ist. Eine Touriertrafo davon sieht eindeutig
aus: Nur Gleichanteil, alle Frequenzen gleich Null. Nun fülle
ich die 100 Samples bis zum Sample 128 mit 0 auf. FFT geht ja
davon aus, dass das Signal sich zyklisch schließt. Ich bekomme
also die Fouriertransformierte eines Rechtecksignals, dass
100*1, dann 28*0 ist. Das hat satt Frequenzanteile in dem
Frequenzbereich, der auch bei der Analyse der 100 Werte
vorkommen würde.
Nein, das ist nicht das selbe.
Aber ich sähe kein Problem darin, in die 100 Samples 128
Stützstellen reinzuinterpolieren und mit denen dann
weiterzurechnen. Also die 100 Werte also Polylinie ansehen und
zwischen den Samples linear interpolieren. Der Fehler der
dadurch entsteht, sollte im Bereich der grenze liegen, die
sowieso nicht mehr genau erfasst werden kann.
Natürlich kann man wohl auch noch besser interpolieren.
CU Rollo
>Michael Eggert schrieb:
>> Das kann man aber auch besser machen:
>> - Schöne Fensterfunktion übers Signal legen
>> - FFT
>> - Transformierte Fensterfunktion dranfitten
>Klingt für mich alles so nach mp3.
Damit hab ich mich noch nicht beschäftigt, aber obiges hab ich grad
mal ausprobiert:
- 1s in 16384 Abtastschritte zerlegt
Das gibt später eine Auflösung der FFT von 1 Hz!
- Sinus mit 123,456 Hz angelegt
- Gauss mit FWHM = 0,333s drübergelegt
Das gibt im Frequenzbereich einen Peak mit FWHM = 3 Hz!
- FFT
- Peak +-8 Werte ausgeschnitten:
116Hz 6,19365E-5
117Hz 6,52461E-5
118Hz 6,46904E-5
119Hz 2,04981E-4
120Hz 0,00309
121Hz 0,0327
122Hz 0,15339
123Hz 0,3268
124Hz 0,31566
125Hz 0,13814
126Hz 0,02751
127Hz 0,00239
128Hz 1,82678E-4
129Hz 7,58646E-5
130Hz 7,2227E-5
121Hz 6,64908E-5
- Gauss in nur diese Werte reingefittet: 123,45601 Hz.
Da sieht man, wieviel mehr Information über die Frequenz in den Werten
um den Peak herum noch drinsteckt. Man braucht eben nur die passende
Fensterfunktion mit schön kontinuierlicher FT...
Gruß,
Michael.
Roland Damm <rolan...@arcor.de> wrote:
> Angenommen ich habe ein Signal, welche für alle sagen wir 100
> Samples konstant =1 ist. Eine Touriertrafo davon sieht eindeutig
> aus: Nur Gleichanteil, alle Frequenzen gleich Null. Nun fülle
> ich die 100 Samples bis zum Sample 128 mit 0 auf. FFT geht ja
> davon aus, dass das Signal sich zyklisch schließt.
Es kommt auf die Art der Fouriertransformation aus. Bei der DTF
hat man tatsächlich nur einen Gleichanteil weil das Signal ja
periodisch fortgesetzt wird.
Wenn ich eine Zeitdiskrete Fouriertransformation auf dieses Signal
ansetze brauche ich noch ein paar mehr Informationen zu dem Signal.
Entweder ist es tatsächlich ein periodisches Signal - dann stimmt
das Ergebnis mit der DFT überein - oder es ist eben ein Rechteck-
impuls und nicht periodisch fortgesetzt. Dann werde ich das Spektrum
welches ich durch die Zeitdiskrete Fouriertransformation erhalte durch
eine DFT die ich an den Rändern mit Nullsamples auffülle aproximieren.
Ich ging bei meinem letzen Posting vom letzen Fall aus weil das Signal
vom OP zwar ein bisschen periodisch ist - es aber keine wirklich
100%ig Periodizität gibt. Denn sonst müsste er sich den Aufwand nicht
machen und hätte auch nicht das Problem mit den "krummen" Frequenzen
der DFT - die gäbe es dann ja per Definition gar nicht.
Viele Grüße,
Martin L.
> Hallo,
>
> Roland Damm <rolan...@arcor.de> wrote:
>
>> Angenommen ich habe ein Signal, welche für alle sagen wir 100
>> Samples konstant =1 ist. Eine Touriertrafo davon sieht eindeutig
>> aus: Nur Gleichanteil, alle Frequenzen gleich Null. Nun fülle
>> ich die 100 Samples bis zum Sample 128 mit 0 auf. FFT geht ja
>> davon aus, dass das Signal sich zyklisch schließt.
>
> Es kommt auf die Art der Fouriertransformation aus. Bei der DTF
> hat man tatsächlich nur einen Gleichanteil weil das Signal ja
> periodisch fortgesetzt wird.
>
> Wenn ich eine Zeitdiskrete Fouriertransformation auf dieses Signal
> ansetze brauche ich noch ein paar mehr Informationen zu dem Signal.
> Entweder ist es tatsächlich ein periodisches Signal - dann stimmt
> das Ergebnis mit der DFT überein - oder es ist eben ein Rechteck-
> impuls und nicht periodisch fortgesetzt. Dann werde ich das Spektrum
> welches ich durch die Zeitdiskrete Fouriertransformation erhalte durch
> eine DFT die ich an den Rändern mit Nullsamples auffülle aproximieren.
Ihr habt gewissermaßen beide recht:
Wenn man z.B. ein Signal, das aus 128 zusammenhängenden Einsen besteht
einer 128 Punkte-DFT unterzieht, erhält man eine Transformierte, die
aus einer Eins (oder was auch immer, hängt vom Normierungsfaktor ab)
und 127 Nullen besteht. Wenn man die anschauliche Betrachtung
verwendet, daß durch periodische Fortsetzung ein reines Gleichsignal
entsteht, dann ist das ja auch durchaus logisch. Das Ergebnis der DFT
widerspricht aber _nicht_ dem Ansatz mit der Fouriertransformierten!
Verzichtet man auf die DFT und nimmt die "normale" FT des Signals aus
128 Einsen mit jeweils unendlich vielen Nullen links und rechts davon,
so gelangt man zu einem (kontinuierlichen) Spektrum, das eine
Dirichlet-Funktion darstellt (die anschaulich daraus entsteht, daß das
Spektrum eines zeitkontinuierlichen Rechtecks, die si-Funktion, durch
unendlich viele Images bei ganzzahligen Vielfachen der Abtastfrequenz
erweitert). _Das_ ist das korrekte Spektrum, mit Nulldurchgängen an
Vielfachen von f_Abtast/(Länge Rechteck in Samples). Doch wie kommt man
jetzt zu dieser schönen DFT mit der einzelnen Linie im ersten Beispiel?
Ist eigentlich ganz einfach: Unser (abgetastetes) Rechtecksignal wird
nach 128 Samples abgeschnitten und wiederholt. Das müssen nicht
unbedingt die 128-Einsersamples sein, aber vorerst gehen wir mal davon
aus. Wir stellen uns die Frage: Was passiert mit dem
(zeitkontinuierlichen) Spektrum bei dieser Operation? Abschneiden nach
N_DFT=128 Samples und periodische Fortsetzung entspricht einer
Abtastung des Spektrums in einem Raster von f_Abtast/N_DFT. Ok, tasten
wir also unser Spektrum ab. Wir sagten oben ja, das Spektrum hat
Nulldurchgänge im Abstand f_Abtast/(Länge Rechteck in Samples). Hmm,
wenn N_DFT=(Länge Rechteck in Samples), dann könnte es ja passieren,
daß wir genau in den Nulldurchgängen abtasten... Und genau das
passiert, wenn wir in unserem Fenster exakt die 128 Einsen erwischen.
Erwischen wir sie nicht ganz, liegen wir mit der Abtastung des
Spektrums ein klein wenig daben und stellen eine vollkommen andere DFT
fest.
Setzen wir N_DFT=i*(Länge Rechteck in Samples), machen also Zeropadding,
dann liegt nur jeder i-te Abtastwert in den Nulldurchgängen, und unser
(diskretes) Spektrum zeigt deutliche Symptome des Leckeffektes...
Lassen wir i gegen unendlich gehen, gelangen wir (wie von Martin
erwähnt) zur Fouriertransformation des zeitdiskreten Signals.
Digitale Signalverarbeitung ist soetwas schönes... Leider wissen das nur
die wenigsten meiner Studenten zu schätzen. :-)
Gruß
Henning
--
henning paul home: http://home.arcor.de/henning.paul
PM: henni...@gmx.de , ICQ: 111044613
Roland Damm schrieb:
hier steckt IMHO ein Fehler, wenn Du keine Fensterfunktion benutzt über
den _ursprünglichen_ Zeitbereich, so bekommst Du den Leakage-Effekt,
auch bei DC. Außerdem mußt Du DC immer gesondert behandeln, der Wert muß
_immer_ nachträglich korrigiert werden.
Du füllst also nur den Teil mit 0 auf, der sowieso weggefenstert wird,
damit hast Du eine Interpolation im Frequenzbereich. Ob dadurch das
Quantisierungsrauschen ansteigt, bin ich jetzt nicht sicher, das könnte
sich mit der höheren Auflösung auch wieder aufheben. Bei FFT ohne
Fensterung zu arbeiten ist sowieso nicht sinnvoll, ich habe gerne das
Kaiser-Bessel-Fenster genommen, das läßt sich anpassen an den jeweiligen
Bedarf, ist nur etwas aufwendig zu berechnen, könnte man sich aber auch
als Tabelle abspeichern. So habe ich das schon gemacht und keine
Probleme gesehen.
> Aber ich sähe kein Problem darin, in die 100 Samples 128
> Stützstellen reinzuinterpolieren und mit denen dann
> weiterzurechnen. Also die 100 Werte also Polylinie ansehen und
> zwischen den Samples linear interpolieren. Der Fehler der
> dadurch entsteht, sollte im Bereich der grenze liegen, die
> sowieso nicht mehr genau erfasst werden kann.
> Natürlich kann man wohl auch noch besser interpolieren.
>
Du kannst zwar auch zum Interpolieren 0en zwischen die Samples einfügen,
aber das ist nicht dasselbe und Du bekommst die Grenze zum nächsten 2**n
nicht sauber aufgefüllt. So wäre ich jetzt eher bei einem
Interpolationsfilter beim Erhöhen der Abtastrate vorgegangen.
mfg. Winfried
Was mir noch zum Topic eingefallen ist, die Datei würde ich nach der
Methode erstmal durch eine FFT jagen und nachsehen, wie das Spektrum an
der interessanten Stelle überhaupt aussieht, das sollte ja kein Problem
sein. Als Fensterfunktion würde ich der Einfachheit halber und bei der
hohen Auflösung Hanning vorschlagen, das müßte reichen.
Wenn die Funktion frequenzmoduliert ist, so wird sich keine eindeutige
Linie ausmachen lassen, sondern eher ein rauschartiges Gemisch
(Besselspektrum), das würde ich einfach mal nachsehen. Dazu würde mir
einfallen, die Peaks um diesen Bereich herum abzutasten (wieder mit
Hysterese) und mit Curvefitting eine Ausgleichskurve durchzuziehen. Ob
das besser ist als der Vorschlag mit der Nulldurchgangsmessung, kann ich
nicht sagen, einfach mal ausprobieren.
mfg. Winfried
> - Gauss in nur diese Werte reingefittet: 123,45601 Hz.
Gauss? (Meinst du die Gaussche Glockenkurve? Das ist doch eigentlich
Statistik...)
M.
Moin!
> Michael Eggert <m.egge...@web.de>:
>> - Gauss in nur diese Werte reingefittet: 123,45601 Hz.
> Gauss? (Meinst du die Gaussche Glockenkurve?
Ja.
> Das ist doch eigentlich Statistik...)
Vor allem ist es die Eigenfunktion der Fouriertransformation, das heißt
ihre Form bleibt in der FT erhalten.
FT( Gauss mit Breite W_T ) = Gauss mit Breite W_f
mit W_f = 2 / (pi * W_T)
Das prädestiniert sie für solche Spielchen.
Theoretisch funktioniert natürlich auch jede andere Fensterfunktion,
deren FT stetig ist und möglichst nur ein (lokales) Maximum besitzt.
Lässt man die Fensterfunktion weg, also Fenster = Rechteck, so führt
dieser Rechteck in der FT zu einem Lattenzaun mit Peak-Abstand
1/Messdauer, aber da das gleichzeitig die Auflösung der FFT ist, sieht
man keinen Lattenzaun, sondern nur Ausläufer am Fuße des Maximums. Ein
Fit dürfte da schwerfallen...
Gruß,
Michael.
Henning Paul schrub:
> Digitale Signalverarbeitung ist soetwas schönes... Leider
> wissen das nur die wenigsten meiner Studenten zu schätzen. :-)
Wenn du denen das genauso erklärst wie hier, dann kann ich sie
(die meisten) verstehen:-).
Also was muss man nun tun, wenn man nur 100 Samples hat und damit
eine FFT machen will, die jedoch 128 Samples braucht?
CU Rollo
> Moin,
>
> Henning Paul schrub:
>
>> Digitale Signalverarbeitung ist soetwas schönes... Leider
>> wissen das nur die wenigsten meiner Studenten zu schätzen. :-)
>
> Wenn du denen das genauso erklärst wie hier, dann kann ich sie
> (die meisten) verstehen:-).
Nun, an einer Uni wird eben mehr Wert auf die Vermittlung von "Warum
funktioniert das hier eigentlich?" als auf "In der Praxis macht man das
so und gut ist." gelegt.
>
> Also was muss man nun tun, wenn man nur 100 Samples hat und damit
> eine FFT machen will, die jedoch 128 Samples braucht?
Fenstern (Hamming, Blackman o.ä.) und padden. Damit tauscht man den si
gegen etwas ein, was an den Rändern gutmütiger ist, soll heißen,
die "falschen" Spektrallinien z.B. bei der Transformation eines reinen
Gleichsignals sind deutlich kleiner.
Such mal nach "Leck-Effekt" oder engl. "leakage".
Gruß
Henning
Matthias