Digitalisierung eines analogen Signals

8

Ich habe eine Reihe von CSV-Werten, die eine digitale Ausgabe darstellen. Es wurde mit einem analogen Oszilloskop erfasst, so dass es kein perfektes digitales Signal ist. Ich versuche, die Daten herauszufiltern, um ein perfektes digitales Signal für die Berechnung der Perioden zu erhalten (die variieren können). Ich möchte auch den maximalen Fehler definieren, den ich von dieser Filtration erhalte.

In etwa so:

Idee

Übernehmen Sie einen Schwellenwert für die Daten. Hier ist ein Pseudocode:

%Vor%

Es gibt zwei Probleme, die mich stören.

  1. Dies scheint ein häufiges Problem in der digitalen Signalverarbeitung zu sein, ich habe jedoch keine vordefinierte Standardfunktion dafür gefunden. Ist das eine gute Möglichkeit, die Filterung durchzuführen?
  2. Wie bekomme ich den maximalen Fehler?
TheMeaningfulEngineer 27.02.2013, 13:11
quelle

4 Antworten

7

Hier ist ein bisschen Code, der helfen könnte.

%Vor%

Die Ausgabe:

%Vor%

Sie könnten numpy.histogram und / oder matplotlib.pyplot.hist verwenden, um das von periods(t, y, threshold) zurückgegebene Array weiter zu analysieren.

    
Warren Weckesser 27.02.2013, 14:46
quelle
2

Dies ist keine Antwort auf Ihre Frage, nur und Vorschlag, die helfen können. Ich schreibe es hier, weil ich Bild in Kommentar nicht setzen kann.

Ich denke, Sie sollten Daten vor jeder Verarbeitung irgendwie normalisieren.

Nach der Normalisierung auf den Bereich von 0 ... 1 sollten Sie Ihren Filter anwenden.

    
Kamil 27.02.2013 14:36
quelle
1

Wenn Sie wirklich nur an der Periode interessiert sind, könnten Sie die Fourier-Transformation plotten, Sie werden einen Peak haben, wo die Frequenz der Signale auftritt (und Sie haben also die Periode). Je größer der Peak in der Fourier-Domäne ist, desto größer ist der Fehler bei der Periodenmessung.

%Vor%     
danodonovan 27.02.2013 13:17
quelle
1

Ihre Filterung ist in Ordnung, es ist im Grunde das gleiche wie ein Schmitt-Trigger, aber das Hauptproblem, das Sie damit haben könnten, ist die Geschwindigkeit. Der Vorteil der Verwendung von Numpy ist, dass es so schnell wie C sein kann, während Sie jedes Element einmal durchlaufen müssen.

Mit dem Median-Filter von SciPy können Sie etwas Ähnliches erreichen. Folgendes sollte zu einem ähnlichen Ergebnis führen (und nicht von irgendwelchen Größen abhängig sein):

%Vor%

Sie können die Stärke der Median-Filterung mit medfilt(raw, n_samples) , n_samples standardmäßig auf 3 einstellen.

Was den Fehler angeht, wird das sehr subjektiv sein. Ein Weg wäre, das Signal ohne Filterung zu diskretisieren und dann nach Unterschieden zu vergleichen. Zum Beispiel:

%Vor%     
jleahy 27.02.2013 14:23
quelle

Tags und Links