Forum: HF, Funk und Felder Erfahrungsaustausch zu MUSIC


von Sepp Obermaier (Gast)


Lesenswert?

Guten Abend,
ist hier zufällig jemand am Weg, der sich mit hochauflösenden Verfahren 
zur Richtungsbestimmung von Signalen auskennt?

Ich versuche gerade im Rahmen meiner Masterarbeit MUSIC zu 
implementieren, scheitere aber an der Signalanzahlschätzung auf Basis 
der Kovarianzmatrix.

Die Situation ist folgende:

Ich habe 8 Antennen, von denen ich jeweils 100 Samples aufnehme
die ich in eine Matrix D schreibe ( Spalten : Antennen, Zeilen Samples)

Die Kovarianzmatrix schätze  ich nun  durch

(D^H * D ) ./ 100.

Soweit so gut.  Wenn ich nun jedoch die Eigenwerte der Matrix betrachte 
erhalte ich zum teil negative Eigenwerte. Das darf meienr Ansicht nach 
nicht sein, da laut definition eine Kovarianzmatrix positiv semidefinit 
sein sollte, oder liege ich hier falsch?

Ferner erhalte ich steets nur einen Signaleigenwert, egal wieviele 
Signale ich simulativ überlagere

(Vorgehen hierzu:
mehrere Vektoren für die einzelnen WInkel  aus den Referenzdaten 
extrahieren, Phasenoffset erzeugen, Rauschen überlagern und additiv 
überlagern.


Mache ich hier etwas fundamental falsch?

(Ja ich weiß - diese Frage ist mehr als speziell:) Aber vielleicht habe 
ich ja Glückk

von Plasmon (Gast)


Lesenswert?

Sepp Obermaier schrieb:

> Wenn ich nun jedoch die Eigenwerte der Matrix betrachte
> erhalte ich zum teil negative Eigenwerte.

Sind deine Signale vielleicht nicht mittelwertfrei?

> Ferner erhalte ich steets nur einen Signaleigenwert, egal wieviele
> Signale ich simulativ überlagere

Vielleicht sind deine Signale voll korreliert. Dein Vorgehen klingt 
danach.

von Sepp Obermaier (Gast)


Lesenswert?

Danke für deine Antwort...

Ich war eigenlich der Ansicht das wenn ich die relativ Phasen der 
einzelnen Signale gegeneinander verschiebe und auf jedes Sample der 
Kovarianzmatrix Rauschen hinzu gebe
die Signale nicht mehr voll korreliert sind.

von Plasmon (Gast)


Lesenswert?

Sepp Obermaier schrieb:
> ch war eigenlich der Ansicht das wenn ich die relativ Phasen der
> einzelnen Signale gegeneinander verschiebe und auf jedes Sample der
> Kovarianzmatrix Rauschen hinzu gebe
> die Signale nicht mehr voll korreliert sind.

Relative Phasenverschiebung ist ja nur eine Multiplikation mit einer 
komplexen Zahl exp(j*phi), also eine Skalierung. Oder bei breitbandigen 
Signalen eine Verschiebung der Zeitachse entsprechend der 
unterschiedlichen Laufzeiten. Reine Skalierung oder Zeitverschiebung 
führt aber nicht zu einer Dekorrelation, der Korrelationskoeffizient 
bleibt bei Eins. Jedenfalls solange der Antennenabstand kleiner als die 
Korrelationslänge des Signals ist (wovon ich ausgehe).

Vermutlich sind also zwar deine Rauschanteile unkorreliert (abhängig 
davon, wie du das Rauschen erzeugst. Auch dabei kann man sich ins Knie 
schießen.), die Signalanteile sind jedoch voll korreliert und es bleibt 
bei einem eindimensionalen Signalraum.

Es ist eine bekannte Eigenschaft von MUSIC, dass seine Performance bei 
korrelierten Signalen in die Knie geht.

von Sepp Obermair (Gast)


Lesenswert?

Was wäre deiner Ansicht nach eine geeignete möglichkeit unkorrelierte 
Signale zu simulieren?

Von Preprocessing Verfahren wie Spatial Smoothing oder FB Averaging 
wollte ich zunächst die Finger lassen

Das beschriebene Vorgehen hat bislang bei normalen Beamforming Verfahren 
ganz gut funktioniert.

Das Rauschen erzeuge ich über die Add Gaussian whithe noise Funktion der 
Communications Toolbox.


Ich bin auf dem Gebiet leider noch Anfänger, daher sind die fragen vllt 
teils etwas unbeholfen.

von Plasmon (Gast)


Lesenswert?

Sepp Obermair schrieb:
> Was wäre deiner Ansicht nach eine geeignete möglichkeit unkorrelierte
> Signale zu simulieren?

Deine Simulation ist doch sicher ein Modell für irgendein Szenario, das 
du untersuchen willst. Du solltest also deine Simulation an dein 
Szenario anpassen und nicht die Signale so züchten, bis ein von dir 
gewähltes und möglicherweise ungeeignetes Verfahren endlich 
funktioniert.

Wenn deine synthetischen Signale dein Szenario gut modellieren, dann 
lasse es dabei. Suche lieber nach einem DOA-Schätzer, der mit 
korrelierten Quellen umgehen kann. Zielführende index terms sind "DOA 
estimation" und "coherent sources". Spatial smoothing wäre natürlich 
schon ein Schritt in die richtige Richtung.

von Sepp Obermair (Gast)


Lesenswert?

richtig,

Ich versuche die Richtung von Radarzielen zu detektieren.

Hierzu habe ich simulierte Refrenzdaten meiner 2 Wege Antennendiagramme 
in einem Winkelraster.

So langsam glaube ich auch meienn Fehler gefunden zu haben.

Mein Vorgehen zur Bildung der Samples ist wohl nicht korrekt:
1
function [CX] = selMeasData(Data, sn, PhaseOffset, dataWinkel)
2
3
winkel =  Data(:,1);
4
5
n= ((size(Data,2)-1)/2) ;                                                  %Beamzahl bestimmen
6
for m=1:1:n;                                                               % Aus real./imag. Werten eine Komplexe Matrix basteln 
7
    CD(:,m) = (Data(:,m*2) + Data(:,m*2+1) * i);
8
end
9
10
posI = find(winkel==dataWinkel);                                           %Spaltenvektor zu Winkel zuordnen
11
vektorI = CD(posI,:);                                                      %Spaltenvektor selektieren
12
13
BetragI =abs(vektorI);                                                     % In Betrag und Phase aufspalten
14
PhaseI =angle(vektorI) + PhaseOffset * (pi /180);
15
16
REAL = BetragI .* cos(PhaseI);                                             %komplexe Zahlbasteln
17
IMAG = BetragI .* sin(PhaseI);
18
CXI = REAL + IMAG * i;
19
CX = (awgn(CXI, sn , 'measured'));                                           % Rauschen hinzufügen)
20
end

Bislang habe ich die Kovarianzmatrix so gebildet:
1
for i=1:1:100    
2
    KVMD(i,:) = selMeasData(Daten, 200, 0, 1) ;+ selMeasData(Daten, 200, 20, 5) + selMeasData(Daten, 20, 11, -5);      
3
end
4
5
KVM  = (KVMD.' * KVMD) / 100

Liegt mein Denkfehler darin, das ich die signale nicht nur zufällig 
aufaddiern muss sondern sie über einen Sinus mit der Signal Freuquenz 
meiner Nutzsignale sampeln muss?

Ich habe hier vor Ort leider niemanden zum Diskutieren

von Plasmon (Gast)


Lesenswert?

Sepp Obermair schrieb:
> for m=1:1:n;
>     CD(:,m) = (Data(:,m*2) + Data(:,m*2+1) * i);
> end

Solche Schleifen sind sehr ineffizient. Das gleiche müsstest du mit
1
k  = [1:length(Data)];
2
CD = Data(mod(k,2)==0) + i*Data(mod(k,2)==1);
bekommen (ungetestet). Auch das ganze Zeug hier

> BetragI =abs(vektorI);
> PhaseI =angle(vektorI) + PhaseOffset * (pi /180);
> REAL = BetragI .* cos(PhaseI);
> IMAG = BetragI .* sin(PhaseI);
> CXI = REAL + IMAG * i;

ist nur eine umständliche Schreibweise von
1
CXI = vektorI .* exp(i*pi*PhaseOffset/180);

> Liegt mein Denkfehler darin, das ich die signale nicht nur zufällig
> aufaddiern muss sondern sie über einen Sinus mit der Signal Freuquenz
> meiner Nutzsignale sampeln muss?

Du arbeitest ja schon zeitdiskret, also mit Abtastwerten. Nochmal 
samplen brauchst du nicht. Ansonsten fehlt mir jetzt auch ein bisschen 
die Zeit, mich in deine Sachen reinzudenken. Was ich zum Beispiel an 
deiner Kovarianzbildung nicht verstehe, ist dass du mit KVMD(i,:) zwar 
eine Zeile adressierst, ihr aber dann 2 Spalten zuweist (von selMeasData 
kommt doch eine Spalte zurück, oder?).
> Ich habe hier vor Ort leider niemanden zum Diskutieren
Hast du für deine Masterarbeit keinen Betreuer???

von Plasmon (Gast)


Lesenswert?

Plasmon schrieb:
> Was ich zum Beispiel an
> deiner Kovarianzbildung nicht verstehe, ist dass du mit KVMD(i,:) zwar
> eine Zeile adressierst, ihr aber dann 2 Spalten zuweist (von selMeasData
> kommt doch eine Spalte zurück, oder?).

Sehe gerade, dass da gar keine [] sind, die das zu 2 Spalten machen 
würden. Aber dann verstehe ich die Zeile
1
> KVMD(i,:) = selMeasData(Daten, 200, 0, 1) ;+ selMeasData(Daten, 200, 20, 5) + selMeasData(Daten, 20, 11, -5);
noch weniger, vor allem das Zeug nach dem ersten Semikolon.

von Sepp Obermair (Gast)


Lesenswert?

ich wollte nochmal rückmeldung geben.
Ich habs mittlerweile hinbekommen.

Zunächst habe ich eine Betrachtung an einem Array isotroper strahler 
vorgenommen und diese dann später auf meine Simulationsdaten übertragen.

Das Problem lag wie vermutet in der Bildung der Kovarianzmatrix.

Danke an für deine Hilfe.

Gerade befasse ich mich mit Spatail Smoothing, hierzu hatt sich  bei mir 
eine weitere Frage aufgetan.

Meine geglättete Kovarianzmatrix erhalte ich aus folgendem matlab Script

wobei R die Ausgangskovarianzmatrix, p die Anzahl der Sensoren pro 
Untergruppe, M die Anzahl der Antennenelemente ist,
1
function Rss = spatailsmooting(R, p)
2
M=length(R);         
3
%%% Wie viele Antennenspannungen habe ich?
4
Rss = zeros(M-p,M-p);          
5
%%% leere Matrix der entsprechenden Dimension erzeugen                          
6
for i = 1:1:M-p+1
7
   Rss= Rss+  R((i:1:i+p-1),(i:1:i+p-1));    
8
%%% weitere Untergruppe aufaddieren
9
end
10
Rss = Rss / (M-p+1); 
11
%%% Kovarainzmatrix durch Anzahl der Untergruppen teilen


Die Kovarianzmatrix hat nach dem Glätten ja die Dimension( M-p+1  x 
M-p+1))

Meine Refrenzdaten jedoch die Dimension (M x theta)

Muss ich also die Refrenzdaten nach dem gleichen vorgehen glätten? Ich 
habe es einmal versucht, und zwar mit folgendem Code
1
CDS =zeros(p,length(winkel)); 
2
3
 for i = 1:1:M-p+1;
4
     
5
   CDS= CDS + CD(i:1:i+p-1,:);    
6
end
7
CDS = CDS / (M-p+1);
8
9
10
Wobei CD die Matrix der Referenzdaten in der Form (M x theta) und CDS die geglättete Matrix der Referenzdaten (M-p+1 x theta) ist.


Wende ich nun jedoch das MUSIC Verfahren auf die beiden matrizen an, so 
erhalte ich ein Leistungsspektrum ohne jeden Peak...

Woran kann das liegen? Ode rmache ich etwas grundlegend falsch?

Danke und Gruß Sepp

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.