文末贴源码链接

需求:已知接收机IQ数据,根据IQ数据做互相关,求信号时差,最终通过TDOA(Chan算法)定位发射机坐标。输入输出坐标均为经纬度坐标,而在TDOA计算中,需要笛卡尔坐标系坐标,涉及坐标转换问题。

头文件:一共包含4个算法

/***************************************************************
TDOA算法1:
****************************************************************///场强超过阈值记录时间戳
struct INPUT
{double jcdwz[2];//经纬度double time;//时间戳double* cq;//场强数组int cqLen;//场强数组的长度int deviceId;//设备ID,只能是1,2,3,4double threshold;//阈值double delay[4] = { 0,0,0,0 };//四个接收站同步延迟,无延迟则全部输入0,单位:纳秒
}input;//场强超过阈值记录时间戳,直到记录了4台设备开始TDOA计算
//输出
//int flag;//0表示没有计算,1表示可以读取TDOA结果
//double max;//最大场强值
//double llOutput[2];//TDOA定位结果
void Fun_TDOA(INPUT input, int* flag, int* max, double* llOutput);/***************************************************************
TDOA算法2:反向求时间差,为算法1提供仿真数据
****************************************************************///仿真输入结构体,针对Fun_TDOA的仿真
struct INPUT_Simulation
{double BS[2];//接收站经度、纬度,单位:度、度double S[2];//发射站的经度、纬度
}input_simulation;
//北京位于东经115.7°—117.4°,北纬39.4°—41.6°
//        经度   纬度      Fun_TDOA_Simulation计算结果
//发射站:116.25 39.54
//接收站1:116   39        274949
//接收站2:117   40        356044
//接收站3:116   40        240672
//接收站4:117   39        380055
double Fun_TDOA_Simulation(INPUT_Simulation input_simulation);/***************************************************************
TDOA算法3:
****************************************************************///4路IQ同时输入
struct INPUT4IQ
{double jcdwz1[2];//经纬度double *I1;//I数据double *Q1;//Q数据double fs1;//IQ采样频率double jcdwz2[2];double *I2;double *Q2;double fs2;double jcdwz3[2];double *I3;double *Q3;double fs3;double jcdwz4[2];double *I4;double *Q4;double fs4;int len;//IQ数据长度
}input4IQ;//4路IQ同时输入
//输出
//double llOutput[2];//TDOA定位结果
void Fun_TDOA_Input4IQ(INPUT4IQ input4IQ, double* llOutput);/***************************************************************
TDOA算法4:
****************************************************************///每次输入1路IQ,在完成一次TDOA前保证输入的len都一样
struct INPUT1IQ
{double jcdwz[2];//经纬度double *I;//I数据double *Q;//Q数据double fs;//IQ采样频率int deviceId;//设备ID,只能是1,2,3,4int len;//IQ数据长度
}input1IQ;//每次输入1路IQ,直到记录了4台不同设备的IQ数据开始TDOA计算
//输出
//int flag;//0表示没有计算,1表示可以读取TDOA结果
//double llOutput[2];//TDOA定位结果
void Fun_TDOA_Input1IQ(INPUT1IQ input1IQ, int* flag, double* llOutput);

算法1:给定时间戳,直接计算TDOA

执行流程:主函数反复调用算法1,每次输入一台设备的数据,数据中有一组场强值,如果该场强值中有超过指定阈值的值,则记录该设备的坐标和时间戳。直到记录了4台不同设备的数据,开始执行TDOA定位。最后输出定位结果,即定位的发射机的坐标(涉及经纬度与笛卡尔坐标系转换问题)。(为什么要输入场强值?项目需要,其实直接给4个时间戳就能做TDOA)

注:理论上3台设备的时间戳就能实现TDOA,此处用4台,因为一开始想做经纬高,三维空间定位,但高度的定位上存在问题,就去掉了这个功能,但保留4台设备,以提高经纬度定位的精度。TDOA定位中使用了Chan算法。

算法2:反向求时间戳,为算法1提供仿真数据

算法3、算法4:算法3与算法4的唯一区别在于一次输入4路IQ数据,还是一次输入1路IQ数据。与算法1的区别在于,获取时间戳(或时间差)的方式不同,但最终目的都是获取时间戳(或时间差)计算TDOA。

4路IQ数据两两做互相关,计算时间差:

function [time_delay] = calculate_delay(I1,Q1,I2,Q2,fs1,fs2,len)
%#codegencurrFs=fs1;%重新采样%fs0 是重采样的频率fs0=10000000;%限制最长长度,防止因为采样频率增加导致内存不足targetLen=10000000;if fs0 > fs1 && fs0 > fs2IQ1L=ceil(targetLen*fs1/fs0);IQ2L=ceil(targetLen*fs2/fs0);if IQ1L < 500IQ1L=500;endif IQ2L < 500IQ2L=500;endif IQ1L > lenIQ1L=len;endif IQ2L > lenIQ2L=len;end%从fs1变为fs0I1_resample=resample(I1(1:IQ1L),fs0,fs1);Q1_resample=resample(Q1(1:IQ1L),fs0,fs1);%从fs2变为fs0I2_resample=resample(I2(1:IQ2L),fs0,fs2);Q2_resample=resample(Q2(1:IQ2L),fs0,fs2);currFs=fs0;%统一为大的采样频率elseif fs1 > fs2IQ2L=ceil(targetLen*fs2/fs1);if IQ2L < 500IQ2L=500;endif IQ2L > lenIQ2L=len;endI2_resample=resample(I2(1:IQ2L),fs1,fs2);Q2_resample=resample(Q2(1:IQ2L),fs1,fs2);I1_resample=I1;Q1_resample=Q1;currFs=fs1;elseif fs2 > fs1IQ1L=ceil(targetLen*fs1/fs2);if IQ1L < 500IQ1L=500;endif IQ1L > lenIQ1L=len;endI1_resample=resample(I1(1:IQ1L),fs2,fs1);Q1_resample=resample(Q1(1:IQ1L),fs2,fs1);I2_resample=I2;Q2_resample=Q2;currFs=fs2;elseI1_resample=I1;Q1_resample=Q1;I2_resample=I2;Q2_resample=Q2;endlen=min(length(I1_resample),length(I2_resample));I1_computer=I1_resample(1:len);Q1_computer=Q1_resample(1:len);I2_computer=I2_resample(1:len);Q2_computer=Q2_resample(1:len);%I互相关[delay1,zuobiao1]=xcorr(I1_computer,I2_computer);time_delay1=max(zuobiao1(delay1==max(delay1)));%Q互相关[delay2,zuobiao2]=xcorr(Q1_computer,Q2_computer);time_delay2=max(zuobiao2(delay2==max(delay2)));%平均延迟time_delay=((time_delay1+time_delay2)/2)*(1/currFs)*10e8;end

互相关的计算先由MATLAB实现,在由MATLAB Coder转成C++代码。

MATLAB R2017a的Coder工具使用实例-m语言转C++在linux Qt下运行(之一)_山中云客的博客-CSDN博客https://blog.csdn.net/hustcxl/article/details/81137287?spm=1001.2014.3001.5506该互相关代码,考虑了:

1、两路IQ数据采样频率不相同,无法直接做互相关

2、两路IQ数据采样频率过低,最终求得的时差精度低

3、重采样后数据长度过长、或长度不统一

等重采样情况。

源码链接:

用C/C++实现输入IQ数据,计算时差(IQ数据互相关),完成TDOA定位(Chan算法)-C++文档类资源-CSDN文库https://download.csdn.net/download/qq_39291503/85508381

用C/C++实现输入IQ数据,计算时差(IQ数据互相关),完成TDOA定位(Chan算法)相关推荐

  1. python抓主力资金_【邢不行|量化小讲堂系列09-Python量化入门】通过逐笔数据计算主力资金流数据...

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. [历史文章汇总]请点击此处 [必读文章]EOS期现 ...

  2. 【邢不行|量化小讲堂系列09-Python量化入门】通过逐笔数据计算主力资金流数据

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. [历史文章汇总]请点击此处 [必读文章]EOS期现 ...

  3. hive经典面试题4--如何用分时数据计算分时累计数据?如何在分时累计数据为空的时候去补全数据?

    背景: 在互联网公司经常会用每10分钟为维度去统计某一个指标,这种统计我们称为分时数据.例如10分钟内某个渠道的安装数据,通过这个数据可以实时查看这个渠道质量好坏,如果这个渠道质量不行,那么就停止投放 ...

  4. [大数据计算基础] 大数据计算系统

    大数据计算系统 大数据计算框架的几个要素 : • 计算场景: 适用于何种任务使用? • 抽象:程序员看到的框架是什么样的? • API:程序员如何使用框架? • 系统架构:系统有哪些模块? • 基本数 ...

  5. 【云计算与大数据计算】大数据物理、集成、安全架构及阿里云飞天系统架构讲解(超详细)

    一.物理架构 物理架构 - 企业大数据系统的各层次系统最终要部署到主机节点中,这些节点通过网络连接成 为一个整体,为企业的大数据应用提供物理支撑 ,企业大数据系统由多个逻辑层组成,多个逻辑层可以映射到 ...

  6. asp 取数据 计算_地学数据 | 地理空间数据获取方式汇总

    1.测绘地理信息局会 (http://www.webmap.cn/main.do?method=index) 该网站提供:30米全球地表覆盖数据,GlobeLand30能够提供包括:地理位置.分布范围 ...

  7. python大数据计算_大数据计算平台 python

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  8. 从0到1搭建大数据平台之数据计算

    文章目录 前言 一.传统的数据计算 二.Hadoop的崛起 三.离线计算 MapReduce Hive SparkSQL 四. 实时计算 Spark Streaming Flink 总结 前言 大家好 ...

  9. 中用BBP公式计算_【真课堂】7年级信息技术:数据计算

    教师介绍: 汪小红,一级教师,滨江区科技节scratch项目优秀指导教师,曾获杭州市信息技术优质课二等奖. [教材分析] 数据计算是数据处理过程中的一个重要步骤,数据计算能对数据进行归纳和提炼.学生已 ...

最新文章

  1. Linux服务器搭建常用环境(一)
  2. 技术图文:排序技术在求解算法题中的应用
  3. 软件项目管理0716:责任分工明确
  4. Python使用远程仓库时建议忽略的文件
  5. 微信重大更新!这特么是为上班摸鱼开发的吧.....(附内测地址)
  6. GNU (内部)make函数
  7. 【初窥javascript奥秘之闭包】叶大侠病都好了,求不踩了:)
  8. Java集合中removeIf的使用
  9. 机器学习 来源框架_机器学习的秘密来源:策展
  10. 在 SQLite3 中使用回调函数
  11. 干掉Dubbo !这个后端开发框架就是王者!
  12. IDC:无线数字化转型持续进行 第二季度全球企业WLAN市场强劲增长
  13. POJ3414(BFS+[手写队列])
  14. RIDE的底部的日志没显示处理
  15. python爬取链家_Python爬取链家北京二手房数据
  16. html文件恢复工具,小飞文件恢复工具
  17. help用法总结(基于材料:“老托福听力93篇”)
  18. 两化融合资质认证流程
  19. Basic4IOS (B4I) New Version Crack
  20. 客户说我已经有合作伙伴了 电话销售如何回应

热门文章

  1. 时空幻境的体验分析:基于机制
  2. stm32-esp8266驱动程序
  3. 精彩实录 | POW'ER 2020 DEFI 创新者大会首日,DeFi创新领袖都聊了啥?
  4. 有趣的动态规划题目(一)
  5. SAP MM 采购预付款管理初探
  6. 环境工程大学生简历模板
  7. 高德地图 ——获取定位信息
  8. 反病毒工具-火绒剑 博客
  9. 网络安全等级保护测评——岗位职责、权限划分设计思路(三权分立)
  10. python NLTK识别字符串中的人名等,命名实体识别