循环自相关函数出错

时间:2016-03-31 13:12:19

标签: matlab signal-processing

我正在尝试在matlab中编写cyclic autocorrelation function代码,如下所示:

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

我遇到了错误,并没有真正显示出我的期望。根据以下公式,我该如何解决? math_formulae

1 个答案:

答案 0 :(得分:0)

您提供的代码不完整,因此很难自信地重现您的错误。特别是,您尚未定义信号(sig_bin_syl_mod),采样增量(Te)或信号长度(N)。

根据我选择Te的方式,我会得到不同的错误。最简单的方法是选择Te = 1.但这是不现实的。 1 MHz采样率将具有Te = 1.0e-6。

当Te不是整数时,您可以看到一个问题是tau不是整数,但是您将k分配给tau,然后使用k作为索引。

所以你的代码有基本的问题。

现在我要直接回答你的问题。重写代码,将上面的产品分解为单独的步骤,以便您可以更轻松地调试它。

首先,不要试图一次性获得所有tau和alpha的CA.专注于使单个循环频率alpha和所有tau的功能正确。 我已经在cyclostationary.wordpress.com上汇总了很多关于如何做到这一点的有用帖子。

其次,将修正后的单字母代码放入循环中。然后尝试提高效率。

顺便说一下,估计循环自相关的一种非常有效的替代方法是首先构造循环周期图(参见我的网站),然后对其进行逆傅里叶变换。这利用了FFT的强大功能。

最后,与Quora的链接讨论了不同的“循环自相关”。您正在尝试进行循环平稳信号处理,但该链接仅处理DFT / FFT及其循环移位。请参阅我的网站,了解您感兴趣的循环自相关的定义和属性。

乍得