überlagerte Pulsfolgen erkennen

Gast #5191896
Lesenswert?
• ▲
▼
Ein Pulszähler soll eine weitgehend bekannte Kurvenform (Delta-Marker) 
aus einem Signal extrahieren und mitzählen, wobei die Daten stark 
verrauscht sind.

Soweit funktioniert die Geschichte allerdings ergibt sich infolge eines 
Antennenproblems und dynamisch bewegter Objekte eine Reflektionsbildung, 
d.h. das Signal ist mehrfach enthalten.

Bei großen Abständen sehe Ich Echos, die Ich erkennen und ignorieren 
kann.

Bei kleinen Abständen laufen aber die Kurven ineinander, d.h. es gibt 
eine Deformation und die Erkennung misslingt.

Wie kommt man dem Problem einfach bei?

Nach Doppelpulsen suchen? Wie formuliere Ich die Annahme?
Angehängte Dateien:
Gast #5197622
Lesenswert?
• ▲
▼
Zunächst auch gerne mit Matlab. Langfristig mit einem Microcontroller, 
der klein genug ist und es leisten kann.

Wie wäre denn Dein Ansatz? Hätte denn MATLAB eine Vorschrift oder eine 
feritg implementierte Methode zur Erkennung eines Doppelpulses?

Oder muss Ich einfach selbst eine Reihe von Annahmen machen, um das 
Ergebnis der Pulsfolgen zu bekommen, mit denen Ich dann falte?

Ich habe eine ähnliche Lösung von anderer Seite skizziert bekommen, 
dabei handelt es sich aber um jeweils zwei einfach Wellen, die sich zu 
einem Kamelbuckel vereinen. Das ist recht einfach zu prozessieren.

Das Ursignal sieht übrigens vom Prinzip her so aus:

0,1,2,3,4,5,6,7,8,9,-9,-8,-7,-6,-5,-4,-3,-2,-1,0 also zwei komplementäre 
Geraden.
Gast #5200189
Lesenswert?
• ▲
▼
Wenn das Signal bekannt ist dann ist das doch eine Anwendung von 
Korrelation.

Es wird hier etwas schwieriger dadurch dass das bekannte Signal mit dem 
korreliert wird wenig Energie bei tiefen Frequenzen hat, quasi ein 
bandpass ist und damit die Korrelation nicht so leicht ausgewertet 
werden kann.

Normalisiert man aber die Frequenz etwas bis zu einer gewählten 
Grenzfreqzenz des Nutzsignals, verbessert sich das.

Octave/Matlab Beispiel:
1
close all
2
clear all
3

4
function fs = realmirror(rs);
5

6
  fs=[rs conj(fliplr(rs(2:end-1)))];
7

8
end
9

10
signal = [0 1 2 3 4 5 6 7 8 9 -9 -8 -7 -6 -5 -4 -3 -2 -1 0];
11

12
receivedsamples=200;
13

14
signal=[signal zeros(1,receivedsamples-length(signal))];
15

16
noise=randn(1,receivedsamples)*5e-1;
17
noise-=mean(noise);
18

19
received = noise ...
20
.+ shift(signal,50)  ...
21
.+ shift(signal,55)*.5 ... 
22
.+ shift(signal,70) ...
23
.+ shift(signal,80)*.5 ...
24
.+ shift(signal,100) ...
25
.+ shift(signal,120)*.5;
26

27
bandf=realmirror(exp(linspace(0,1,receivedsamples/2+1).^2*log(.1)));
28
bandf(1)=0;
29

30
plot (received)
31

32
figure()
33

34
plot (real(ifft(fft(received).*(bandf./[1 fft(signal)(2:length(signal))]))))
Angehängte Dateien:

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.