Forum: Digitale Signalverarbeitung / DSP 50Hz Softwarefilter


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Mini Maus (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Kennt jemand den Weg / Möglichkeiten eines 50Hz Filter in Software?

: Verschoben durch Moderator
von Jemand (Gast)


Bewertung
4 lesenswert
nicht lesenswert
Ja.

von Joe F. (easylife)


Bewertung
0 lesenswert
nicht lesenswert
https://en.wikipedia.org/wiki/High-pass_filter

-> Algorithmic implementation

von Jemin K. (jkam)


Bewertung
0 lesenswert
nicht lesenswert
sliding mean über 20 ms.

von Mini Maus (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
gilt das auch für Gleichspannungssignale?
Also einfache Spannungsmessung am ADC?
Die dort abgebildeten Filter sind doch für AC - oder?
 function highpass(real[0..n] x, real dt, real RC)
   var real[0..n] y
   var real α := RC / (RC + dt)
   y[0] := x[0]
   for i from 1 to n
     y[i] := α * y[i-1] + α * (x[i] - x[i-1])
   return y

von Jemin K. (jkam)


Bewertung
1 lesenswert
nicht lesenswert
Hä?

von HildeK (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Mini Maus schrieb:
> gilt das auch für Gleichspannungssignale?

Wenn du nur Gleichspannung hast, was willst du dann wegfiltern? Gut, mit 
einem Hochpass kannst du auch die Gleichspannung wegfiltern, aber es ist 
dann einfacher, einfach das Kabel durchzuschneiden ...

von Adam P. (adamap)


Bewertung
0 lesenswert
nicht lesenswert
Mini Maus schrieb:
> Kennt jemand den Weg / Möglichkeiten eines 50Hz Filter in Software?

Such mal nach "WinFilter", der erzeugt dir dann auch C-Code.

Bei mir hab ich ein Bandpass 4 Ordnung für 380Hz laufen, funktioniert 
super.

Für den Offset nutze ich dies:
struct offset_filter_t
{
  long last_f;
  uint32_t last_s;
  int32_t filtered;
};
typedef struct offset_filter_t offset_filter_t;


int32_t dc_offset_filter(offset_filter_t *data, uint32_t sample)
{
  data->filtered = 0.999 * (data->last_f + (long)sample - (long)data->last_s);

  data->last_f = data->filtered;
  data->last_s = sample;

  return (int32_t)data->filtered;
}

: Bearbeitet durch User
von Mini Maus (Gast)


Bewertung
-3 lesenswert
nicht lesenswert
"Wenn du nur Gleichspannung hast, was willst du dann wegfiltern? "
störende Wechselspannung dazwischen?!...

Im Audiobereich habe ich Wechselspannung und will dort Wechselspannungen 
filtern..ich messe aber Gleichspannung und will die Wechselspannung 
filtern.könnte ja sein das das einen Untetrschied macht..
Habe Beispiele gesehen, wo ein C in Reihe und ein R Parallel ist..kannte 
vorher aber nur R in reihe und C Parallel..


Danke für die restlichen Hinweise, ich werde mir auch mal Winfilter 
ansehen

Beitrag #5836577 wurde von einem Moderator gelöscht.
von HildeK (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Mini Maus schrieb:
> könnte ja sein das das einen Untetrschied macht..
> Habe Beispiele gesehen, wo ein C in Reihe und ein R Parallel ist..kannte
> vorher aber nur R in reihe und C Parallel..

Es macht insofern einen Unterschied, dass diese Beschreibungen auf einen 
Hochpass (C in Reihe und R parallel) und einen Tiefpass (R in Reihe und 
C parallel) hindeuten (wenn ich deine Prosa richtig verstehe, einen Link 
auf deine Infos oder ein Bild wären nützlich gewesen).
Beide Lösungen können 50Hz dämpfen, mit einem Hochpass ist die 
Gleichspannung dann aber auch weg.

von oszi40 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Es gibt Hochpass, Tiefpass, Bandpass und Bandsperre.
Filtern ist leider immer die zweitbeste Möglichkeit, da die URSACHE oft 
woanders liegt! Gegen Brummen hilft z.B. auch ausreichende Abschirmung.

von Joe F. (easylife)


Bewertung
0 lesenswert
nicht lesenswert
Mini Maus schrieb:
> gilt das auch für Gleichspannungssignale?
> Also einfache Spannungsmessung am ADC?

Ein HP wäre da nicht passend.
Wichtig zu wissen wäre, welche Signalanteile du nicht herausfiltern 
möchtest.
Wenn die Frequenz für die du dich interessierst unterhalb 50 Hz liegt 
(sagen wir mal, die Abtastrate des ADC ist ohnehin < 25 Hz), hilft ein 
Tiefpass mit Grenzfrequenz (deutlich) unterhalb von 50 Hz.
Möglichst höherer Ordnung, denn ein Filter 1. Ordnung reduziert den 
Brumm nur um 6dB pro Oktave.

Falls auch Frequenzen oberhalb 50 Hz durchgelassen werden soll hilft ein 
Notch-Filter bei genau 50 Hz.

: Bearbeitet durch User
von Burkhard K. (buks)


Bewertung
0 lesenswert
nicht lesenswert
Mini Maus schrieb:
> Im Audiobereich habe ich Wechselspannung und will dort Wechselspannungen
> filtern.

Was hast Du denn überhaupt vor?

Nachträglich Brumm aus Aufnahmen entfernen?
  Audacity -> Effekt -> Notch oder HP -> Filtergüte (Q) wählen -> 
speichern

Oder was ganz anderes? Und wie groß ist der Brumm im Vergleich zum 
Nutzsignal?

BTW: 50 Hz entspricht in etwa dem Kontra-G (E-Seite) auf dem Bass - das 
fehlt dann nach dem Filtern

von Mini Maus (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
@Burkhard K. (buks)

"Was hast Du denn überhaupt vor?"

"gilt das auch für Gleichspannungssignale?
Also einfache Spannungsmessung am ADC?"

von Ingo W. (uebrig)


Bewertung
0 lesenswert
nicht lesenswert
Burkhard K. schrieb:
> Nachträglich Brumm aus Aufnahmen entfernen?
>   Audacity -> Effekt -> Notch oder HP -> Filtergüte (Q) wählen ->
> speichern

Würde ich auch, als Test auf jeden Fall mal empfehlen.

Könnte sich nämlich herausstellen, das es sich hier nicht um einen 
reinen, 50Hz-Sinus handelt, sondern um verformte 100Hz (nach der 
Gleichrichtung), schlimmstenfalls sogar um Nadelimpulse mit der 
entsprechenden Grundfrequenz, in diesem Falle mit einer reinen 
Bandsperre kaum auszufiltern.

von Peter Petersson (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Mini Maus schrieb:
> gilt das auch für Gleichspannungssignale?
> Also einfache Spannungsmessung am ADC?
> Die dort abgebildeten Filter sind doch für AC - oder?
>  function highpass(real[0..n] x, real dt, real RC)
>    var real[0..n] y
>    var real α := RC / (RC + dt)
>    y[0] := x[0]
>    for i from 1 to n
>      y[i] := α * y[i-1] + α * (x[i] - x[i-1])
>    return y

Vielleicht grundlegend nochmal anschauen was überhaupt der Sinn eines 
Filters ist. Ich weiß nicht ob ich lachen oder weinen soll.

von Peter Petersson (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Oder was ein Signal und eine Frequenz, AC und DC überhaupt bedeuten. Du 
scheinst das grundlegend nicht zu verstehen.

von HildeK (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Burkhard K. schrieb:
> Was hast Du denn überhaupt vor?

Ja, das habe ich mich auch lange gefragt. Wenn man gut ist im Lesen 
zwischen den Zeilen, könnte man ahnen, dass er eine verbrummte 
Versorgungsspannung überwachen will. Nix Audio etc.
@Mini Maus (Gast): Ist das so? Dann bitte bestätigen!

Dann hilft auf der analogen Seite ein schön tief angelegter Tiefpass 
oder eben ein Tiefpass in Software. Wenn man bei der 
Spannungsüberwachung einen langsamen Drift aus den Spezifikationen 
erfassen will, dann reicht vermutlich schon eine einfache oder eine 
gleitende Mittelwertbildung über eine Reihe von Samples.

von Mini Maus (Gast)


Bewertung
-3 lesenswert
nicht lesenswert
"zwischen den Zeilen, könnte man ahnen, dass er eine verbrummte
Versorgungsspannung überwachen will. Nix Audio etc.
@Mini Maus (Gast): Ist das so? Dann bitte bestätigen!"

Ja, logo ist ja irgendwie naheliegend..
Ich schrieb
Spannungsmessung, ADC 50Hz Filter..da muss man ja kein Genie sein, zu 
wissen was ich meine ;-)

von HildeK (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Mini Maus schrieb:
> Ja, logo ist ja irgendwie naheliegend..
> Ich schrieb
> Spannungsmessung, ADC 50Hz Filter..da muss man ja kein Genie sein, zu
> wissen was ich meine ;-)

So glasklar war dein Anliegen nicht. Ich war ja offensichtlich nicht der 
Einzige, der länger gebraucht hat um es zu verstehen.

Spannungen sind nicht nur bei DC vorhanden.
Auch das ist dann sinnlos und wenig hilfreich, um auf eine DC-Messung zu 
kommen:
Mini Maus schrieb:
> function highpass(real[0..n] x, real dt, real RC)

Und du redest von "Gleichspannungssignale". Oder meinst du doch nur 
Versorgungsspannungen? Signal wechseln irgendwann, sonst könnten sie 
nichts signalisieren ...
Mini Maus schrieb:
> gilt das auch für Gleichspannungssignale?

50Hz stören auch oft in Audiosignalen und bei vielen anderen 
Anwendungen.

Warum hast du überhaupt auf einer DC-Spannung unerwünschte 50Hz? Oder 
werden die dort benötigt? Wenn nicht, solltest du da schon mal ansetzen, 
das hilft auch andere Probleme zu vermeiden.
Ansonsten: ein Widerstand und ein dickes C vor den ADC-Eingang.

von Manfred (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Mini Maus schrieb:
> Ich schrieb
> Spannungsmessung, ADC 50Hz Filter..da muss man ja kein Genie sein, zu
> wissen was ich meine ;-)

Ein sehr netter Tonfall um Hilfe zu bekommen :-(

Beschreibe endlich eindeutig, wie Dein zu messendes Signal aussieht und 
aus welcher Quelle es stammt.

von Logikpolizei (Gast)


Bewertung
-3 lesenswert
nicht lesenswert
Adam P. schrieb:
> Bei mir hab ich ein Bandpass 4 Ordnung für 380Hz laufen, funktioniert
> super.

Na? Wer hat da die Aufgabenstellung nicht gelesen?

Mini Maus schrieb:
> Kennt jemand den Weg / Möglichkeiten eines 50Hz Filter in Software?

1. Falsche Frequenz
2. Faslche Filterkurve

1+2 = falsche Antwort!

von Joe F. (easylife)


Bewertung
1 lesenswert
nicht lesenswert
Logikpolizei schrieb:
> 2. Faslche Filterkurve

False Sreibweise.

von Adam P. (adamap)


Bewertung
0 lesenswert
nicht lesenswert
Logikpolizei schrieb:
>> Bei mir hab ich ein Bandpass 4 Ordnung für 380Hz laufen, funktioniert
>> super.
>
> Na? Wer hat da die Aufgabenstellung nicht gelesen?

Hättest du verstanden, dass meine Filter ebenfalls mit WinFilter erzeugt 
wurden, dann würdest du erkennen, dass es lediglich ein 
Erfahrungsbericht war und "Mini Maus" sich ihren eigenen Filter selbst 
zusammenklicken kann...

von GEKU (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Mini Maus schrieb:
> Möglichkeiten eines 50Hz Filter in Software?

Man könnte durch die Software ermitteln mit welcher Amplitude und 
Phasenlage das 50 Hz Signal im Nutzsignal vorkommt. (Fourier Analyse)

Kennt man diese beiden Werte, dann kann man dieses Signal vom Nutzsignal 
abziehen.
Man kann natürlich auch mit den Oberwellen so verfahren.

von Thomas U. (thomasu)


Bewertung
0 lesenswert
nicht lesenswert
GEKU schrieb:
> Man könnte durch die Software ermitteln mit welcher Amplitude und
> Phasenlage das 50 Hz Signal im Nutzsignal vorkommt.

Kommt aber einer Filterung gleich :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.