自己写的PRI变化法-matlab

仿照自相关函数的写法,加上了相位因子。

但这种方法弊端:1、处理的点数太多

                             2、检测效果拉跨

输入序列如下图示:(两个固定pri的信号一个从1开始间隔为5,一个从3开始间隔为8

自己写的PRI变化法-matlab

 经过mypri之后的图:

自己写的PRI变化法-matlab

 代码如下:

clear
clc
x_range=50;
x=zeros(1,x_range);
pri_1=5;
pri_2=8;
x(1:pri_1:x_range)=x(1:pri_1:x_range)+1;
x(3:pri_2:x_range)=x(3:pri_2:x_range)+1;
t_n=[];
for p=1:length(x)
    if x(p)~=0
      t_n=cat(2,t_n,p);
    end
end
% D=fft(x);%用fft分析信号会得到什么信息呢?
% stem(D);
% C=C_tau(x,t_n);%改的多加了一个参数。
C=mypri_1(x);
stem(abs(C(26:49)));%画出从tau=1开始画图
stem(abs(C(x_range+1:x_range*2-1)));

% function C = mypri_plus(x,t_n) %一个失败品。
% x_length=length(x);
% C=zeros(1,length(x));
% for ii=1:5 %第i级计算,,这咋有点不像pri了  
%     diff=[];
%     for p=1:length(t_n)-ii
%         diff(p)=t_n(p+ii)-t_n(p);%记录tn的值
%     end
%     tau_min=min(diff);
%     tau_max=max(diff);
%     tau_1=[];
%     tau_1(1)=diff(1);
%     for p=2:diff
%         if diff(1)~=diff(p)
%             tau_1=cat(2,tau_1,diff(p));
%         end
%     end
%     % C=zeros(1,length(tau_1));
%     for tau = tau_1
% %         for i = 1:length(tau_1)
% %             if tau == tau_1(i)
% %                 aa=i;
% %             end
% %         end
%         for i =1:x_length-tau
%               C(tau)=C(tau)+x(i)*x(i+tau);
%         end
%     end
% end
% end

function C = mypri_1(x)
len=length(x);
C=zeros(1,2*len-1);
for tau = -(len-1):len-1 
%     tau_range= 2-len:2*len-1
    if tau>=0
        range_min=1;
        range_max=len-tau;%这些范围指的是:当tau确定时,在这些范围内,
                          %计算x(t)*x(t+tau)才有意义(不为零)。
    else
        range_min=1-tau;
        range_max=1;
    end
    aa=tau+(len);%列表的索引不能为负值,故进行平移
    if tau>=0
        for i =1:range_max
          C(aa)=C(aa)+x(i)*x(i+tau)*exp(1i*2*pi*i/tau);
        end
    elseif tau<0
         for i =range_min:len
          C(aa)=C(aa)+x(i)*x(i+tau)*exp(1i*2*pi*i/tau);
        end
    end
end
end

上一篇:【学习笔记】欧拉筛法(线性筛素数)


下一篇:质数