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

2 Sensorsignale Normieren

 

Chloe
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 15.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.11.2014, 15:32     Titel: 2 Sensorsignale Normieren
  Antworten mit Zitat      
Hallo,

Ich habe folgendes Problem: 2 Sensor-Signale wurden aufgenommen, und da ich eine Kreuzkorrelation zwischen die beiden Signale durchführen möchte, sollen sie zumindest die gleiche Amplitude haben, sonst kriege ich nun immer als Korrelationswerte lauter Nullen..
Ich habe schon eine Normierung gemacht, aber irgendwie funktioniert nicht so wirklich...
Hat jemand eine Idee wie ich die Signale z.bl ohne Normierung auf die gleiche Höhe kriegen kann ? Kennt sich jemand aus ?

Ich lade das Bild hoch und das Programmcode + die Signale

Code:
%das ist mein Program
signal1 = load....
signal2 = load....

signal1(38000:end) = [];
signal2(38000:end) = [];

Fs = 2000;
Ts = 1/Fs;
N = length(signal1);
Tmax = (N-1)*Ts;
t=0:Ts:Tmax;

%Normierung
s1 = signal1-mean(signal1);
s2 = signal2-mean(signal2);

figure
subplot(2,1,1);

subplot(2,1,2);
plot(t,s1,'r',t,s2,'b');
legend('Normiert');

 


SensorSignale.jpg
 Beschreibung:

Download
 Dateiname:  SensorSignale.jpg
 Dateigröße:  147.46 KB
 Heruntergeladen:  600 mal
MAV22.txt
 Beschreibung:
Signal2

Download
 Dateiname:  MAV22.txt
 Dateigröße:  767.68 KB
 Heruntergeladen:  598 mal
MAV21.txt
 Beschreibung:
Signal1

Download
 Dateiname:  MAV21.txt
 Dateigröße:  767.82 KB
 Heruntergeladen:  578 mal
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 27.11.2014, 19:03     Titel:
  Antworten mit Zitat      
Verstehe zwar ehrlich gesagt nicht warum das für eine Kreuzkorrelation wichtig ist, aber normiert wird so:

Norm_wert = (wert-min)/(max-min)

Code:

signal1_norm = (signal1 - min(signal1)) / (max(signal1) - min(signal1));
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Chloe
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 15.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.11.2014, 09:03     Titel:
  Antworten mit Zitat      
Danke für die Antwort !
Nun zu dem Kreuzkorrelations-Thema : ich möchte eine Geschwindigkeitsmessung mittels Kreuzkorrelation durchführen. Am Anfang habe ich nun die aufgenommene Signale benutzt, ohne die zu normieren aber dann hatte ich keine richtige Werte gekriegt.. Es war schon deutlich zu sehen, dass das zweite Signal gegenüber dаs erste verschoben ist, aber trotzdem kam den Wert 0 für die Kreuzkorrelation raus. Dann habe ich normiert und alles sah schon besser aus. Ich hab die Signale an Frames verteilt und somit für jedes Frame die KK ausgerechnet, aber da musste ich auch jedes mal normieren... Trotzdem sieht das Ganze nicht so gut aus...
Hat jemand eine Idee wie könnte ich dann die KK ausrechnen ohne zu normieren ? Ich bin nun stehengeblieben an der Stelle... Sad

hier mein Code
Code:

signal1 = load....
signal2 = load....


signal1(38000:end) = [];
signal2(38000:end) = [];

a = 0.067;
Fs = 2000;
Ts = 1/Fs;
N = length(signal1);
Tmax = (N-1)*Ts;
t=0:Ts:Tmax;
thresh = 0.6;   %correlation threshold

%normieren
signal1_norm = (signal1 - min(signal1)) / (max(signal1) - min(signal1));
signal2_norm = (signal2 - min(signal2)) / (max(signal2) - min(signal2));

%median Filter
MFS1 = medfilt1(signal1_norm, 10);   % 10. order
MFS2 = medfilt1(signal2_norm, 10);

%segmenting a signal into frames
l=0.1;   %the frame length is ... sec  
r=l*0.15;   %overlap (...% from the frame_len) od .015
ls=ceil(l*Fs);  
rs=ceil(r*Fs);  
fr_shift=ls-rs;   %frame shift
Nram=floor((N-ls)/fr_shift)-1;   %number of frames


%cuting the signals into frames that are then stored in the matrix columns
%sigtam1, sigram2
sigram1=zeros(ls,Nram);    %allocation for the frames - will be in columns
sigram2=zeros(ls,Nram);
odtud=1;    %filling
potud=ls;
new_frames = zeros(Nram,1);
for ii=1:Nram
    %frame1 = s1(odtud:potud);
    frame1 = MFS1(odtud:potud);
    frame1 = frame1-mean(frame1);
    sigram1(:,ii)=frame1;
    %frame2 = s2(odtud:potud);
    frame2 = MFS2(odtud:potud);
    frame2 = frame2-mean(frame2);
    sigram2(:,ii)=frame2;
    odtud=odtud+fr_shift;
    potud=potud+fr_shift;
    max_val1=max(frame1);
    max_val2=max(frame2);
 
    [C21, lag1] = xcorr(frame1,frame2,'coeff');
    [~, Index] = max(C21);
        if max(C21) > thresh
        time_delay=abs(lag1(Index));
        time_lag=time_delay./Fs;
        new_frames(ii)=a./time_lag;   %in km/h  .*3.6
   end
end

velocity_v=new_frames;
figure
plot(velocity_v);

 
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.