Forum: Digitale Signalverarbeitung / DSP / Machine Learning Pulskompression für Ultraschall: Barker-Code mit Manchestercodierung


von Eduard I. (eiten)


Angehängte Dateien:

Lesenswert?

Hallo zusammen

<Einleitende Erklärung>
Am Boot meines Vaters ist ein Tiefenmesser am Werk, der suboptimal 
arbeitet (Sprung zu 2facher/4facher Tiefe). Deshalb befasse ich mich ein 
wenig mit der Materie. Ich weiss, dass es auch bessere Echolote zu 
kaufen gibt, ich sehe dies als Bildungsexkurs. Vielleicht wird mal was 
draus, ich werde aber erste Versuche an der Luft tätigen, nachdem die 
Theorie beherrscht ist).
</Einleitnde Erklärung>

Bei der Betrachtung von Ultraschall-Entfernungsmessern bin ich auf die 
Pulskompression mittels Barker-Code gekommen. Idee: Barker-Code 
Manchestercodieren und dann die Bitfolge mit z.B. 40kHz an einen 
Transducer geben. Manchester habe ich gewählt, da ich so einen gut für 
den Transducer geeigneten NRZ Code habe. Wie man im angehängten Bild 
"Barker.png" sieht, ist nach der Korrelation der reiner Barker viel 
besser als der Manchestercodierte. Nach kurzer Überlegung ist auch klar 
wieso: durch die Manchestercodierung wurde natürlich die Autokorrelation 
viel höher.

Habe ich mit der Manchestercodierung einen grundlegenden Denkfehler 
gemacht? Habt ihr Alternativvorschläge?

Danke und gute Nacht, Edi

von Detlef _. (detlef_a)


Lesenswert?

Hi Edi,

kann ich nicht nachvollziehen oder ich habe Dich nicht verstanden. Die 
guten Korrelationseigenschaften der Barker Codes werden doch bei 
Manchester Modulation erhalten, wenigstens in meinem Test.

Cheers
Detlef

clear
bark=[1 1 1 1 1 0 0 1 1 0 1 0 1];
bark=2*bark-1;
plot(corr(bark,bark),'.-')
man=[ones(size(bark)); -ones(size(bark))];
ind=find(bark==1);
man(:,ind)=-man(:,ind);
man=man(:).';
plot(corr(man,man),'.-')
return

von Eduard I. (eiten)


Lesenswert?

Hallo Detlef,

danke für Deine Antwort. Ich muss wohl mal wieder etwas Octave üben.
Ja, ich glaube wir reden aneinander vorbei. Es stimmt schon, dass bei 
einer Übereinstimmung beides mal die Korrelation 1 ergibt. Allerdings 
weiss ich ja bei meinem Signal nicht, wo die Übereinstimmung 
stattfindet. Dafür schiebe ich ja das "Suchmuster" über die 
Empfangsfolge und schaue, wo das am besten korreliert. Anhand der beiden 
Bilder im ersten Post in Autokorrelation.png sollte man das am besten 
sehen (ich habe dabei den Code jeweils gegen sich selbst verschoben und 
die Korrelation berechnen lassen): beim reinen Barker (oben) ist die 
"Seitenkeulenunterdrückung" um Grössenordnungen besser als beim 
manchesterkodierten Barkercode (unten).

Ich hoffe ich konnte verständlich darstellen, was ich meine.

Gruss, Edi

von Hp M. (nachtmix)


Lesenswert?

Eduard I. schrieb:
> und dann die Bitfolge mit z.B. 40kHz an einen
> Transducer geben.

Ich fürchte, das die Bandbreite des Transducers dafür nicht ausreicht.

von Detlef _. (detlef_a)


Lesenswert?

>>>>>>>
beim reinen Barker (oben) ist die
"Seitenkeulenunterdrückung" um Grössenordnungen besser als beim
manchesterkodierten Barkercode (unten).

Nein, ist sie nicht, zumindest nicht bei mir und auch nicht theoretisch. 
Voran das bei Dir liegt kann ich nicht sagen, weil ich Deinen Code nicht 
direkt laufen lassen kann und der mir auch zu lang ist zum Verstehen. 
Ich hab Dir nochmal 'corr.m' angehängt, kuck mal bei mir.

>>>>>>>>>>>>>
> und dann die Bitfolge mit z.B. 40kHz an einen
> Transducer geben.
Ich fürchte, das die Bandbreite des Transducers dafür nicht ausreicht.

Ja, die Transducer sind sehr schmalbandig. Ich betreibe einen 
Ultraschall transducer mit einer Bandbreite von 5kHz um seine 
Mittenfrequenz von 40kHz, an den Rändern ist der 10dB unten. Aber er 
kann ja die Barker Codes so langsam auf den Träger modulieren, dass die 
Bandbreite klein bleibt.

Cheers
Detlef

function [spx]=corr(c1,c2);
c1=c1(:);
c2=c2(:);
spx=(real(ifft(fft(c1).*conj(fft(c2)))));

: Bearbeitet durch User
von Eduard I. (eiten)


Lesenswert?

Hallo zusammen,

tatsächlich, wenn ich Detlefs corr-Funktion nehme, dann klappt das und 
schaut vernünftig aus. Die Octave-corr-Funktion gibt nur einen einzelnen 
Wert aus und nicht einen Vektor. Wieso auch immer. Auf jeden Fall ist 
das Ergebnis jetzt auch wie erwartet.

An die schmalbandigkeit habe ich nicht gedacht, danke. Ich habe mir für 
meine Luftexperimente auch einen 40kHz Transducer ausgesucht. Wenn ich 
dann mit 5kHz aufmoduliere gibt das eine Bitdauer von 2us, für den 
Barker-Code mit der Länge 13 also 2.6ms. Das gibt in der Luft dann eine 
Mindestdistanz von 182cm (2.6us * 330m/s / 2), im Wasser 42cm (ohne 
Umschaltung Senden/Empfangen gerechnet). Wenn ich auch kürzere Distanzen 
messen will (vor allem im Wasser, dort interessieren mich vor allem die 
kurzen), muss ich dann in dem Bereich auf kürzere Barker-Codes 
umschalten oder nur ein paar Pulse senden und das Echo direkt auswerten.
Obwohl, IIRC kann der Bootstransducer 80kHz und 200kHz. Da muss ich mal 
versuchen die Bandbreite messen.
@Detlef wie hast Du die Bandbreite gemessen? Bei 35kHz/40kHz/45kHz ein 
paar Pulse gesendet und geschaut, wie viel noch zurückkommt?

Gruss, Edi

von Detlef _. (detlef_a)


Lesenswert?

>>>>
@Detlef wie hast Du die Bandbreite gemessen? Bei 35kHz/40kHz/45kHz ein
paar Pulse gesendet und geschaut, wie viel noch zurückkommt?

5kHz Bandbreite. Ich habe bei 40kHz +/- 2.5kHz Dauersignal gesendet und 
mir die Amplitude angesehen :-)

Cheers
Detlef

von Eduard I. (eiten)


Lesenswert?

Super, dann muss ich nur noch einen passenden ADC finden, die AVR's 
schaffen wohl keine 80+kSPS.

Danke euch, und ich melde, wie's ausgegangen ist.

von Detlef _. (detlef_a)


Lesenswert?

Nee, schaffen die nicht. Ich nehme nen ARM von ST.

Cheers
Detlef

von Wolfgang (Gast)


Lesenswert?

Eduard I. schrieb:
> Am Boot meines Vaters ist ein Tiefenmesser am Werk, der suboptimal
> arbeitet (Sprung zu 2facher/4facher Tiefe).

Mir ist nicht ganz klar, was du mit deiner Autokorrelation erreichen 
willst. Die Anzeige der 2-fachen Wassertiefe deutet darauf hin, dass 
nicht das erste Echo (Schiff-Boden-Schiff), sondern das zweite 
(Schiff-Boden-Wasseroberfläche-Boden-Schiff) ausgewertet wird. Entweder 
ist die Dynamikkompression beim Empfänger falsch abgestimmt 
(Zeitabhängigkeit der Empfindlichkeit nach Burstaussendung) oder/und der 
erste Puls wird vom Auswertealgorithmus nicht gut erkannt.

4-fache Tiefe ist allerdings schon etwas ungewöhnlich.

von chris_ (Gast)


Lesenswert?

>Super, dann muss ich nur noch einen passenden ADC finden, die AVR's
>schaffen wohl keine 80+kSPS.

Schaffen die, ich glaube es waren so an die 150kHz, wenn es auch nicht 
so im Datenblatt empfohlen wird:
http://roboterclub-freiburg.de/projekte/mega8cam/index.php

Wobei die AVRs für Signalverareitung einfach zu knapp dimensioniert 
sind. Und bei der weiten und billigen Verbreitung der ARM-Prozessoren 
würde ich mir das nicht mehr an tun.

von Eduard I. (eiten)


Lesenswert?

Wolfgang schrieb:
> Mir ist nicht ganz klar, was du mit deiner Autokorrelation erreichen
> willst. Die Anzeige der 2-fachen Wassertiefe deutet darauf hin, dass

Hallo Wolfgang,

da ist meine Einleitung etwas zu kurz ausgefallen. Wegen unter falschen 
Anzeige habe ich begonnen, mich im Detail damit auseinander zu setzen 
und habe dann, so glaube ich, gelernt zu haben, dass bei geringem 
Signal-Rauschabstand mit der Pulskompression nochmals einiges 
herauszuholen ist. Bei geringen Tiefen geht das mit der Pulskompression 
eh nicht, da sonst das Echo schon da ist, während ich noch am aussenden 
bin.

Gruss, Edi

von Eduard I. (eiten)


Lesenswert?

chris_ schrieb:
> Wobei die AVRs für Signalverareitung einfach zu knapp dimensioniert
> sind. Und bei der weiten und billigen Verbreitung der ARM-Prozessoren
> würde ich mir das nicht mehr an tun.

Da hast Du natürlich recht. Ich schau mich mal um, was es da so gibt.

Gruss, Edi

von W.A. (Gast)


Lesenswert?

Eduard I. schrieb:
> Ich schau mich mal um, was es da so gibt.

Vielleicht ein Arduino mit einem SAM3X8E von Atmel?

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.