ü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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren