WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Störsignal von phasenverschobenen Nutzsignalen trennen

 

Habakuk Tibatong
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 12.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2012, 21:58     Titel: Störsignal von phasenverschobenen Nutzsignalen trennen
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein Problem über das ich mir schon den ganzen Tag den Kopf zerbreche. Kann gut sein, dass ich mittlerweile den Wald vor lauter Bäumen nicht mehr sehe... Confused

Ich habe ein Nutzsignal x(t) welches in der Art
x = a*sin(2*pi*f0*t)
vorliegt. Dieses Nutzsignal wir überlagert von einem Störsignal
s = b*sin(2*pi*f1*t)
also
x_mess = x + s
Die Frequenzanteile des Störsignals liegen überwiegend auf der 1. und 2. Harmonischen der Nutzsignal-Frequenz f0, d.h. f1 = f0 oder f1 = 2 * f0.

Wenn ich nun eine Modifikation am Messaufbau vornehme, dann verschiebt sich die Phasenlage des Nutzsignals während die Phasenlage des Störsignals gleich bleibt. Diesen Effekt wollte ich nutzen, um das Nutzsignal separieren zu können.

Ich generiere also ein zweites Nutzsignal
y = a*sin(2*pi*f0*t + phi)
bei dem die Nutzsignal-Phase verschoben ist und die Störsignal-Phase gleich bleibt.
y_mess = y + s = x(+phi) + s

Ich habe nun also zwei gemessene Signale

x_mess = a*sin(2*pi*f0*t) + s(t)
y_mess = a*sin(2*pi*f0*t + PHI) + s(t)

bei denen sich der Nutzsignalanteil um eine mir (ungefähr) bekannte Phase verschiebt. Zumindest sind auf dem Nutzsignal noch genügend hochfrequente Charakteristika enthalten als dass mir eine Kreuzkorrelation der Ableitungen die genaue Phasenlage bringt (180° +- 5°).

Nun habe ich über eine Kreuzkorrelation der Ableitungen die genaue Phasenverschiebung berechnet, um dann beide Signale von einander zu subtrahieren. Dabei habe ich nicht bedacht, dass ich dabei auch das Störsignal phasenverschiebe und dabei konstruktive und destruktive Interferenzen auftreten können! Je nach Frequenz des Störsignals habe ich also eine Lösung oder eben nicht.

In folgendem Skript habe ich testweise versucht die Sache zu simulieren:
Code:


clc;
clear all;
close all;

%% Generation of signals

ref = 0 : 1 : 1000;
phase = round(1/4 * length(ref));
freq = 1 / length(ref);            
noise = rand(1, length(ref));

phase_fault =  1/6 * 2*pi();
freq_fault = 2 * freq;          % Einstellbares Frequenzvielfaches; mit 2 geht es, bei anderen Vielfachen nicht!!
fault = 0.5 * sin(2*pi()*freq_fault*ref + phase_fault);
% fault = 0;

x = sin(2*pi()*freq*ref) + noise;
y = circshift(x', -phase)';

x_f = x + fault;
y_f = y + fault;

%% Calculation of phase shift

x_mean = x_f - mean(x_f);
y_mean = y_f - mean(y_f);

[crosscorr, crossref] = xcorr(diff(x_mean), diff(y_mean), round(length(ref) * 0.75), 'unbiased');
% [MaxCrossVal MaxCrossPos] = max(diff(crosscorr(crossref > 0)));
[MaxCrossVal MaxCrossPos] = max(crosscorr(crossref > 0));
% PhaseShift = crossref(MaxCrossPos);
% PhaseShift = MaxCrossPos + 1;
PhaseShift = MaxCrossPos;

if isequal(phase, PhaseShift)
    disp('Sync perfectly!');
else
    disp('Sync failed!');
    disp(['Original phase: ' num2str(phase)]);
    disp(['Calculated phase: ' num2str(PhaseShift)]);
end

%% Correction of signals

z = circshift(x_f', -PhaseShift)';
% y_norm = y_f - y_f(1);
% z_norm = z - z(1);
y_norm = y_f;
z_norm = z;
cal = (y_norm - z_norm) ./ 2;
x_cal = x_f - cal;

if isequal(cal, fault)
    disp('OWNED');
else
    disp('EPIC FAIL');
    figure;
    plot(cal-fault);
    grid;
end

%% Figures

figure;
subplot(3,1,1);
hold on;
plot(ref, x, 'r')
plot(ref, y, 'g')
plot(ref, fault, 'b')
plot(ref, x_f, 'c')
plot(ref, y_f, 'k')
hold off;
grid;
legend('Originalsignal Phasenlage 1', 'Originalsignal Phasenlage 1', 'Stationärer Fehler', 'Resultierendes Signal Phasenlage 1', 'Resultierendes Signal Phasenlage 2')
subplot(3,1,2);
hold on;
plot(crossref, crosscorr);
% plot(crossref(2:end), diff(crosscorr));
legend('Kreuzkorrelation der Ableitungen 1. Grades')
hold off;
grid;
subplot(3,1,3);
hold on;
plot(ref, x, 'r');
plot(ref, cal, 'b');
plot(ref, x_cal, 'k');
legend('original', 'stationär', 'kalibriert')
hold off;
grid;
 


Aber je nach eingestellter Frequenz des Störsignals geht die Sache schief.

Gibt es eine mathematisch eindeutige Trennung der beiden Signalanteile durch den Effekt mit der Phasenlage? Irgendwie muss ich diesen Effekt doch nutzen können...

Für Eure Hilfe bin ich vorab schon dankbar!

Viele Grüße, HK
Private Nachricht senden Benutzer-Profile anzeigen


Habakuk Tibatong
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 12.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.05.2012, 11:59     Titel:
  Antworten mit Zitat      
Keiner eine Idee?

Vielleicht war es auch ein bisschen viel Text.

Im Prinzip kann man es auf folgendes reduzieren:

Gegeben:
x_mess = a*sin(2*pi*f0*t) + s(t)
y_mess = a*sin(2*pi*f0*t + PHI) + s(t)

Kann man s(t) isolieren, indem man die konstante Phasenlage ausnutzt?
Private Nachricht senden Benutzer-Profile anzeigen
 
Habakuk Tibatong
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 12.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2012, 17:04     Titel:
  Antworten mit Zitat      
Hallo zusammen,

nur um das hier korrekt abzuschließen: Ich habe diese Frage auch in 2 Mathe-Foren gestellt und das Ergebnis ist, dass diese Aufgabe unlösbar zu sein scheint.

Von daher muss ein anderer Ansatz her! Wink

Viele Grüße, Habakuk
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.