2017-01-29 2 views
1

Ich möchte IMC berechnen nach untenImaginäre Teil der Kohärenz Matlab

How calculate Imaginary part of coherence

ich unten Code in Matlab geschrieben, aber das Ergebnis ist nicht das, was ich erwartet hatte. Ist dieser Code eine gültige Implementierung der obigen Anweisungen? Könnte mir jemand mit einem besseren Code helfen?

function [ imag_coherence] = imcoh(x,y) 
xy=xcorr(fft(x),fft(y)); 
xx=xcorr(fft(x)); 
yy=xcorr(fft(y)); 
imag_coherence=imag(xy./sqrt(xx.*yy)); 
end 
+0

In Ihrem Code gibt es keine komplexe konjugiert noch Erwartung, oder? –

+0

Ich denke, Xcorr tun es, in sich selbst. –

+0

Ihr Code sieht korrekt aus, nehmen Sie an, dass es falsch ist, weil die Ausgabe eine reelle Zahl ist? imag() gibt die imaginäre Komponente nur als reelle Zahl zurück (d. h. imag (3 + 4i) => 4). –

Antwort

0

xcorr berechnet tatsächlich die Kreuzkorrelation zwischen dem berechneten Spektrum (a Summen Beiträge über alle Frequenzen), nicht die Erwartung der punktweisen Multiplikation (das heißt für eine gegebene feste Frequenz) dieser Spektren. Letzteres ist, was die von Ihnen zur Verfügung gestellte Kohärenzdefinition verwendet.

Unter der Annahme, dass die Prozesse x und yergodic sind, können die Erwartungen geschätzt werden, indem der Durchschnitt über viele Datenblöcke berechnet wird. In diesem Sinne, wie eine Implementierung der Kohärenz in Ihrer Definition beschrieben könnte wie folgt aussehen:

function [ result ] = coherency(x,y,N) 
    % divide data in N equal length blocks for averaging later on 
    L = floor(length(x)/N); 
    xt = reshape(x(1:L*N), L, N); 
    yt = reshape(y(1:L*N), L, N); 

    % transform to frequency domain 
    Xf = fft(xt,L,1); 
    Yf = fft(yt,L,1); 

    % estimate expectations by taking the average over N blocks 
    xy = sum(Xf .* conj(Yf), 2)/N; 
    xx = sum(Xf .* conj(Xf), 2)/N; 
    yy = sum(Yf .* conj(Yf), 2)/N; 

    % combine terms to get final result 
    result=xy./sqrt(xx.*yy); 
end 

Wenn Sie nur den imaginären Teil wollen, dann ist es einfach eine Frage der imag(coherency(x,y,N)) berechnen.

Verwandte Themen