Frage

Grafik- und Audiobearbeitungssoftware enthält häufig Funktionen namens „Hochpassfilter“ und „Tiefpassfilter“.Was genau bewirken diese und welche Algorithmen werden für ihre Implementierung verwendet?

War es hilfreich?

Lösung

Wikipedia:

Diese Begriffe „hoch“, „niedrig“ und „Band“ beziehen sich auf Frequenzen.Beim Hochpass versucht man tiefe Frequenzen zu entfernen.Beim Tiefpass versuchen Sie, hohe Werte zu entfernen.Beim Bandpass lässt man nur einen kontinuierlichen Frequenzbereich übrig.

Die Wahl der Grenzfrequenz hängt von Ihrer Anwendung ab.Die Codierung dieser Filter kann entweder durch Simulation von RC-Schaltungen oder durch Herumspielen mit Fourier-Transformationen Ihrer zeitbasierten Daten erfolgen.Codebeispiele finden Sie in den Wikipedia-Artikeln.

Andere Tipps

So implementieren Sie einen Tiefpassfilter mithilfe von Faltung:

double[] signal = (some 1d signal);
double[] filter = [0.25 0.25 0.25 0.25]; // box-car filter
double[] result = new double[signal.Length + filter.Length + 1];

// Set result to zero:
for (int i=0; i < result.Length; i++) result[i] = 0;

// Do convolution:
for (int i=0; i < signal.Length; i++) 
  for (int j=0; j < filter.Length; j++)
    result[i+j] = result[i+j] + signal[i] * filter[j];

Beachten Sie, dass das Beispiel extrem vereinfacht ist.Es führt keine Bereichsprüfungen durch und verarbeitet die Kanten nicht richtig.Der verwendete Filter (Box-Car) ist ein besonders schlechter Tiefpassfilter, da er viele Artefakte (Klingeln) verursacht.Informieren Sie sich über das Filterdesign.

Sie können die Filter auch im Frequenzbereich implementieren.So implementieren Sie einen Hochpassfilter mithilfe von FFT:

double[] signal = (some 1d signal);
// Do FFT:
double[] real;
double[] imag;
[real, imag] = fft(signal)

// Set the first quarter of the real part to zero to attenuate the low frequencies
for (int i=0; i < real.Length / 4; i++) 
  real[i] = 0;

// Do inverse FFT:
double[] highfrequencysignal = inversefft(real, imag);

Auch dies ist vereinfacht, aber Sie verstehen, worauf es ankommt.Der Code sieht nicht so kompliziert aus wie die Mathematik.

Dabei handelt es sich im Allgemeinen um elektrische Schaltkreise, die dazu neigen, Teile analoger Signale weiterzuleiten.Ein Hochpass tendiert dazu, mehr hochfrequente Teile durchzulassen, und ein Tiefpass lässt tendenziell mehr tieffrequente Teile durch.

Sie können in Software simuliert werden.Ein Walking Average kann beispielsweise als Tiefpassfilter fungieren und die Differenz zwischen einem Walking Average und seinem Eingang kann als Hochpassfilter fungieren.

Hochpass Filter lässt hoch-Häufigkeit (detaillierte/lokale Informationen) passieren.
Tiefpass Filter lässt niedrig-Häufigkeit (grobe/grobe/globale Informationen) passieren.

Filtern beschreibt den Vorgang der Datenverarbeitung auf eine Weise, die unterschiedliche Dämpfungsgrade auf unterschiedliche Frequenzen innerhalb der Daten anwendet.

Ein Hochpassfilter sorgt für eine minimale Dämpfung (d. h.Die Pegel bleiben bei hohen Frequenzen unverändert, bei niedrigen Frequenzen wird jedoch die maximale Dämpfung angewendet.

Ein Tiefpassfilter verhält sich genau umgekehrt: Er schwächt niedrige Frequenzen nicht, hohe Frequenzen hingegen schwächt er.

Es kommen verschiedene Filteralgorithmen zum Einsatz.Die beiden einfachsten sind wahrscheinlich der Finite-Impulse-Response-Filter (auch bekannt als „Finite Impulse Response“-Filter).FIR-Filter) und der Infinite Impulse Response-Filter (auch bekannt als:IIR-Filter).

Der FIR-Filter speichert eine Reihe von Abtastwerten und multipliziert jeden dieser Abtastwerte mit einem festen Koeffizienten (der auf der Position in der Reihe basiert).Die Ergebnisse jeder dieser Multiplikationen werden akkumuliert und sind die Ausgabe für diese Stichprobe.Dies wird als Multiply-Accumulate bezeichnet – und in dedizierter DSP-Hardware gibt es für genau diesen Zweck einen speziellen MAC-Befehl.

Wenn die nächste Probe entnommen wird, wird sie am Anfang der Serie hinzugefügt, die älteste Probe der Serie wird entfernt und der Vorgang wiederholt.

Durch die Auswahl der Filterkoeffizienten wird das Verhalten des Filters festgelegt.

Einer der einfachsten Filter, der häufig von Bildverarbeitungssoftware bereitgestellt wird, ist der Mittelungsfilter.Dies kann durch einen FIR-Filter implementiert werden, indem alle Filterkoeffizienten auf den gleichen Wert eingestellt werden.

Hier ist ein supereinfaches Beispiel eines Tiefpassfilters in C++, der das Signal Sample für Sample verarbeitet:

float lopass(float input, float cutoff) {
 lo_pass_output= outputs[0]+ (cutoff*(input-outputs[0])); 
outputs[0]= lo_pass_output;
return(lo_pass_output);
}

Hier ist so ziemlich das Gleiche, außer dass es sich um einen Hochpass handelt:

float hipass(float input, float cutoff) {
 hi_pass_output=input-(outputs[0] + cutoff*(input-outputs[0]));
 outputs[0]=hi_pass_output;
 return(hi_pass_output);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top