数学建模 河北杯 无人机侦听与反制问题问题2.2:在未知周期的情况下的解决思路

   日期:2020-08-30     浏览:124    评论:0    
核心提示:4.2.2 未知跳频周期由前面所写的解题思路,因为飞控信号频率周期未知,因此首先需要求得周期,然后即可根据之前一问的算法做下去。首先定义相关变量及参数:一个周期内无人机的飞控信号频率raw=[5,1,4,2,3,6],通过随机数phase来实现无人机飞控信号相位差,定义无人机每秒钟跳频频率freq=217,飞控信号一个周期内跳频次数num=6,定义干扰机可调频宽度 freq_num=2*num,定义干扰机的调频次序f=1:1:freq_num,设置干扰机采样频率samp_freq=1000,干扰机最大采

4.2.2 未知跳频周期
由前面所写的解题思路,因为飞控信号频率周期未知,因此首先需要求得周期,然后即可根据之前一问的算法做下去。
首先定义相关变量及参数:一个周期内无人机的飞控信号频率raw=[5,1,4,2,3,6],通过随机数phase来实现无人机飞控信号相位差,定义无人机每秒钟跳频频率freq=217,飞控信号一个周期内跳频次数num=6,定义干扰机可调频宽度 freq_num=2*num,定义干扰机的调频次序f=1:1:freq_num,设置干扰机采样频率samp_freq=1000,干扰机最大采样时间samp_t=100,最大采样次数max=samp_freq*samp_t,干扰机信号频率矩阵f_simu=zeros(max,1),设置无人机飞控信号频率矩阵f_real=zeros(max,1),一个飞控信号周期的采样次数T=⌊num*samp_freq/freq⌋,一次跳频区间的采样次数T0=⌊samp_freq/ freq⌋,初始化干扰机探测的飞控信号周期频率T_simu=0,初始化干扰机探测周期时的参考频率T_f=0,初始化干扰机探测飞控信号周期的开始时刻标记T_index1=0,初始化干扰机探测飞控信号周期的结束标记T_index2=0,初始化迭代器j=1,初始化发出NACK信号次数nack_count=0,初始化NACK信号的位置nack_index=1,初始化发出NACK信号时的频率nack_freq=0
构造发出NACK信号的函数,发出SOS信号的函数以及能够返回实时的飞控信号频率的函数。
编写程序,设置干扰机调频/采样频率samp_freq=1000,设置干扰器的可调频的频宽为2倍于飞控信号频宽。
结果如下图所示:

图表 4.6 周期未知的情况下,干扰机跳频/采样频率为1000时,无人机发出SOS时的哪一个周期的图样

在调频频率为1000的情况下,此时反制成功所花费的时间为:0.224(s)

调整参数,设置干扰机调频/采样频率samp_freq=2000,仿真结果如下图所示:

图表 4.7 周期未知的情况下,干扰机跳频/采样频率为2000时,无人机发出SOS时的哪一个周期的图样

此参数下,反制成功所花费的时间为:0.1395。和周期已知的时候的情况一样,时间缩短了近一倍。
将两种参数的模型各仿真20次,并取平均值;然后将干扰器可调频频宽设为和飞控信号频率频宽同样的宽度,再各仿真20次,取平均值,得到如下表格:

调频频率/可调频频宽 1000/1倍频宽 1000/2倍频宽 2000/1倍频宽 2000/2倍频宽
1 0.111000 0.135000 0.062000 0.084000
2 0.105000 0.121000 0.060500 0.123000
3 0.093000 0.149000 0.061500 0.109500
4 0.105000 0.232000 0.061500 0.157500
5 0.080000 0.172000 0.059500 0.201000
6 0.088000 0.910000 0.063000 0.111000
7 0.132000 1.010000 0.056000 0.116000
8 0.082000 0.146000 0.059000 0.118500
9 0.101000 0.193000 0.060500 0.133500
10 0.085000 0.127000 0.060500 0.158000
11 0.182000 0.194000 0.061000 0.108000
12 0.089000 0.195000 0.060000 0.128000
13 0.109000 0.188000 0.060500 0.108500
14 0.120000 0.520000 0.058500 0.126500
15 0.081000 0.305000 0.061500 0.107500
16 0.139000 0.139000 0.061500 0.167500
17 0.124000 0.156000 0.061500 0.120000
18 0.081000 0.128000 0.054000 0.121500
19 0.113000 0.196000 0.061500 0.117000
20 0.092000 0.909000 0.058000 0.108000
平均时间 0.105600 0.306250 0.060100 0.126225

图表 4.8 不同参数下各仿真20次的时间结果表及其平均时间

对比第一问,可以发现类似的结论:平均时间而言,干扰器调频频率越大,则反制时间越短,即算法收敛越快。
并且可以由平均时间的数值明显的看出,可调频的频宽和时间存在明显的线性关系,可调频的频率频宽越大,时间就越长,且倍数大概是呈线性关系。

MATLAB代码如下:

clc;

%设置一些重要参数为全局变量
global raw;
global freq;
global num;
global T;
global T0;
global nack_count;
global nack_freq;
global nack_index;

raw=[5,1,4,2,3,6];%定义一个周期内无人机的飞控信号的频率,由于频率图未知,因此此处通过随机频率来仿真
phase=rand;%通过随机数来实现无人机飞控信号相位差
freq=217;%无人机每秒钟跳频频率
num=6;%定义飞控信号一个周期内跳频次数
freq_num=2*num;%定义干扰机可调频宽度
f=1:1:freq_num;%定义干扰机的调频次序
samp_freq=1000;%设置干扰机采样/调频频率
samp_t=100;%设置干扰机最大采样时间
max=samp_freq*samp_t;%最大采样次数

f_simu=zeros(max,1);%设置干扰机信号频率矩阵
f_real=zeros(max,1);%设置无人机飞控信号频率矩阵

j=1;%初始化迭代器
T=floor(num*samp_freq/freq);%一个飞控信号周期的采样次数
T0=floor(samp_freq/freq);%一次跳频区间的采样次数

T_simu=0;%初始化干扰机探测的飞控信号周期频率
T_f=0;%初始化干扰机探测周期时候的参考频率
T_index1=0;%初始化干扰机探测飞控信号周期的开始标记
T_index2=0;%初始化干扰机探测飞控信号周期的结束标记

nack_count=0;%初始化发出NACK信号次数
nack_index=1;%初始化NACK信号的位置
nack_freq=0;%初始化发出NACK信号时候的频率

f_real(1)=f_raw(phase+1/samp_freq);
if (ifmatch(f(1+mod(j,freq_num)),f_real(1)))  %设置第一点的相关数据
    T_f=f(1+mod(j,freq_num));
    f_simu(1)=T_f;
    nack_count=nack_count+1;
    nack_index=1;
    nack_freq=f_simu(1);
end
if(~T_f)%当干扰机探测周期时候的参考频率为0的时候才对迭代器+1
    j=j+1;
end

for i=2:1:max
    f_real(i)=f_raw(phase+i/samp_freq);%设置实际飞控信号根据采样频率采样
    
    if (T_simu<=0)%在未求出飞控信号周期的情况下:
        
        f_simu(i)=T_f;%令模拟信号频率等于干扰机探测周期时候的参考频率
        if (ifmatch(f(1+mod(j,freq_num)),f_real(i)))  %如果调频正确
            if(~T_f)%当干扰机探测周期时候的参考频率为0的时候
                T_f=f(1+mod(j,freq_num));
                f_simu(i)=T_f;
            end
            
            continue;
            
        elseif (ifmatch(f_simu(i-1),f_real(i-1)))%当采样点的上一点的频率匹配但这一点不匹配的时候:
            
            if (T_index1==0)%如果干扰机探测飞控信号周期的开始标记还未设置,则先设置开始标记
                T_index1=i-1;
                
            else
                T_index2=i-1;%设置干扰机探测飞控信号周期的结束标记
            end
            
        end
        
        if(~T_f)%当干扰机探测周期时候的参考频率为0的时候
            j=j+1;
        end
        
        T_simu=T_index2-T_index1-1;%根据干扰机探测飞控信号周期的开始、结束标记来推断飞控信号一个周期的采样点数
        
    else%在求出了飞控信号一个周期采样次数之后
        
        if (f_simu(i)==0)%当干扰机模拟频率为空的时候
            if (ifmatch(f_simu(i-1),f_real(i)))  %如果上一点的频率依旧匹配当前实际飞控信号频率,则继续延续上点信号频率
            
                f_simu(i)=f_simu(i-1);
                
                if(i+T_simu<=max)%令下一个周期的该点都为该频率
                    f_simu(i+T_simu)=f_simu(i);
                end
                
                if (ifsos(i,f_simu(i)))%检测SOS信号
                    break;
                end
            
                continue;
                
            end
            if (ifmatch(f(1+mod(j,freq_num)),f_real(i)))  %如果调频正确
                f_simu(i)=f(1+mod(j,freq_num));
            
                if (ifsos(i,f_simu(i)))%检测SOS信号
                    break;
                end
            
                if(i+T_simu<=max)%令下一个周期的该点都为该频率
                    f_simu(i+T_simu)=f_simu(i);
                end
                
                continue;
                
            else
                j=j+1;%如果失败,则调整干扰机频率
            end
        else
            if (ifmatch(f_simu(i),f_real(i)))  %验证推算的信号频率是否与实际相符
            
                if (ifsos(i,f_simu(i)))%检测SOS信号
                    break;
                end
                if(i+T_simu<=max)%如果相符合,将下个周期的该点频率调为当前频率
                    f_simu(i+T_simu)=f_simu(i);
                end
                continue;
            else
                f_simu(i)=f_simu(i-1);
            end
        end
    end
end


fileID = fopen('data_t22.txt','a');
fprintf(fileID,'%d\r\n',nack_index/samp_freq);
fclose(fileID);

%{
plot(f_simu(nack_index-T:nack_index));hold on;
plot(f_real(nack_index-T:nack_index));hold off;
title(['周期未知的情况下,干扰机跳频频率为',num2str(samp_freq),'时的反制频率和飞控信号对比图']);
xlabel('发出SOS的时周期内的采样次数');
ylabel('频率');
axis square;
legend({'干扰机模拟信号频率','飞控信号实际频率'},'Location','southeast')

disp(['反制成功所花费的时间为:',num2str(nack_index/samp_freq)]);
%}
function f=f_raw(t)%无人机在t时刻的飞控信号频率
global raw;
global freq;
global num;

t=mod(t,(num/freq));
index=floor(t*freq);
f=raw(index+1);
end

function NACK=ifmatch(f,f_raw)%构造发出NACK信号的函数
if (f==f_raw)
    NACK=1;
else
    NACK=0;
end
end

function sos=ifsos(i,f_simu)%构造发出SOS信号函数
global nack_count;
global nack_freq;
global nack_index;
global num;
global T0;

sos=0;

if (nack_freq==0)
    nack_freq=f_simu;
end

if (f_simu~=nack_freq)
    if(i-nack_index>=T0)
        nack_count=0;
        nack_index=i;
    else
        nack_count=nack_count+1;
        nack_index=i;
        nack_freq=f_simu;
    end
else
    nack_index=i;
end
if (nack_count==num)
    sos=1;
end
end
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服