Matlab 循环自相关函数误差

Matlab 循环自相关函数误差,matlab,signal-processing,Matlab,Signal Processing,我尝试在matlab中编写如下代码: 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 %

我尝试在matlab中编写如下代码:

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
我犯了错误,但它并没有真正显示出我的期望。根据下面的公式,我如何修复它?
您提供的代码不完整,因此很难自信地再现您的错误。特别是,您尚未定义信号(sig_bin_syl_mod)、采样增量(Te)或信号长度(N)

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

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

所以你的代码有一些基本问题

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

首先,不要试图一次性获得所有tau和alpha的CA。专注于获得单周期频率α和所有tau的正确功能。 我已经在cyclostational.wordpress.com上整理了很多有用的帖子,详细介绍了如何做到这一点

第二,将更正后的单个alpha代码放入循环中。然后试着让它更有效率

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

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


Chad

有什么错误?下标赋值维度不匹配。感谢您的提问,我还尝试用FFT/DFT绘制CAF,因为我们可以通过DFT(x(t)*x(t+tau))获得CA,但没有得到显著结果信号(sig_bin_syl_mod)是Te=5e-6的BPSK信号,根据我的模型,我的意思是通过对循环周期图进行傅里叶逆变换来估计CAF:Rx(tau,alpha)=IFFT(X(f+alpha/2)X^*(f-alpha/2))。这对您编程来说可能更容易一些。首先确保您的代码适用于alpha=0,这就是IFFT(X(f)X^*(f)),即正常的自相关函数。然后转到alpha=/=0。非常感谢您的帮助,这非常有用