糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > MATLAB读取国际电离层参考模型(IRI) 数据 绘制TEC网格

MATLAB读取国际电离层参考模型(IRI) 数据 绘制TEC网格

时间:2020-12-07 02:01:30

相关推荐

MATLAB读取国际电离层参考模型(IRI) 数据 绘制TEC网格

文章目录

前言一、IRI模型二、使用步骤1.代码下载2.代码修改3.代码完善完整代码链接4.读取数据说明

前言

最近导师安排的工作需要使用 IRI 模型提供的TEC(单位面积总电子含量)数据,从而计算电离层延时,在此记录一下MATLAB读取数据的过程

图1 -8-4 12:00 TEC网格数据

一、IRI模型

对于给定的位置,时间和日期,国际参考电离层(IRI)可以提供电离层高度范围内电子密度,电子温度,离子温度和离子组成的月平均值,官方网站链接: IRI官网

IRI数据可以在线查询,链接: 在线数据,然而想要大批量读取数据,很明显效率太低。

官方提供了使用Fortran,Python和MATLAB读取数据的代码,Fortran了解太少,因此选择使用MATLAB。MATLAB版本是实时读取IRI网页数据并进行处理保存,因此需要联网使用。

然而官方提供的matlab代码并不能运行,因此需要进行修改和完善。

二、使用步骤

1.代码下载

官方MATLAB代码链接:代码

下载代码后,需要网络传输工具-curl来实时读取数据。

在curl工具下载,而后将bin目录下的curl.exe复制到与代码相同路径下。

2.代码修改

iritest.m给出了运行示例,默认参数配置如下

可以看到,调用iri函数,读取网页数据。

运行代码,报错,信息如下:

iri函数1124行出现数据越界,该行代码如下:

data = sscanf(result(newlines(246)+1 : newlines(246 + sweeplen)-1), '%f');

对代码进行分析,result变量里存储了根据输入参数(日期,经纬度等)获取的临时网页数据,newlines里存储了网页数据里换行符 ‘\n’ 的位置。

该行代码目的是从临时网页数据里,读取查询到的数据(数据前面有一些说明语句,并不需要)

报错原因是:网页格式发生了变动,因此提取数据出错。对result数据分析,可以看到截至-8-5,网页数据是从第142行开始,因此将1124行改为

data = sscanf(result(newlines(142)+1 : newlines(142 + sweeplen)-1), '%f');

并且1115行改为

if length(newlines) < 142

即可运行。

3.代码完善

修改后代码可以运行,然而大量读取数据时,会出现读取数据过于频繁,网页返回数据为空,具体表现如下:

这个问题比较烦人,因为总是会在读取一段时间后出现网页读取过于频繁的现象。

为了解决这个问题,我对iri函数进行了修改,增加了网页读取成功的标志,每次出现读取频繁时,返回读取失败标志,进行重新读取,直至成功,这样便可以满足大规模读取数据的需求了。

修改方式:修改iri函数里的parseresult子函数,增加有效标志,并对所有使用到parseresult的地方进行修改,并为iri添加读取有效标志,方便再顶层里调用。

完整代码链接

修改后的所有代码见以下链接:

链接:/s/1261vWxFjM4DLRqUdryMA_w

提取码:ce5n

打开文件夹,直接运行iritest即可

4.读取数据说明

在iritest文件里,调用iri函数,返回N*M的数据矩阵,

N是查询数据的维度,比如我一次查询361个经度的数据,则N=361.

M是数据维度,共44列,详细说明见iri.m里的说明,如下:

我所需要的TEC数据位于第13列,然而返回的数据,第13列全是-1.

对代码进行分析,发现要想读取TEC数据,需要给出要读取的TEC高度阈值,因为TEC数据是对电子密度数据在不同高度上的积分,因此在不输入高度上限的时候,无法给出TEC数据。

iri函数输入的第12个参数tec_hmax,是TEC上限,该值需要位于50至2000(单位 km)之间才有效:

因此,在调用iri函数的时候,给入tec_hmax数据,即可避免返回数据全是-1的情况

到此,使用MATLAB读取数据任务完成。

这里给出高度100km时,全球电子密度Ne读取结果:

有任何问题,欢迎讨论。

如果觉得《MATLAB读取国际电离层参考模型(IRI) 数据 绘制TEC网格》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。