基于gprMax以及Matlab仿真的SFCW雷达信号处理笔记

该文介绍了一种针对gprMax在SFCW雷达信号仿真中限制的解决方案,利用冲激响应法提高仿真效率。通过将SFCW信号分解为多个单频信号,在gprMax中仿真每个频率的冲激响应,然后在Matlab中进行卷积计算得到回波模型。文章详细阐述了SFCW信号的数学表示,以及如何通过I和Q分量提取距离信息。此外,还讨论了gprMax的参数设置和波形配置,以减少噪声并优化仿真效果。
摘要由CSDN通过智能技术生成

基于gprMax以及Matlab仿真的SFCW雷达信号处理笔记

GitHub仓库传送门

本人为初学者,且不常使用CSDN,如遇到问题可发送邮件至2538703415@qq.com讨论,这样我能及时看见,但不一定能帮你解决……

当前使用gprMax进行探地雷达仿真主要存在以下两个问题,它们分别是:

  • gprMax无法直接对一段完整的SFCW信号进行仿真,若要通过gprMax直接实现SFCW信号的回波仿真,则要将一段完整的SFCW信号拆分成若干段频率单一的余弦信号分别进行仿真,对于拥有上百个频点的SFCW信号而言,需要进行上百次单独的仿真。
  • 使用自定义波形或gprMax内置波形进行仿真时,仿真速度偏低且灵活性差,每次在用户需要更改波形时,都要重新开始仿真

对于提到的这些问题,包括gprMax开发团队在内的很多研究团体都得出了一些解决方案,这份readme文档将对这些解决方案进行归纳总结。这一仓库中的代码最终实现如下结果:

图一:gprMax模型

图一:gprMax模型

在这里插入图片描述

图二:Matlab仿真结果

根目录文件文件作用
main.m运行此文件,执行matlab仿真
simu_single_step.m运行此文件,执行matlab仿真(无图)
result.mat对应bscan_impulse_merged.out的仿真结果
result_10m.mat对应bscan_impulse_merged_10m.out的仿真结果
impulse_lib文件夹文件作用
bscan_impulse_10m_merged.out对应bscan_impulse_10m.in的bscan冲激响应输出结果
bscan_impulse_merged.out对应bscan_impulse.in的bscan冲激响应输出结果
gprMax_source文件夹文件作用
sfcw_impulse.in模型1的输入文件,可用于生成vti,对应bscan子文件夹中的bscan_impulse.in
sfcw_impulse_10m.in模型2的输入文件,可用于生成vti,对应bscan子文件夹中的bscan_impulse_10m.in
impulse_response_10m.vti模型2(对应图一)的vti文件

冲激响应法求解回波模型

为了解决gprMax仿真灵活性差,耗时长的问题,可以采用信号与系统中的基础知识,通过将模拟场景视为一个线性时不变系统(LTI system),将输入信号(也就是用户自定义的发射信号)与这一LTI系统的冲激响应h(t)相卷积,从而得到对应于输入信号的模拟场景回波信号。

在这里插入图片描述

图三:冲激响应计算y(t)

在通过一次仿真求得系统的冲激响应之后,用户只需要在matlab中将输入信号与此冲激响应相卷积,就可以得到对应的回波模型。gprMax提供了冲激信号波形(impulse),但是没有在对应的参考文献中列出,此波形可以直接使用,在使用时,其他波形对应的中心频率项对impulse波形不再生效(毕竟冲激信号只有tn=0时有值)。

具体的操作方法不在此处详细列出,对应的生成系统冲激响应的文件在github中可以查看。

这一部分的具体操作可参考:

  • https://blog.csdn.net/l_jsaphsj/article/details/127530336?spm=1001.2014.3001.5501
  • https://www.youtube.com/watch?v=_FWNeqTr9nc&t=1387s (gprMax官方)

SFCW信号回波的仿真(gprMax & Matlab)

SFCW雷达每次发射和接收的信号为单频连续波信号,其频率变化可表示为:
f n = f 0 + ( n − 1 ) Δ f f_n = f_0 + (n-1)\Delta f fn=f0+(n1)Δf
其中 f n f_n fn 是当前(第n个)频率, f 0 f_0 f0 是起始频率, Δ f \Delta f Δf 为频率步长。

发射信号可以被表示为:
T x ( n ) = s i n ( 2 π f n t ) T_x(n) = sin(2\pi f_nt) Tx(n)=sin(2πfnt)
其中n为第n个频点。

假设信号在均匀介质中的传播速度为 v v v ,则一个距离目标为 R R R 的物体所反射的回波信号可以表示为:
R x ( n ) = A n s i n [ 2 π f n ( t − 2 R v ) ] R_x(n) = A_nsin[2\pi f_n(t - \frac{2R}{v})] Rx(n)=Ansin[2πfn(tv2R)]
其中 A n A_n An 为回波幅度, 2 R v \frac{2R}{v} v2R 是信号的双程走时。

第n个频率的相位变化可对应表示为:
Φ n = 2 π f n 2 R v \Phi_n = 2\pi f_n\frac{2R}{v} Φn=2πfnv2R
接收到的回波信号由此可以表示为:
R x ( n ) = A n s i n ( 2 π f n t − Φ n ) R_x(n) = A_nsin(2\pi f_nt - \Phi_n) Rx(n)=Ansin(2πfntΦn)

不同的频点对应着不同的相移,这些相位信息对于特定的某个频点而言是一个常数,但是将SFCW信号中的几十至几百甚至更多频点的相位信息结合之后,能够得到一个具有周期性的相位信号,将这个信号进行ifft变换,即可得到对应于距离的时域信息。

在这里插入图片描述

图四:雷达系统框图

图四中的I和Q分量可通过如下公式进行计算:

I n = A n s i n ( 2 π f n t − Φ n ) ∗ s i n ( 2 π f n t ) = A n 2 s i n ( 4 π f n t − Φ n ) − A n 2 c o s ( Φ n ) I_n = A_nsin(2\pi f_nt-\Phi_n)*sin(2\pi f_nt) = \frac{An}{2}sin(4\pi f_nt-\Phi_n) - \frac{A_n}{2}cos(\Phi_n) In=Ansin(2πfntΦn)sin(2πfnt)=2Ansin(4πfntΦn)2Ancos(Φn)
I n = A n s i n ( 2 π f n t − Φ n ) ∗ c o s ( 2 π f n t ) = A n 2 s i n ( 4 π f n t − Φ n ) − A n 2 s i n ( Φ n ) I_n = A_nsin(2\pi f_nt-\Phi_n)*cos(2\pi f_nt) = \frac{An}{2}sin(4\pi f_nt-\Phi_n) - \frac{A_n}{2}sin(\Phi_n) In=Ansin(2πfntΦn)cos(2πfnt)=2Ansin(4πfntΦn)2Ansin(Φn)

在通过低通滤波器之后,可以提取出I和Q对应的差频分量为:
I n = − A n 2 c o s ( Φ n ) I_n = -\frac{A_n}{2}cos(\Phi_n) In=2Ancos(Φn)
Q n = − A n 2 s i n ( Φ n ) Q_n = -\frac{A_n}{2}sin(\Phi_n) Qn=2Ansin(Φn)

注意在经过LPF之后需要对两部分差频分量进行组合,即输入ADC的信号应当为如下形式:
A D C i n ( n ) = I n + j Q n ADC_{in}(n) = I_n + jQ_n ADCin(n)=In+jQn

对于经过IFFT处理后得到的时域信号,其横坐标轴的长度由ADC采样点数决定,其横坐标轴的精度由SFCW信号的带宽决定,设SFCW信号的带宽为 B B B ,则其横坐标轴可表示为:
t = 0 : 1 B : N t − 1 B t = 0:\frac{1}{B}:\frac{N_t-1}{B} t=0:B1:BNt1
其中 N t N_t Nt是ADC采样点数。


gprMax生成模型时的注意事项

本人设计的in文件中,包含一项time_step_stability_factor参数,这一参数的具体用法可以参考官方文件,其作用主要是将dt进行手动调整(比如设置为1e-11s)。设置这一参数的主要目的是使gprMax中的dt和Matlab中的采样时间间隔dt相同,以方便仿真(两个dt不相同会怎样这个我也没试过,应该也行问题不大)。

gprMax中网格步长参数的设置

根据官方给出的文档,gprmax模型中的网格步长不能大于模型介质中最短波长的十分之一,即:
c a l c d x y z ≤ 1 10 c f m a x ϵ m a x calc_{dxyz} \leq \frac{1}{10}\frac{c}{f_{max}\sqrt{\epsilon_{max}}} calcdxyz101fmaxϵmax c

这项参数的最大值可以通过func文件夹中的calc_dxyz函数进行快速计算。

拆分后的单频率信号波形设置

在使用冲激响应方法,通过卷积获得输出信号波形时,如果直接输入一个完整的单频正弦信号,会导致卷积结果中包含大量高频噪声,因此,在设置输入的单频正弦信号时,需要逐渐提升信号幅值,其信号波形如下所示:

在这里插入图片描述

图五:单频余弦信号

图五所示的信号在gprMax中对应的波形名称为contsine,其公式如下所示:

T x ( t ) = { k f n t s i n ( 2 π f n t ) k f n t < 1 s i n ( 2 π f n t ) k f n t ≥ 1 T_x(t) = \begin{cases} kf_ntsin(2\pi f_nt) & kf_nt <1\\ \\ sin(2\pi f_nt) & kf_nt \geq 1 \end{cases} Tx(t)= kfntsin(2πfnt)sin(2πfnt)kfnt<1kfnt1

在gprMax的waveforms.py中, k = 0.25 k = 0.25 k=0.25

gprMax是一个用于地质雷达(GPR)模拟的开源软件。它使用Matlab平台进行操作和分析。GPRMax的输出文件是以.h5或.hdf5格式存储的,这种格式的文件通常不被普通软件直接读取。因此,在Matlab中可以使用一些函数来读取和解释gprMax的输出文件。其中常用的函数包括hdf5read、h5read、h5info和h5disp。这些函数可以帮助你读取并理解out文件的内容和结构。 你可以参考一些资源,如文章《Matlab 读取 gprmax 的 out 文件规律详细解释》和视频教程《gprMax官方:SFCW信号回波的仿真gprMax & Matlab)》,*** 在你设计的in文件中,可能包含一个名为time_step_stability_factor的参数。这个参数的具体用法可以在gprMax的官方文件中找到。它的作用是手动调整dt(采样时间间隔)的大小,以使gprMax中的dt与Matlab中的采样时间间隔dt相同,从而方便进行仿真。如果两个dt不相同,可能会对仿真结果产生一些影响,所以你可以根据需要设置这个参数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Matlab 读取 gprmax 的 out 文件详细解释](https://blog.csdn.net/Neverlevsun/article/details/121332173)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [基于gprMax以及Matlab仿真SFCW雷达信号处理笔记](https://blog.csdn.net/l_jsaphsj/article/details/129926946)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值