Forum: Analoge Elektronik und Schaltungstechnik abgetastetes bandbegrenztes Sinussignal interpolieren?


von Alberto S. (Firma: Student) (alberto)


Lesenswert?

Hi, ich hab zunächst eine allgmeine Frage. Ich möchte den Effektivwert 
eines Sinussignals bestimmen. Das soll numerisch auf dem uC erfolgen.

Da ich nicht beliebig hoch abtasten kann, hab ich ja zwischen den 
Abstatsstellen keine Messwerte, welches Verfahren nutzt man da in der 
Praxis auf dem uC, um das aufgenomme Signal zu interpolieren?

Mir erscheint die Lineare Interprätation nach Newton am einfachsten und 
weniger rechenlastig als die anderen Verfahren wie z.B. die Spline 
Interpolation.

Beispiel ich hab ein 10kHz Sinussignal.
Vor dem A/D Wandler habe ich einen Tiefpass 5.ter Ordnung, bei 68kHz 
habe ich ca. 65dB Dämpfung, das wären 10Bit Auflösung
Die Grenzfrequenz liegt bei 15kHz.

Mit welcher Abtastfrequenz taste ich ab und welches Verfahren sollte ich 
zum interpolieren nutzen?

Ich wurde mit 40kHz abtasten.

von Bernie (Gast)


Lesenswert?

Lineare Interprätation nach Newton? Ob die hilft, kann
ich nicht beantworten - kenne ich nicht. Auch eine
lineare Interpretation ist mir nicht geläufig.

Wenn du die lineare Interpolation nach Newton meinst,
weiß ich aber nicht, was die bringen soll.

Ein Signal "schön"-rechnen ist Quatsch.
Ein Signal durch einen digitalen Tiefpass zu jagen nützt
auch nur was, wenn man es vorher mit der doppelten
Frequenz der höchstmöglichen Störfrequenz "gesamplet"
hat.

Für die Ermittlung des Effektivwerts, genügt es doch,
die Summe der Quadrate aller ADC-Werte zu bestimmen
und daraus die Wurzel zu ziehen. Bei AC solltest du vorm
Quadrieren natürlich den Offset (ADC-Wert beim Null-
durchgang = Mittelwert einer hinreichend langen Messreihe)
abziehen.

Du doch schon ganz richtig erkannt, dass eine mangelhafte
Filterung von Signalanteilen oberhalb der halben
Samplefrequenz zu Fehlern führt.

Diesen Fehler muss man anhand der (worst-case)
Eigenschaften des Messsignals und der Filterkurve vorher
abschätzen.

von Ulrich (Gast)


Lesenswert?

Für die RMS-Bestimmung ist die Rechnung ganz ohne Interpolation schon 
ausreichend. Bis auf die Frequenzen die mit der Abtastrate korreliert 
sind, macht es auch gar nichts wenn da Frequenzen oberhalb der halben 
Abtastrate dabei sind: Man kann das ganze auch als Subsampling ansehen 
und kommt trotzdem auf eine gute Schätzung des RMS wertes. Begrenzt wird 
die Bandbreite mehr durch die S&H Stufe des A/D Wandler. Das einzige 
ist, das die hohen Frequenzen nicht mehr deterministisch immer richtig 
abgetastet werden, sondern hat nur im Mittel über viel Abtastpunkte. Um 
diskrete Störungen zu reduzieren könnte man ggf. noch in ungleichmäßigem 
Abstand abtasten.

In dem Beispiel wird die Bandbreite durch den Analogen Filter 
vorgegeben, egal wie langsam man abtastet. Es ginge theoretisch sogar 
auch mit nur 100 Hz abzutasten, sofern die S&H Stufe mitspielt - man 
braucht nur länger um die gleiche Zahl an Samples zu erreichen und 
Vielfache von 100 Hz können zusätzliche Störungen verursachen. Von daher 
wählt man in der Praxis schon eine eher hohe Abtastfrequenz und hält die 
Rechnung kurz.

von Helmut S. (helmuts)


Lesenswert?

Wenn du "nur" mit 40kHz abtasten willst, dann musst du dein Filter bei 
20kHz (f/2) anschauen. Da stellst du dann fest, dass du kaum eine 
Filterwirkung hast. Du musst dann hoffen, dass dein Signal keine 
Signalanteile mit Frequenzen>=20kHz hat. Wenn nicht, dann musst du 
besser filtern und mit höherer Abtastrate fahren.

Den Effektivwert des Signals misst du mittels Summe der quadrierten 
Werte wie mein Vorredner schon schrieb. Eventuell verbessert eine 
zusätzliche Fensterfunktion die Konstanz der Messung.

von Bernie (Gast)


Lesenswert?

Subsampling klingt ja wie eine bewährte Technik!

Ist es auch, wenn man damit (Chroma-Signale) behandelt,
wo die Nebeneffekte niemanden auffallen.

Das ist hier aber nun gerade NICHT der Fall.

von Alberto S. (Firma: Student) (alberto)


Lesenswert?

Hm, was ich nicht verstehe, wieso sind ein paar Punkte ausreichend für 
die RMS-Berechnung?

Der RMS Messfehler wird doch größer je kleiner die Anzahl der 
Abtastpunkte oder nicht.

Der RMS berechnet sich ja nach
x_RMS = sqrt( 1/N*SUM(x^2) ), für den AC-Wert

je weniger Messpunkte ich aufzeichne desto mehr weicht doch der 
berechnete RMS von dem "wahren" RMS ab?

Ok, dann muss die halbe Abtastfrequenz (fa/2) bei 68kHz liegen.

von Helmut S. (helmuts)


Lesenswert?

> Hm, was ich nicht verstehe, wieso sind ein paar Punkte ausreichend für
die RMS-Berechnung?

Dann rechne jetzt halt mal ein Beispiel, wenn du es nicht glaubst.

von Michael (Gast)


Lesenswert?

Alberto S. schrieb:
> Hm, was ich nicht verstehe, wieso sind ein paar Punkte ausreichend für
> die RMS-Berechnung?

Na ja, die (Haupt-)Signalfrequenz sollte vielleicht nicht gerade ein 
ganzzahliges Vielfaches der Abtastfrequenz sein ;-)

von Bernie (Gast)


Lesenswert?

Nun nenne doch einfach mal ein paar Eckwerte:

- max. Signalfrequenz
- max. mögliche Samplefrequenz
- Filterdaten: fg = ?, Ordung, oder dB pro Oktave

Ansonsten: Wenn du eine tiefe Signalfrequenz hast,
hast du viele Samples, die das Signal in einer
Signalperiodeerfassen. -> Gut für die Genauigkeit!

Wenn du eine höhere Signalfrequenz hast und die
Samplefrequenz nicht gerade ein ganzzahliges
Vielfaches der Signalfrequenz ist, bekommst du viele
Samples, die das Signal zu jeweils anderen Phasen
erfassen. -> Genau so gut für die Genauigkeit!

WENN du die Signalfrequenz genau kennst, gibt es
als (programmtechnisch) einfache Alternative die
diskrete Fouriertransformation.
Kann auch gute Genauigkeit liefern.

von Helmut S. (helmuts)


Lesenswert?

Hier mal ein Beispiel mit dem kostenlosen Matheprogramm Scilab.

Beachte das 1/N in sqrt(1/N*summe(x^2))

Abtastfrequenz 1kHz,
Sinus 270Hz, 1V*sin(2*pi*270/s*t), Effektivwert 1V/sqrt(2)=0,707V
1000 Abtastwerte,
Sinus mit Amplitude 1(Effektivwert 0,707)


-->t=linspace(0,0.999,1000);

-->y=sin(2*%pi*270.*t);

-->u=sqrt(1/1000*sum(y.*y))
 u  =

    0.7071068

von Alberto (Gast)


Lesenswert?

Hi, die max. Signalfrequenz wird 70kHz sein. Die höher frequenten 
Anteile sollten wenn möglich durch den Tiefpassfilter gedämpft werden.

Die max. mögliche Samplefrequenz beträgt 250kHz.

Die Eckdaten:
fsignal(max)=68kHz
fs(max)=250kHz

fg=15k
-65dB bei 68kHz

Ich kann aber nicht immer davon ausgehen das das Signal Sinusförmig ist, 
könnte unter umständen leicht verzerrt sein. Gilt das dann immer noch 
mit den wenigen Samples?

Hab auch nachgerechnet, mein Fehler war das die Abtastfrequenz immer 
eine Vielfache der Signalfrequenz war.

von Fritz (Gast)


Lesenswert?

Alberto schrieb:
> Die Eckdaten:
> fsignal(max)=68kHz
> fs(max)=250kHz
>
> fg=15k
> -65dB bei 68kHz

Wenn du eine Grenzfrequenz von 15kHZ beim Antialiasing-Filter hast, sind 
250kHz schon Luxus, wären auch noch so um die 50kHz genug.

Was fsignal(max) bedeuten soll mußt du erklären. Wenn du bis zu diesem 
Frequenzanteil den Effektivwert messen möchtest, dann mußt du den Filter 
anders dimensionieren und darfst nicht bei 15kHz abschneiden.
Weiters solltest du uns erklären in welchen Zeitabständen du den 
Effektivwert berechnen willst, das ist genauso wichtig. Und vielleicht 
erklärst du uns, was für ein Signal das ist.

von Helmut S. (helmuts)


Lesenswert?

> Gilt das dann immer noch mit den wenigen Samples?

Ja. Das Ergebnis ist der Effektivwert des Gesamtsignals.

von Alberto S. (Firma: Student) (alberto)


Lesenswert?

Hi, ich möchte nur bis max. 15kHz messen. Gemessen wird die Spannung an 
einer Spule, es kann vorkommen, wenn die Spule ausserhalb ihrer Resonanz 
betrieben wird, nicht mehr sinusförmig ist.

Mit fsignal(max) meinte ich die Frequenz bei der eine Dämpfung von 64dB 
eintreten sollte.

Die Abtastfrequenz sollte ja kein ganzzahliges vielfaches der 
Signalfrequenz sein.

Mit 250kHz Abtastfrequenz beträgt die Abtastrate 4us.

Ich hätte alle 4,5us abgetastet. Sobald ein Nulldurchgang detektiert 
wird, mit 4,5us.

Spricht da was gegen?

von Helmut S. (helmuts)


Lesenswert?

Das ist bei weitem ausreichend. Allerdings empfehle ich das abgetastete 
Signal mit einem digitalen Tiefpassfilter auf z. B. 25kHz zu begrenzen. 
Du kannst aber du musst nicht auf den Nulldurchgang triggern. Welche 
niedrigste Frequenz erwartest du in deinem Signal und wie viele Werte 
willst du nehmen?

von Ulrich (Gast)


Lesenswert?

Bei einer niedrigen Frequenz lohnt es sich ggf. Start und Ende auf den 
Nulldurchgang (oder ggf. 70% vom Peak) zu synchronisieren. Bei höheren 
Frequenzen, so dass man viele Perioden misst kann man auf die 
Synchronisierung auch gut verzichten. Auch bei bekannter Frequenz (z.B. 
50 Hz
+ Oberwellen) reicht es das Intervall passend zu wählen. Eine Abtastung 
mit 250 kHz ist OK - wenn man den Anteil bei höheren Frequenzen nicht 
mit im Ergebnis haben will, dann wäre ggf. ein digitaler Tiefpass 
angebracht.

von W.S. (Gast)


Lesenswert?

Alberto S. schrieb:
> Hi, ich hab zunächst eine allgmeine Frage. Ich möchte den Effektivwert
> eines Sinussignals bestimmen.

Wenn du tatsächlich ein Sinussignal hast, dann reicht es aus, den 
Spitzenwert zu messen. Über die Kurve zu integrieren ist nur nötig, wenn 
man die Signalform nicht kennt.

Also bau dir einen Spitzenwertdetektor (OpV und Diode plus etwas 
Kleinzeugs) und laß dir von selbigem deinen ADC auch gleich starten. Das 
war's dann.

W.S.

von Ulrich (Gast)


Lesenswert?

Das Integrieren (Aufsummieren) über die Kurve geht für den µC eher 
einfacher und genauer als die direkte Messung des Spitzenwertes.

von Alberto S. (Firma: Student) (alberto)


Lesenswert?

Hi,

@W.S geht nicht, da nicht immer rein sinusförmig



Ich hab mir gedacht das ich bei hohen Frequenzen, über 4 Perioden 
abtaste.

Bei max. 15kHz und Abtastfrequenz von 250kHz, sind das ca. 66 Messwerte 
über 4 Perioden

Bei kleinen Frequenzen <700Hz mindestens eine Periode. Das Problem ist, 
das bei der aktuellen Abtastfrequenz bei sehr kleinen messbaren 
Signalfrequenzen, viele Messwerte erhalte.

Bei 10Hz wären das schon 25000 Werte.

Die kleinste Frequenz wird aber bei 500Hz liegen. Das wären 500 Werte 
mit 2 Perioden 1000 Werte, denke das ist ausreichend.

von W.S. (Gast)


Lesenswert?

Wenn du schon so an das Problem herangehen willst, dann mußt du es 
umgekehrt machen:
1. Rechenbedarf planen für das Integrieren pro hereingekommenem Meßwert 
und das ganze Ringsherum (Darstellen, Weiterleiten, Tasten abfragen, 
sonstige Haushaltsangelegenheiten)
2. abschätzen, wieviel Zeit dein Controller dafür braucht.
3. daraus die höchstmögliche Abtastrate berechnen
4. dir überlegen, ob die ausreicht
5. ggf. nen anderen uC nehmen.

Mir riecht das nach dsPIC.

W.S.

von Tom (Gast)


Lesenswert?

Alberto S. schrieb:
> je weniger Messpunkte ich aufzeichne desto mehr weicht doch der
> berechnete RMS von dem "wahren" RMS ab?

Du must natürlich den Bereich, den ein Abtastwert benutzt, 
berücksichtigen. Damit wird das nicht von der Zahl der Werte abhängig, 
sondern nur gröber. Interpolation ist nicht nötig.

von Ulrich (Gast)


Lesenswert?

Die Zahl der Abtastwerte darf ruhig recht hoch liegen. 66 Punkte sind da 
schon recht wenig - wenn genug zeit für die Messung da ist, dürfen es 
gerne auch 10000 und mehr A/D Werte sein, um einmal den RMS wert zu 
erhalten.

Die Rechnung zum aufsummieren kann schon während der Messung erfolgen. 
Man muss also die Werte nicht alle Speichern. Auch die Rechenzeit hält 
sich noch sehr in Grenzen - da ist meist der AD im µC langsamer.

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
Noch kein Account? Hier anmelden.