基于Matlab实现突发信号位置检测算法ERD

简介: 基于Matlab实现突发信号位置检测算法ERD

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

Blind signal detection is very important in various applications such as cognitive radio, spectrum surveillance, and eavesdropping. This gets trickier when one needs to deal with burst signals (as opposed to continuously transmitted signals) in non-cooperative environments. Here, existing methods for signal detection are studied and developed to use for burst detection.For the special case of downlink time division multiple access (TDMA) burst transmission, performances of these detection methods are improved by proposing a blind synchronisation algorithm which is applied to the output result of detection algorithms. The results of Monte–Carlo simulations demonstrate the performance of the proposed detection and synchronisation algorithms.

⛄ 完整代码

clc;

clear;

close all

%% 产生噪声与信号源

code_fre = 1e6; %信号载波频率

fs = 10e6; %采样频率

sample_t = 1/fs;%采样间隔

length_all = 400;%仿真信号总长度(符号数量)

noise_std = 1;%噪声方差

%snr = 0;%信噪比

burst_length = 30; %每个突发信号的长度

Ncoh = (fs / code_fre)*burst_length;%一个积分清除时间内的采样点数

dot_length = [1:Ncoh];

burst_num = 5; %突发信号个数

burst_err = zeros(100,10);

guard_err = zeros(100,10);

for t = 1:100

   for l = 1:10

       snr = -1+l;

       position = zeros(1,burst_num);

       position(1) = 10+randperm(50,1);%返回1个[1,50]的数

       for i=2:burst_num

           position(i) = position(i-1)+30+randperm(50,1);%出现信号的起始位置

       end

       

       burst_code = zeros(burst_num,burst_length);

       burst_code_sampled = zeros(burst_num,burst_length*fs/code_fre);

       for i = 1:burst_num

           burst_code(i,:) = -2*randi([0,1],[1,burst_length])+1;

           sampled = repmat(burst_code(i,:),fs/code_fre,1);%将burst_code(i,:)复制

           burst_code_sampled(i,:) = reshape(sampled,1,burst_length*fs/code_fre);

       end

       noise = noise_std*rand(1,length_all*fs/code_fre);%噪声

       carrier = cos(2*pi*(code_fre)*dot_length*sample_t);%初始载波信号

       err = zeros(1,13);

   

       signal_amplitude = sqrt(10^(snr/10)*(noise_std^2*2));%根据信噪比扩大幅值


       signal_burst = zeros(burst_num,burst_length*fs/code_fre);

       for j=1:burst_num

           signal_burst(j,:) = signal_amplitude*burst_code_sampled(j,:).* carrier;

   

       end

       receive_signal = noise;


       num = length_all*fs/code_fre;

       wdd = zeros(1,num); %记录正确判决结果

       for i=1:burst_num

           receive_signal(position(i)*fs/code_fre:position(i)*fs/code_fre+burst_length*fs/code_fre-1) = signal_burst(i,:)+receive_signal(position(i)*fs/code_fre:position(i)*fs/code_fre+burst_length*fs/code_fre-1);

           wdd(position(i)*fs/code_fre:position(i)*fs/code_fre+burst_length*fs/code_fre-1) = ones(1,burst_length*fs/code_fre);

       end

       receive_signal = receive_signal/(max(abs(receive_signal)));%将输入数据归一化


%% ERD算法

       slide_length = 20;


       ERs = zeros(1,num);

       ERe = zeros(1,num);

       threshold = abs((1+3*10^(snr/10))*0.5);

       for j = slide_length+1:num-slide_length+1

           w1_pos = j;

           w2_pos = j-slide_length;

           w1 = sum(abs(receive_signal(w1_pos:w1_pos+slide_length-1)).^2);

           w2 = sum(abs(receive_signal(w2_pos:w2_pos+slide_length-1)).^2);

           ERs(j) = w1/w2;

           ERe(j) = w2/w1;    

       end


       ERs_threshold = ERs;

       ERe_threshold = ERe;

       for i = 1:num

           if ERs(i)<threshold

               ERs_threshold(i) = 0;

           end

           if ERe(i)<threshold

               ERe_threshold(i) = 0;

           end    

       end

       ERs_new = zeros(1,num);

       ERe_new = zeros(1,num);


%% 检测输出  窗口内取 ERs和ERe的最大值

       for i = slide_length+1:num+1

           [ERs_max,ERs_pos] = max(ERs_threshold(i-slide_length:i-1));

           ERs_threshold(i-slide_length:i-1)=0;

           ERs_threshold(i-slide_length+ERs_pos-1)=ERs_max;

           [ERe_max,ERe_pos] = max(ERe_threshold(i-slide_length:i-1));

           ERe_threshold(i-slide_length:i-1)=0;

           ERe_threshold(i-slide_length+ERe_pos-1)=ERe_max;

       end

       ERs_new = ERs_threshold>0;

       ERe_new = ERe_threshold>0;

       ERs_index = find(ERs_new == 1);

       ERe_index = find(ERe_new == 1);

       wd1 = zeros(1,num);

       burst_data = [];

       for i = 1:length(ERe_index)

           k = length(ERs_index);

           for j=1: k

               if ERs_index(j)<ERe_index(i)

                   burst_data = [burst_data,ERs_index(j)];

               end

           end

       if length(burst_data)~=0

           [burst_min,burst_start] = min(ERe_index(i)-burst_data);

           wd1(burst_data(burst_start):ERe_index(i))=1; % 有信号的地方 标1

           ERs_index(find(ERs_index==burst_data(burst_start)))=[];% 删除

           burst_data = [];

       end

       end


%% 增加滑动窗口长度

slide_length = 100;

num = length_all*fs/code_fre;

ERs = zeros(1,num);

ERe = zeros(1,num);

threshold = abs((1+3*10^(snr/10))*0.5);

for j = slide_length+1:num-slide_length+1

   w1_pos = j;

   w2_pos = j-slide_length;

   w1 = sum(abs(receive_signal(w1_pos:w1_pos+slide_length-1)).^2);

   w2 = sum(abs(receive_signal(w2_pos:w2_pos+slide_length-1)).^2);

   ERs(j) = w1/w2;

   ERe(j) = w2/w1;    

end


ERs_threshold = ERs;

ERe_threshold = ERe;

for i = 1:num

   if ERs(i)<threshold

       ERs_threshold(i) = 0;

   end

   if ERe(i)<threshold

       ERe_threshold(i) = 0;

   end    

end

ERs_new = zeros(1,num);

ERe_new = zeros(1,num);


%% 检测输出

for i = slide_length+1:num+1

   [ERs_max,ERs_pos] = max(ERs_threshold(i-slide_length:i-1));

   ERs_threshold(i-slide_length:i-1)=0;

   ERs_threshold(i-slide_length+ERs_pos-1)=ERs_max;

   [ERe_max,ERe_pos] = max(ERe_threshold(i-slide_length:i-1));

   ERe_threshold(i-slide_length:i-1)=0;

   ERe_threshold(i-slide_length+ERe_pos-1)=ERe_max;

end

ERs_new = ERs_threshold>0;

ERe_new = ERe_threshold>0;

ERs_index = find(ERs_new == 1);

ERe_index = find(ERe_new == 1);

wd2 = zeros(1,num);

burst_data = [];

for i = 1:length(ERe_index)

  k = length(ERs_index);

  for j=1: k

      if ERs_index(j)<ERe_index(i)

          burst_data = [burst_data,ERs_index(j)];

      end

  end

  if length(burst_data)~=0

      [burst_min,burst_start] = min(ERe_index(i)-burst_data);

      wd2(burst_data(burst_start):ERe_index(i))=1;

      ERs_index(find(ERs_index==burst_data(burst_start)))=[];

      burst_data = [];

  end

end

wd = wd1.*wd2; % 综合判决,就是都为1时,即为窗口信号

err(1,l) = sum(wd~=wdd);

burst_err(t,l) = (sum(wdd)-sum(wd&wdd))/sum(wdd);

guard_err(t,l) = (sum(~wdd)- sum(~wd&~wdd))/sum(~wdd);


end

end

X = 0:9;

%Y = mean(burst_err);

plot(X,mean(burst_err),'-O');


hold on;

plot(X,mean(guard_err),'-*')

legend('错误率','虚警率');

title('ERD算法的检测错误率和虚警率');

xlabel('SNR(dB)');

ylabel('概率p');

⛄ 运行结果

⛄ 参考文献

[1]赵丽华, 王鹏宇. 基于Matlab的非时域端点检测算法的实现与分析[J]. 科学技术与工程, 2010(35):4.

⛳️ 完整代码

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料


相关文章
|
1天前
|
传感器 算法
基于GA遗传算法的多机无源定位系统GDOP优化matlab仿真
本项目基于遗传算法(GA)优化多机无源定位系统的GDOP,使用MATLAB2022A进行仿真。通过遗传算法的选择、交叉和变异操作,迭代优化传感器配置,最小化GDOP值,提高定位精度。仿真输出包括GDOP优化结果、遗传算法收敛曲线及三维空间坐标点分布图。核心程序实现了染色体编码、适应度评估、遗传操作等关键步骤,最终展示优化后的传感器布局及其性能。
|
2天前
|
算法
基于小波变换和峰值搜索的光谱检测matlab仿真,带GUI界面
本程序基于小波变换和峰值搜索技术,实现光谱检测的MATLAB仿真,带有GUI界面。它能够对CO2、SO2、CO和CH4四种成分的比例进行分析和提取。程序在MATLAB 2022A版本下运行,通过小波分解、特征提取和峰值检测等步骤,有效识别光谱中的关键特征点。核心代码展示了光谱数据的处理流程,包括绘制原始光谱、导数光谱及标注峰值位置,并保存结果。该方法结合了小波变换的时频分析能力和峰值检测的敏锐性,适用于复杂信号的非平稳特性分析。
|
2天前
|
机器学习/深度学习 算法 安全
基于深度学习的路面裂缝检测算法matlab仿真
本项目基于YOLOv2算法实现高效的路面裂缝检测,使用Matlab 2022a开发。完整程序运行效果无水印,核心代码配有详细中文注释及操作视频。通过深度学习技术,将目标检测转化为回归问题,直接预测裂缝位置和类别,大幅提升检测效率与准确性。适用于实时检测任务,确保道路安全维护。 简介涵盖了算法理论、数据集准备、网络训练及检测过程,采用Darknet-19卷积神经网络结构,结合随机梯度下降算法进行训练。
|
3天前
|
算法 数据可视化 数据安全/隐私保护
一级倒立摆平衡控制系统MATLAB仿真,可显示倒立摆平衡动画,对比极点配置,线性二次型,PID,PI及PD五种算法
本课题基于MATLAB对一级倒立摆控制系统进行升级仿真,增加了PI、PD控制器,并对比了极点配置、线性二次型、PID、PI及PD五种算法的控制效果。通过GUI界面显示倒立摆动画和控制输出曲线,展示了不同控制器在偏转角和小车位移变化上的性能差异。理论部分介绍了倒立摆系统的力学模型,包括小车和杆的动力学方程。核心程序实现了不同控制算法的选择与仿真结果的可视化。
31 15
|
3天前
|
算法
基于SOA海鸥优化算法的三维曲面最高点搜索matlab仿真
本程序基于海鸥优化算法(SOA)进行三维曲面最高点搜索的MATLAB仿真,输出收敛曲线和搜索结果。使用MATLAB2022A版本运行,核心代码实现种群初始化、适应度计算、交叉变异等操作。SOA模拟海鸥觅食行为,通过搜索飞行、跟随飞行和掠食飞行三种策略高效探索解空间,找到全局最优解。
|
4天前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
5天前
|
机器学习/深度学习 数据采集 算法
基于GWO灰狼优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a,展示了时间序列预测算法的运行效果(无水印)。核心程序包含详细中文注释和操作视频。算法采用CNN-GRU-SAM网络,结合灰狼优化(GWO),通过卷积层提取局部特征、GRU处理长期依赖、自注意力机制捕捉全局特征,最终实现复杂非线性时间序列的高效预测。
|
6月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
272 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
6月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
138 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
6月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
162 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现

热门文章

最新文章