Der beste Weg, um ein Signal mit einer sehr niedrigen Frequenz (250 Hz) zu senden?

8

Ich bin ein Programmierer, der vor einer elektronischen Frage steht, also dachte ich, hier ist der richtige Ort!

  • Ich habe einen Magnetfeldsensor, der mir 250 Mal pro Sekunde Magnetfeldwerte (XYZ-Achse) liefert.
  • Eine elektronische Schaltung mit einem programmierbaren Mikroprozessor steuert eine Spule, die das Magnetfeld nahe genug an diesem Sensor ändern kann. Die beiden Geräte sind jedoch nicht streng positioniert, sodass ich die Positionsmessung nicht weiterleiten kann.
  • Ich möchte 2 verschiedene Arten von Signalen von der Schaltung an den Sensor senden, die starken Störungen im Magnetfeld standhalten und kürzer als eine halbe Sekunde sind (Ja, Sekunden - wir sind in 250 Hz!)

Die derzeitige Lösung besteht darin, eine 17-Hz-Rechteckwelle zu senden, dann 12 Hz, dann 17 Hz für Signal A, wobei die Reihenfolge für Signal B umgekehrt wird. Um diese Signale zu erfassen, müssen jedoch ausreichend lange Wellen gesendet werden, wodurch die Signale auf eine Länge von etwa 1,5 gebracht werden Sekunden.

Meine Frage hier lautet also: Gibt es einen Weg, sagen wir ein Muster, wie ein musikalisches Muster, das verwendet werden kann, um schneller zu signalisieren und trotzdem zuverlässig zu sein?

rubmz
quelle

Antworten:

7

Mit einer Abtastrate von 250 Hz können Sie problemlos 100 Bit / Sekunde oder mehr senden. In 0,5 Sekunden wäre das in der Größenordnung von 50-60 Bit.

Die Frage ist, welche Bitmuster sollten Sie auswählen, die leicht voneinander und auch von Außenrauschen und Interferenzen zu unterscheiden sind. Eine übliche Lösung besteht darin, pseudozufällige Bitsequenzen, auch als Barker-Codes bekannt , zu verwenden, die die gewünschte geringe Kreuzkorrelation aufweisen.

Eine als " Matched Filter " bekannte DSP-Technik kann verwendet werden, um die Codes zu erfassen.

Dave Tweed
quelle
Hört sich interessant an! Aber ich habe gewandert, wie rechenintensiv "Matched Filter" sein könnte? Würde es schwere FFT / andere Berechnungen erfordern?
Rubmz
Ich habe die c ++ - Implementierungen auf einen passenden Filter überprüft, und es scheint, dass es ziemlich umfangreiche Berechnungen erfordern würde, um das Signal zu erkennen. Daher ist es für mich möglicherweise nicht so nützlich, da mein sensor-seitiger Code in einer RT-Umgebung ausgeführt wird. Gibt es also einen anderen Filter, mit dem ich zwei Arten von Signalen in weniger als 0,5 Sekunden ohne zu viele Berechnungen senden kann? ?
Rubmz
2
Es erfordert keine Fourier-Transformation, aber es erfordert das Äquivalent eines FIR-Filters (Finite Impulse Response) auf jedem der drei Eingangskanäle, was mathematisch äquivalent ist, ein Punktprodukt auf zwei 128-Abtastvektoren für jedes neue zu erstellen Beispiel, das eingeht (128 Multiplikationen und 128 Additionen, 250 Mal pro Sekunde, für insgesamt ~ 33.000 Multiplikations-Additionsoperationen pro Sekunde pro Filter oder insgesamt ca. 100.000 MAC / s). Selbst ein sehr Low-End-DSP-Chip wie der Microchip dsPIC kann diese Art der Echtzeitberechnung problemlos durchführen.
Dave Tweed
2
Um klar zu sein, müssen Sie diese Berechnung für jeden Code, den Sie erkennen möchten, separat ausführen. Wenn Sie beispielsweise 10 verschiedene Codes haben, von denen jeder jederzeit übertragen werden kann, müssen Sie zehn übereinstimmende Filter parallel ausführen, um insgesamt 1 Million MACs / s zu erhalten - immer noch innerhalb der Möglichkeiten von ein dsPIC oder ähnlicher Chip. Wenn Sie feststellen, dass kürzere Codes in Ihrer Anwendung robust genug sind, können Sie entsprechend kürzere Filter verwenden, und die Rechenlast nimmt proportional ab.
Dave Tweed