2016-03-31 8 views
0

Ich versuche, ein cyclic autocorrelation function in Matlab Code wie folgt:Fehler mit zyklischen Autokorrelationsfunktion

t=0:(N-1); 
t=t*Te; 
i_alpha=0; 
tau=-N2*Te:Te:N2*Te; 
alpha=-1/2:1/N:1/2; 
Ryy_cl=zeros(length(alpha),length(tau)); 
for alpha=alpha/Te 
    ind_tau=0; 
    i_alpha=i_alpha+1; 
    for k=tau 
     ind_tau=ind_tau+1; 

    if k>0 
%    Ryy_cl(i_alpha,ind_tau)=1/length(sig_bin_syl_mod(1:end- k))*sum((sig_bin_syl_mod(1:end-k)).*sig_bin_syl_mod(k+1:end)).*exp(1i*2*pi*alpha*t(1+k:length(sig_bin_syl_mod(1:end)))); 
       Ryy_cl(i_alpha,ind_tau)=(1/N)*sum((sig_bin_syl_mod(1:end-k)).*sig_bin_syl_mod(k+1:end)).*exp(-1i*2*pi*alpha*t(1:end-k)); 

     else 
      Ryy_cl(i_alpha,ind_tau)=(1/N)*sum((sig_bin_syl_mod(1-k:end)).*sig_bin_syl_mod(1:end+k)).*exp(-1i*2*pi*alpha*t(1-k:end)); 
     end 

    end 
end 

ich Fehler bekommen, und sie nicht wirklich zeigen, was ich erwarte. Wie kann ich die folgenden Formeln beheben? math_formulae

+0

Welchen Fehler gibt es? –

+0

Subskribierte Zuordnungsdimension stimmt nicht überein. –

Antwort

0

Der von Ihnen angegebene Code ist unvollständig, daher ist es schwierig, Ihren Fehler souverän zu reproduzieren. Insbesondere haben Sie das Signal (sig_bin_syl_mod), das Abtastinkrement (Te) oder die Signallänge (N) nicht definiert.

Ich bekomme verschiedene Fehler, je nachdem, wie ich Te auswähle. Am einfachsten ist es, Te = 1 zu wählen. Aber das ist nicht realistisch. Eine 1-MHz-Abtastrate hätte Te = 1,0e-6.

Wenn Te keine ganze Zahl ist, können Sie sehen, dass ein Problem darin besteht, dass tau keine ganze Zahl ist, aber Sie ordnen k tau zu und verwenden dann k als Index.

Ihr Code hat also grundlegende Probleme.

Jetzt werde ich Ihre Frage direkt beantworten. Schreiben Sie den Code neu, und trennen Sie das obige Produkt in separate Schritte, damit Sie es leichter debuggen können.

Zuerst versuchen Sie nicht, die CA für alle Tau und Alpha in einem Schuss zu erhalten. Konzentrieren Sie sich darauf, die Funktion für eine einzelne Zyklusfrequenz Alpha und alle Tau richtig zu machen. Ich habe ein paar hilfreiche Beiträge zusammengestellt, um genau zu beschreiben, wie man das auf cycostationary.wordpress.com macht.

Zweitens, legen Sie den korrigierten Single-Alpha-Code in eine Schleife. Dann versuche es effizient zu machen.

Übrigens ist eine sehr effiziente alternative Möglichkeit, die zyklische Autokorrelation abzuschätzen, zunächst das zyklische Periodogramm zu konstruieren (siehe meine Website) und dann inverse Fourier-transformieren. Dies nutzt die Kraft der FFT.

Schließlich, dieser Link zu Quora diskutiert eine andere "zyklische Autokorrelation". Sie versuchen, eine zyklostationäre Signalverarbeitung durchzuführen, aber diese Verbindung behandelt nur die DFT/FFT und deren zirkulare Verschiebungen. Auf meiner Website finden Sie die Definition und Eigenschaften der für Sie interessanten zyklischen Autokorrelation.

Tschad

+0

danke für Ihre Antwort, ich habe auch versucht, die CAF mit FFT/DFT zu plotten, wie wir die CA durch DFT erhalten können (x (t) * x (t + Tau)), aber nicht signifikant resulat –

+0

das Signal (sig_bin_syl_mod) ist ein BPSK-Signal mit Te = 5e-6, je nach Modell habe ich. –

+0

Ich meine Schätzung der CAF durch Ausführen einer inversen Fourier-Transformation des zyklischen Periodogramms: Rx (Tau, Alpha) = IFFT (X (f + Alpha/2) X^* (f-Alpha/2)). Dies könnte für Sie etwas einfacher zu programmieren sein. Stellen Sie zuerst sicher, dass Ihr Code für Alpha = 0 funktioniert, was nur IFFT (X (f) X^* (f)) ist, die normale Autokorrelationsfunktion. Dann gehe weiter zu Alpha =/= 0. –

Verwandte Themen