matlab for循环做自相关

         对于matlab我是新手,程序也是编写好长时间,总想写篇文章纪念下,所以有些地方可能没有说明白,有需要在修改。

        目的:利用自相关在接受来的数据中找到与本地数据相同的地方,利用的是自相关函数在原点位置的值最大。既然是在matlab中写程序为啥不用自相关函数呢?因为这个程序以后可能会在单片机上实现,所以先用matlab实验下。

fs=200000;%抽样频率
B=10000;
f0=20000;%LFM信号的起始频率
n=2048;%采样点个数
T1=n/fs;%在采样频率为fs的时候,采样n个点需要的时间
k=B/T1;%调频斜率
t1=linspace(0,T1-1/fs,n);
y=exp(1j*(pi*k*t1.^2+2*pi*f0*t1));

figure;
plot(t1,y);
title('LFM信号时域');
xlabel('t/s');
ylabel('幅度');
%造一个 10 000点数据的信号,其中有2048点LFM信号的数据
position_rand=randi(8000);%随机生成一个1-8000中的一个数
rand_sample1=zeros(1,position_rand);
rand_sample2=y;
rand_sample3=zeros(1,10000-length(rand_sample2)-length(rand_sample1));
rand_sample=[rand_sample1,rand_sample2,rand_sample3];%组合成一万个点

T=length(rand_sample)/fs;
t=linspace(0,T-1/fs,length(rand_sample))*fs;
figure;
stem(t,rand_sample);
title('信号时域');
ylabel('幅度');

LFM_sample=[y,zeros(1,2048)];%生成4096个点,其中2048是由前面的LFM组成,另外2048个点都是0
Rt1=zeros(4,4096);
Rt2=zeros(4,4095);
cal_number=floor(length(rand_sample)/2048)-1;
%cal_number是取rand_sample的次数
for i=1:cal_number
%     sample1=rand_sample(1,(1:2048)+(i-1)*2048);
%     sample2=rand_sample(1,(2049:4096)+(i-1)*2048);
    sample=rand_sample(1,(1:4096)+(i-1)*2048);
    for j=1:4096
        for h=1:4096
            if h+j-1 >= 4097
                break;
            else
                 Rt1(i,j)=Rt1(i,j)+conj(LFM_sample(1,h))*sample(1,h+j-1);
            end
        end
    end
 %在求取n < 0 的情况
    for j=1:4095
        for h=1:4096
            if h+j >= 4097
                break;
            else
                 Rt2(i,j)=Rt2(i,j)+conj(LFM_sample(1,h+j))*sample(1,h);
            end
        end
    end 
end
Rt=[Rt2,Rt1];
i=-4095:4095;
subplot(2,2,1)
stem(i,Rt(1,:));
title('1-4096点互相关匹配');
subplot(2,2,2)
stem(i,Rt(2,:));
title('2049-6144点互相关匹配');
subplot(2,2,3)
stem(i,Rt(3,:));
title('4097-8192点互相关匹配');

下面是两次进行运行的结果

图 1

        可以看出来在图1中的三个图,我选中了500那个点,是三个图中幅值最大的点,第501个点就是LFM开始的数据点。

 

图 2

        可以看出来在图2中的三个图,我选中了904那个点,是三个图中幅值最大的点,第904+2048*2+1=5001个点就是LFM开始的数据点。

至于在图1 中的第二个图和图2 中的第二个图,是因为也是存在部分匹配的现象,因为我每次只能取所有的点中的4096个点,这意味着如果有些时候,我只会取到部分的LFM信号点,而这些信号点也是和本地的数据存在匹配的,所以存在一个峰。但是只有全部匹配的时候会出现一个最高的峰。

图 3

 这次就很明显知道LFM的位置,但是你可以观察到图3 中的第三个图片有个峰,但是这个峰值的幅度好像没有刚才那几个的大?想想是为什么?

还是因为我取点的问题,因为10,000个点,每次做4096点相关,做一次相关,平移2048个点。所以我只能做3次相关,剩下的点就不够在做一次相关了(10000 = 4096 + 2048*2 + 1808)。现在的LFM的位置是7247 + 1。所以我在第三次,必然取不到所有的点,所以赋值就不会很高。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值