Hallo,
angenommen, ich habe alle 10µs einen Eingangswert von 0..10 und möchte
die Auflösung durch Oversampling auf 0.. 1000000 (1M) erhöhen.
Dann würde ich im ersten Schritt ein Filter mit 100k *1µs, also 1s
dahinter schalten.
Nachteil, das Filter ist sehr langsam.
Folgender Gedanke: Jetzt habe ich für mehrere Sekunden einen
Eingangswert von 2 gehabt, und als Folge einen gefilterten Ausgangswert
von 200000.
Nun springt der Eingangswert von 2 auf 5. Dann könnte ich das Filter
doch schnell nachziehen, damit es grob mal Richtung 500000 läuft.
Gibt es so ein Filter?
Meine Anwendung ist die schnelle Messung einer Frequenz, die nicht
rauscht, die aber Sprünge machen kann, und die ich nur grob erfassen
kann. Frequenz liegt zum Beispiel bei 100kHz .. 900kHz, und wenn ich mit
1MHz Basis die Periodenzeit messe, dann hätte ich Werte wie im Beispiel.
Ich brauche also beides: sowohl eine hohe Auflösung für stabile
Frequenzen, als auch ein schnelles (dann aber gröberes) Reagieren bei
größeren Änderunge.
Äh, moment, du möchtest durch Oversampling 5 Größenordnungen Auflösung
gewinnen? Ich glaube das wird eher nichts. Zumindest brauchst du 10^10
Messwerte pro Samplepunkt dafür, und dann geht es auch nur wenn
statistisch alles stimmt.
J.Newsom schrieb:> Meine Anwendung ist die schnelle Messung einer Frequenz,> die nicht rauscht, die aber Sprünge machen kann, und die> ich nur grob erfassen kann. Frequenz liegt zum Beispiel> bei 100kHz .. 900kHz, und wenn ich mit 1MHz Basis die> Periodenzeit messe, dann hätte ich Werte wie im Beispiel.
Nun ja... man kann sich natürlich die Arbeit beliebig
schwer machen, aber man ist ja nicht dazu verfplichtet.
Ich würde versuchen, irgend eine interpolierende Methode zu
verwenden. Falls die "Frequenz" ein Sinussignal ist: Mit mehr
als 2fmax abtasten und FFT.
Falls die "Frequenz" ein Rechteck ist: Hochwertigen Sinus
mit f < 1/2 * f_min erzeugen (DDS), von Eingangssignal
getriggert abtasten, FFT, passend umrechnen.
Man kann sich sicher auch Freistil-Methoden ausdenken, z.B.
auf der Basis von Polynomen.
Moin,
Wasch' mir den Pelz, aber mach' mich nicht nass...
Wird schwierig. Du brauchst ja einen Tiefpass, der eine Sperrdaempfung
erreicht, die so hoch ist, dass du auf deine gewuenschte Genauigkeit
kommst. Andererseits sollte der dann eine moeglichst kleine
Gruppenlaufzeit haben, damit du schnell an dein Ergebnis kommst.
Wahrscheinlich wirst du mit einem Cauertiefpass als IIR sowas noch am
ehesten erreichen. Kriegst halt dann die Riesenbeule in der
Gruppenlaufzeit kurz vorm Sperrberich - das darf dich halt nicht
stoeren...
Gruss
WK
Wieviel könnte man denn idealerweise durch oversampling gewinnen?
Sicher nicht den linearen Faktor der Überabtastung, oder?
Also bei seinen 100kHz (10us) z.B. 10MHz abtasten und Faktor 100
gewinnen?
Eher Faktor Wurzel(100) oder?
Und woher kommt die gewonnene Auflösung? Durch das Rauschen, das den
AD-Wert glättet, ist es hier wohl nicht. Wenn das Rauschen weg soll,
muss man mitteln und Sprünge mit diskreter Betrachtung umsetzen, meine
ich.
Wurzel der Sample-Zahl im Fall normalverteilten Rauschens, ja.
Und doch, es ist das Rauschen, was dir diesen Auflösungsgewinn
ermöglicht -- es gibt sogar ein Wort dafür, "Dithering". Im Extremfall
kann es hilfreich sein, Rauschen künstlich hinzuzufügen.
Das hängt aber davon ab, welche Amplitude das Rauschen im Verhältnis zu
dem Signal hat. Je geringer diese Dynamik, desto mehr bringt
zusätzliches Rauschen und Dithering, wobei man da unterscheiden muss,
was davon im Zeit- und was im Frequenzbereich stattfindet.
Zudem tut der Wandler da schon sein Möglichstes, um LSBs zu gewinnen.
Wenn also der Messwert rauscht, funktioniert nur eine Filterung und die
wiederum braucht nicht unbedingt oversampling.
Die intelligenten Sprünge, die in solchen Fällen erwartet werden, lassen
sich nur durch ein diskretes Filter managen, das seine Charakteristik
anpasst, z.B. auch durch ein AKF.
Du kannst Folgendes versuchen (wir nehmen ein offset-behaftet Signal
an):
0. Lass als Zeitreferenz einen Timer mit hoher Taktung laufen.
1. Wenn Du bis zu 900kHz über AD-Konversion sicher erkennen willst,
solltest Du schon mit deutlich mehr als 1,8MHz sampeln - eher 3-9MHz.
2. Berechne das TP-gefilterterte Signal mit fg=10kHz (wenn 100kHz Deine
niedrigste Frequenz ist
3. Subtrahiere den TP-Ausgang vom Rohsignal.
4. Nach jeder Subtraktion kontrolliere, ob Du den positiven/negativen
Nulldurchgang durchschritten hast und lies den Timer (siehe Pkt 0) aus.
Subtrahiere den aktuellen Timer-Wert vom letzten Wert und Du hast Deine
Periodendauer.
Bzgl. Deiner Frage mit dem Sprung von 2 auf 5: Ist das ein Offset oder
die Signalamplitude? Wenn es ein Offset ist und dein Signal deutlich
kleiner als dieser Sprung, kannst Du ja den LPF resetten, ansonsten aber
geht das nicht - das könnte man nur retrospektiv bewerten.
Hast Du den Verschlag simuliert oder ist das Theorie? Wer auf diese
Weise Nulldurchgänge bestimmt, dürfte ziemlich chaotische Werte
bekommen, da in dem TP-Signal allesmögliche an Dreck drin steckt, dass
den Offset verschiebt. Das ist höchstens eine PI x Daumen Information
für die Nulllinie.
Sven B. schrieb:> Äh, moment, du möchtest durch Oversampling 5 Größenordnungen Auflösung> gewinnen? Ich glaube das wird eher nichts.
Oooch, wenn man sowas simuliert, wird das sicherlich funktionieren.
Aber da Auflösung ungleich Genauigkeit ist, macht das praktisch
keinen Sinn.
Harald W. schrieb:> Sven B. schrieb:>>> Äh, moment, du möchtest durch Oversampling 5 Größenordnungen Auflösung>> gewinnen? Ich glaube das wird eher nichts.>> Oooch, wenn man sowas simuliert, wird das sicherlich funktionieren.> Aber da Auflösung ungleich Genauigkeit ist, macht das praktisch> keinen Sinn.
Ne, das funktioniert auch in der Simulation nicht. Dazu brauchst du
10^10 mal so viele Samples, also 10 Milliarden Samples pro Messpunkt der
rausfallen soll.
Sven B. schrieb:> Ne, das funktioniert auch in der Simulation nicht. Dazu brauchst du> 10^10 mal so viele Samples, also 10 Milliarden Samples pro Messpunkt der> rausfallen soll.
Gibts da in der Simu zu wenig Stellen hinter dem Komma
bei der Berechnung?
Harald W. schrieb:> Sven B. schrieb:>>> Ne, das funktioniert auch in der Simulation nicht. Dazu brauchst du>> 10^10 mal so viele Samples, also 10 Milliarden Samples pro Messpunkt der>> rausfallen soll.>> Gibts da in der Simu zu wenig Stellen hinter dem Komma> bei der Berechnung?
Seufz. Nein. Aber schon das Ergebnis, was in der Simulation rauskommt,
ist realitätsfern, sprich, wenn man sich überlegt was das Ergebnis
bedeutet, bemerkt man dass man das so nicht umsetzen kann. Das ist ja
ein Unterschied zu einer unrealistisch angelegten Simulation, bei der
herauskommt, dass etwas eigentlich funktionieren könnte.
Irgendwie habe ich in diesem Forum oft das Gefühl, man wird absichtlich
missverstanden, nur damit sich jemand als schlau darstellen kann.
Sven B. schrieb:> Irgendwie habe ich in diesem Forum oft das Gefühl, man wird absichtlich> missverstanden, nur damit sich jemand als schlau darstellen kann.
+1
Dergute W. schrieb:> Du brauchst ja einen Tiefpass, der eine Sperrdaempfung> erreicht, die so hoch ist, dass du auf deine gewuenschte Genauigkeit> kommst. Andererseits sollte der dann eine moeglichst kleine> Gruppenlaufzeit haben, damit du schnell an dein Ergebnis kommst.
Wie würde man den bauen?
Moin,
Signalverarbeiter schrieb:> Wie würde man den bauen?
Naja, wohl nicht wirklich. Aber spasshalber z.B. als Cauer in
Octave/Matlab vielleicht so:
x=irgendeine dir genehme Filterordnung
[b,a]=ellip(x, 8.6e-6, 120,1e-6);
Gruss
WK