一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

GPU实现FX互相关鉴相的相位干涉仪测向系统及其鉴相方法与流程

2021-11-22 13:36:00 来源:中国专利 TAG:

gpu实现fx互相关鉴相的相位干涉仪测向系统及其鉴相方法
技术领域
1.本发明属于鉴相技术领域,具体涉及一种gpu(图形处理单元)实现fx互相关鉴相的相位干涉仪测向系统及其鉴相方法。


背景技术:

2.相位干涉仪测向法属于典型的比相法测向体制,信号相位的提取至关重要,不同的鉴相方式会有不同的鉴相准确度,最终会影响测向系统的测向结果,常用的鉴相方法有频域鉴相法,频域鉴相法又称为fx互相关鉴相法。
3.fx互相关鉴相法对两路信号进行时域抽样后,分别作离散傅里叶变换,得到相应的频域信号,对频移信号共轭相乘,取算术平均,求得两路频域信号的相关谱,找出相关谱的谱峰位置,该处的相位值即为两路信号的相位差。fx互相关鉴相算法能够最大限度的抑制噪声能量,减小噪声相位对信号的干扰,鉴相精度更高,但通常运算量很大,计算速度较慢,在实际工程应用中,一般需要进行数据加速处理,以实现测向系统实时测向的应用。
4.传统鉴相器仅使用cpu作为数据核心运算设备,但cpu在芯片设计上,运算控制电路与缓存占用了大部分面积与版图,绝大部分空间与电路构件并不属于算数逻辑单元(arithmetic logic unit,alu)。因此cpu作为通用处理器虽然分支能力强大,能够处理复杂的分支与条件指令以及进行任务之间的协调,但cpu在数据吞吐量和矢量运算能力上做出了不可避免的牺牲,无法并行处理数据。


技术实现要素:

5.有鉴于此,本发明提供了一种gpu实现fx互相关鉴相的相位干涉仪测向系统及其鉴相方法,能够根据性能需求灵活配置gpu数量,具有极大的数据吞吐量和极好的矢量运算性能,并行计算速度很快。
6.为实现上述目的,本发明的一种gpu实现fx互相关鉴相的相位干涉仪测向系统,包括天线阵列、射频前端、数字中频模块和cpu,还包括gpu,gpu与cpu相连,gpu中设有fx互相关鉴相器;
7.所述数字中频模块对射频前端发射的模拟中频数据进行采样,采样得到的数字中频数据传输给cpu;其中,每次采样时,同一时刻各个天线的模拟中频数据按照通道号排列在一起;
8.cpu将所述数字中频数据分割成段数据,将段数据拷贝给gpu;
9.所述fx互相关鉴相器中编写有核函数,gpu调用编写的核函数以及cuda函数库内的cufftplan1d函数,用于对所述段数据按采样点进行fx互相关鉴相处理,得到不同天线间的相位差信息,完成鉴相,并将不同天线间的相位差信息发送给cpu;
10.其中,当gpu中调用的一个cufftplan1d函数或者加载的一个核函数接收到数据后,启用大于本段内采样点数的线程,工作完成后关闭已启用的线程,数据传递至下一个cufftplan1d函数或者核函数,不同cufftplan1d函数或者核函数之间的线程完全独立;
11.cpu对接收到的相位差信息进行后续处理。
12.其中,在gpu内部编写有核函数kernel1、核函数kernel2以及核函数kernel3;
13.其中,核函数kernel1用于对分割后的各段数字中频数据进行类型转换,将类型转换后的数据发送给cuda函数库内的cufftplan1d函数;
14.所述cufftplan1d函数对经过类型转换后的数据进行傅里叶变换,将傅里叶变换后数据发送给所述核函数kernel2;
15.核函数kernel2对傅里叶变换后的数据进行共轭相乘处理,共轭相乘时一个天线的信号取共轭与另一个天线的原始信号进行相乘,将共轭相乘后的数据发送给所述核函数kernel3;
16.核函数kernel3用于对共轭相乘后的数据进行能量累积及提相处理,所得相角即为每个采样点处两路信号相位差。
17.其中,对于每段数据,kernel1启用大于本段内采样点数的线程,工作时所有线程同时启动,完成本段内所有采样点数据转换后对应线程关闭。
18.其中,在cpu内存中申请有循环缓冲区,所述循环缓冲区包括若干个容量相等的内存块,相邻内存块首尾相接,形成一个环式的链。
19.其中,cpu和gpu的数据传输中,设计有2个线程:一个为cpu数据填充线程,负责将cpu接收的数据流按照顺序,依次存储到循环缓冲区的内存块;另一个为gpu读取线程,负责将循环缓冲区的内存块数据依次发送至gpu中进行处理。
20.其中,cpu与gpu之间利用cudamemcpy函数进行数据传输。
21.其中,gpu将不同天线间的相位差信息通过udp/tcp协议发送给cpu。
22.其中,gpu通过pcie总线与cpu相连。
23.其中,gpu将不同天线间的相位差信息通过udp/tcp协议发送给cpu。
24.本发明还提供了一种鉴相方法,采用本发明所述的测向系统,gpu调用编写的核函数kernel1、核函数kernel2以及核函数kernel3以及cuda函数库内的cufftplan1d函数,用于对所述采样点数据按段进行fx互相关鉴相处理,得到不同天线间的相位差信息,完成鉴相,其特征在于,包括如下步骤:
25.核函数kernel1对分割后的各段数字中频数据进行类型转换,将类型转换后的数据发送给cuda函数库内的cufftplan1d函数;
26.所述cufftplan1d函数对经过类型转换后的数据进行傅里叶变换,将傅里叶变换后数据发送给所述核函数kernel2;
27.其中,对所述数字中频数据中每一路信号进行fft变换;其中,将一秒内的采样点分成若干段,每段内的数据分别进行快速傅里叶变换;
28.核函数kernel2对傅里叶变换后的数据进行共轭相乘处理,共轭相乘时一个天线的信号取共轭与另一个天线的原始信号进行相乘,将共轭相乘后的数据发送给所述核函数kernel3;
29.其中,将fft变换后的信号中每两路信号进行共轭相乘,得到每两路信号共轭相乘的结果;共轭相乘时,保持一路信号不变,另一路信号利用欧拉公式中正弦函数和余弦函数在复数范围内的复数关系取共轭,然后将取共轭后的信号与另一路取共轭前的信号进行相乘;
30.核函数kernel3用于对共轭相乘后的数据进行能量累积及提相处理,所得相角即为每个采样点处两路信号相位差;
31.其中,针对每两路信号共轭相乘的结果,对每段内数据进行n等分,每段内的共轭相乘后的n份数据相加然后取平均,最终一段内的数据量减少至原来数据量大小的1/n,完成能量累积,其中,n为正整数;
32.能量累积后得到的数据波形即为两路信号的相关谱,对能量累积后的每一个复数,利用其虚部除以实部,得到每个复数的相角;
33.找到每两路信号相关谱中能量的最大值,该最大值处对应的复数相角即为这两路信号这段数据采样点内的相位。
34.有益效果:
35.本发明以gpu作为核心的数据处理器件,用cpu完成任务的分配和调度,其中,以gpu线程作为并行基础,每一个线程用于处理一路信号中的一个采样点,然后以多线程并发进行多路信号的相位差提取。利用了gpu的高灵活性和高效并行数据处理能力,将计算输出最大化,采用绝大部分的晶体管进行构建算数逻辑单元,而不是构建数据缓存与流控,具有极大的数据吞吐量和极好的矢量运算性能,并行计算速度很快。
36.本发明gpu中可利用的执行单元众多,可以设计更多的通道,且gpu的开发使用更灵活,升级容易,通过加载不同的程序就可以完成不同的功能;从工程实用性上分析,本发明可靠性更高,扩展性更好,精度更高。
37.本发明采用循环链式缓冲区与多线程应用能够连续不断的接收数据,实现高速数据稳定的实时传输。
附图说明
38.图1为单基线干涉仪测向模型示意图。
39.图2为鉴相流程框图。
40.图3为fx互相关鉴相法相关谱。
41.图4为基线12的鉴相器输出相位差示意图。
42.图5为基线23的鉴相器输出相位差示意图。
43.图6为基线13的鉴相器输出相位差示意图。
44.图7为cpu与gpu结构对比图。
45.图8为gpu中网格、线程块与线程关系图。
46.图9为本发明基于gpu的fx互相关鉴相器实现框图。
47.图10为本发明原始数据类型转换流程框图。
48.图11为本发明快速傅里叶变换流程框图。
49.图12为本发明共轭相乘流程框图。
50.图13为本发明能量累积、求相位流程框图。
51.图14为本发明实施例测向系统结构框图。
52.图15为本发明实施例循环链式缓冲区结构图。
53.图16为本发明实施例fx互相关鉴相器软件程序流程图。
54.图17为本发明实施例基于gpu的fx互相关鉴相器实现流程框图。
具体实施方式
55.下面结合附图并举实施例,对本发明进行详细描述。
56.为了更好的说明本发明鉴相器的工作原理及其鉴相方法,先介绍下单基线相位干涉仪测向原理,单基线相位干涉仪测向原理图如图1所示,由两个阵元构成的只有一条基线的干涉仪测向系统,阵元间的连线称为基线。假设信号到
·
达接收天线前的阵前波为平行波,则天线1和2接收到的信号分别为:
57.x1(t)=a
·
exp[j(ωt ψ)]
[0058]
x2(t)=a
·
exp[j(ω(t

τ) ψ)] (1)
[0059]
式中a为信号幅度;ω=2πf,f为入射信号频率;τ为天线1相对于天线2接收信号的时延;ψ为入射信号的初相。fx互相关鉴相法先对两路信号分别做傅里叶变换,将信号变换到频域后进行共轭相乘然后求平均,得到两路信号的相关谱,求相关谱的谱峰位置,该处的相位值即为两路信号的相位差。对两路信号分别进行傅里叶变换后得:
[0060][0061][0062]
互相关处理后相关谱为:
[0063][0064]
相关谱谱峰位置的相位差为:
[0065]
φ=2πfτ=angle[y(ω)|
ω=2πf
] (4)
[0066]
利用鉴相器提取出两路信号的相位差φ为:
[0067][0068]
式中λ为信号波长;θ为入射信号与视轴之间的夹角,即入射信号的俯仰角;c为光速,即信号传播的速度;d为两个接收天线的间距,即基线长度。则对应的俯仰角为:
[0069][0070]
鉴相流程具体如下:
[0071]
fx互相关鉴相算法需要将模拟信号离散化,采用数字信号处理的方法在频域内提取相位差信息,鉴相流程如图2所示,以只有两个阵元的一维单基线相位干涉仪测向系统为例,对两路信号离散化之后进行fft变换,得到两路信号的频谱,对其中一路信号求复数共轭之后与另一路信号进行复数相乘,由于躁扰的影响,由一个或几个数据得到的结果可能不准确,因此需要多个样本平均以提高测向准确度,即能量累积,然后利用反正切求出在选定数据段上各个点的相位值,最后找到频谱最大值所对应的位置,提取该位置处的相位差信息。
[0072]
图3所示为两路实测信号的相关谱,fft点数为100点,可以求得相关谱在频谱上对应的最大值位置为第26点(另一点为折叠的频点),那么第26点对应的相位值就是要求的相位差。
[0073]
在相位干涉仪测向方法中,由于鉴相器物理特性导致提取的信号相位差只能在[

π,π]范围内,当基线长度小于入射信号最高频率半波长时,对于任意方向入射信号,实际相位差都在[

π,π]以内,测量值反应实际值;当基线长度大于半波长时,相位差实际值超出[

π,π],此时鉴相器对实际相位差进行截断和平移,使其在[

π,π]范围内翻折,这就是相位干涉仪测向方法中常见的相位模糊问题。对于由i(i≥1)条基线构成的相位干涉仪,假设鉴相器输出的测量相位值为ψ
i
,实际相位值为φ
i
,则鉴相相位差与实际相位差的关系为:
[0074]
φ
i
=2k
i
π ψ
i (1)
[0075]
式中k
i
为每条基线对应的模糊数,由上式可得:
[0076][0077]
由上式可知,在基线长度互质的情况下,当入射波波长不变,入射角度不变时,各条基线对应的模糊数的大小与基线长度有关,基线越长模糊数越大,鉴相器输出的相位差在[

π,π]范围内翻折的次数越多。假设有3个阵元1、2、3摆放在同一条直线上,3个阵元构成3条基线分别为基线12、基线13、基线23,3条基线的长度分别为:d
12
=30cm,d
23
=70cm,d
13
=100cm。对3个阵元接收的信号两两做互相关处理,得到3组相位差值,如图4

6所示,横轴为信号入射角度,纵轴为鉴相后存在模糊的相位差,由图4

6可知,基线越长,模糊数越大,相位翻折次数越多。
[0078]
因为gpu具有大量执行单元,适合进行大量并行运算,解决并行化问题,因此本发明把鉴相算法加载到gpu中进行。本发明采用cpu gpu异构并行方式,在计算密集型应用中,往往有很多并行数据的程序段。gpu就是用来提高这些并行数据的执行速度的。当使用cpu上的一个与其物理分离开的硬件组件来提高应用中的计算密集部分的执行速度时,这个组件就成为了一个硬件加速器,gpu可以说是最常见的硬件加速器。gpu不是一个独立运行的平台而是cpu的协处理器,因此gpu必须通过pcie总线与基于cpu的主机相连来进行操作。
[0079]
gpu是一种高度并行化的多核处理器,它的特点是能够利用大量的处理单元进行并行计算,在基带信号处理中有大量重复的相关运算,所以用gpu来处理是很合适而且有优势的。gpu通过增加计算单元和存储器控制单元来提高并行数据计算能力和存储器宽度,因此gpu在并行计算能力和存储器带宽上较cpu有明显优势,且成本和功耗上也没有付出太大代价。图7对cpu和gpu中控制单元、计算单元数量做了比较,从图7中可以看出gpu中计算单元远远多于cpu,使其有更强的并行计算能力。
[0080]
通常一个异构应用包括两个部分:主机代码和设备代码,主机代码在cpu上运行,设备代码在gpu上运行,因此通常也将cpu称作主机端(host),gpu称作设备端(device)。cpu主要负责统筹管理整个程序或者测向系统的处理以及一些相对简单的串行计算和操作,gpu则主要负责计算量相对较大,较复杂的并行处理任务。异构平台上执行的应用由cpu初始化,在设备端加载计算密集型任务之前,cpu代码负责管理设备端的环境、代码和数据。
[0081]
内核(kernel)是gpu编程模型的一个重要组成部分,其代码在gpu上运行,核函数可以串行执行。多数情况下,主机可以独立地对设备进行操作。内核一旦被启动,管理权立刻返回给主机,释放cpu来执行由设备上运行的并行代码实现额外的任务。gpu执行程序时的最小单位是线程(thread),每个线程都会并行地执行内核函数。这些线程被组织为两级的层次结构:一个网格(grid)包含一个或多个线程块(block),每个线程块包含一个或多个线程。网格、线程块和线程的关系如图8所示。
[0082]
在cpu、gpu两种不同的结构下编程,需要注意的是两者各自维护自己的内存空间,分为host memory和device memory,如果要交互数据需要用cuda runtime库调用cudamemcpy函数来传递。一个典型的gpu程序实现流程遵循以下模式:
[0083]
把数据从cpu内存拷贝到gpu内存。
[0084]
调用核函数对存储在gpu内存中的数据进行操作。
[0085]
将数据从gpu内存拷贝回cpu内存。
[0086]
经过上述分析,本发明基于gpu的fx互相关鉴相器实现框图如图9所示,其中fft变换调用gpu已有的函数库cuda中的cufftplan1d函数,其他处理则调用在gpu内编写的核函数,其中每一个函数和核函数的功能和作用具体如下:
[0087]
1、kernel1原始数据类型转换
[0088]
相位干涉仪测向时需要两个或多个天线接收信号,本发明中,多个天线接收的数据通过ad采集卡时,每次采样时同一时刻各个天线的信号按照通道号排列在一起,假设测向系统有n(n≥2)个天线,cpu将接收的信号数据分割成每段n个采样点拷贝给gpu,因此gpu第一个核函数(kernel1)每次读取n点数据,即kernel1对每个天线接收的数据每次处理n/n个采样点,得到数据后kernel1启用大于n的线程数来处理这些数据,保证一个线程处理一个采样点数据,处理完n点数据后关闭这些线程。gpu中第一个核函数的功能是对原始数据类型进行转换,即将各个天线得到的数据分开存放。图10是gpu中原始数据类型转换流程框图。其中,gpu每个线程块中分配线程(thread)数512,共启用i(i≥1)个线程块(block)。kernel1工作时所有线程块内的线程同时启动,保证每个线程对每个采样点数据同时进行转换,启用的所有线程完成一次n点数据转换后循环加载进行下一段n点数据类型转换。设本次处理的数据在第iw个线程块,每个线程块大小为ul,数据点在线程块内索引为il,其在整个数据序列的索引值为j=iw*ul il。
[0089]
2、cufftplan1d快速傅里叶变换
[0090]
kernel1完成原始数据类型转换后关闭kernel内所有的线程,将数据发送给cuda函数库内的cufftplan1d函数,cufftplan1d函数对经过类型转换后的数据进行傅里叶变换。图11是gpu中快速傅里叶变换流程框图。其中,gpu每个线程块中分配线程数仍取512,线程网格循环加载,保证每个线程对每次转换后的n点数据进行fft处理。设本次处理的数据为第it段,设本次处理的数据在第it个线程块,每个线程块大小为nl,数据点在线程块内索引为il,其在整个数据序列的索引值为v=it*nl il。在gpu上进行傅里叶变换需要做以下几步工作:
[0091]
创建一个plan。调用cufftplan1d创建一个简单的1维傅里叶变换;执行plan。使用cufftexecr2c()函数完成plan的计算任务;执行完成以后不再需要该plan,则调用cufftdestroy()函数销毁该plan及为其分配的计算资源。
[0092]
cuda库实现了三种不同类型的傅里叶变换:c2c(复数到复数)、c2r(复数到实数)、r2c(实数到复数),本系统在输入信号的fft计算中,因为输入是实信号,因此使用了cufft_r2c类型的fft,假设有x个数据,经过cufft_r2c类型的fft变换后得到(x/2 1)个数据。本系统中天线数为n,cufftplan1d函数每次处理点数为n,即对每个天线接收的数据每次处理n/n个采样点,为了减小噪音对信号的干扰,傅里叶变换前将n/n个点等分成x段,分段进行fft变换,每段n/nx个点,因此每个天线每段fft变换后会得到(n/2nx 1)点数据,x段数据fft后
得到(n/2n x)点复数数据,即每个天线每次接收的n/x个实数得到(n/2n x)个复数,因此n个天线fft变换时每输入n个实数输出(n/2 xn)个复数。使用cufft_r2c类型变换,这样可以节省数据虚部初始化操作,减少数据传输量、减少数据计算量。
[0093]
3、kernel2共轭相乘
[0094]
共轭相乘流程框图如图12所示,cufftplan1d完成fft变换后关闭函数内所有线程,(n/2 xn)个复数传输至下一个核函数kernel2进行共轭相乘处理,共轭相乘时一个天线的信号取共轭与另一个天线的原始信号进行相乘,因为每两个天线构成一条基线,因此每两个天线的信号都需要进行共轭相乘处理,n个天线构成c
n2
条基线,即得到c
n2
组共轭相乘结果,因为每个天线数据为(n/2n x)点,处理后共得到c
n2
(n/2n x)个结果。
[0095]
4、kernel3能量累积并求相位
[0096]
kernel2完成数据处理后关闭函数内所有线程,c
n2
(n/2n x)个结果传输至下一个核函数kernel4进行能量累积及提相处理,每条基线的(n/2n x)个数据分成x段进行相加平均,令m=(n/2n x),分成x段后,每段m/x点,kernel3流程框图如图13所示。累加平均后每条基线数据量为m/x个复数,用atan2函数求每个复数的相角,所得相角即为每个采样点处两路信号相位差。
[0097]
综上所述,本发明基于gpu平台,利用快速傅里叶变换算法、复数共轭相乘等,实现相位干涉仪实时提取阵元间相位差的效果。基于上述分析,得到本发明的相位干涉仪测向系统如图14所示,包括天线阵列、射频前端、数字中频模块、gpu和cpu,其中,gpu与cpu相连,gpu为后台单元,设有fx互相关鉴相器;射频前端包括低噪声放大器以及下变频器;
[0098]
具体地,所述天线阵列用于接收辐射源产生的射频信号,并将射频信号传输给所述低噪声放大器;
[0099]
所述低噪声放大器用于降低信号噪声,提高输出信号的信噪比,并将经过低噪声放大器后的信号传输给所述下变频器;所述下变频器把接收到的信号下变频到较低的频率,得到模拟中频数据,并将所述模拟中频数据输入到所述数字中频模块;
[0100]
所述数字中频模块用于对接收到的模拟中频数据进行采样,产生数字中频数据,并将所述数字中频数据传输给cpu;其中,每次采样时,同一时刻各个天线的模拟中频数据按照通道号排列在一起;
[0101]
其中,数字中频模块包括a/d数据采集板卡,用于对模拟中频数据进行离散化处理,产生数字中频信号;a/d数据采集板卡的缓冲器作为接收数据的缓存,用于获得数字中频信号的数据流;
[0102]
cpu将所述数字中频数据分割成段数据,将段数据拷贝给gpu;
[0103]
所述fx互相关鉴相器中编写有核函数,gpu调用编写的核函数以及cuda函数库内的cufftplan1d函数,用于对所述段数据按采样点进行fx互相关鉴相处理,得到不同天线间的相位差信息,完成鉴相,并将不同天线间的相位差信息发送给cpu;
[0104]
其中,当gpu中调用的一个cufftplan1d函数或者加载的一个核函数接收到数据后,启用大于本段内采样点数的线程,工作完成后关闭已启用的线程,数据传递至下一个cufftplan1d函数或者核函数,不同cufftplan1d函数或者核函数之间的线程完全独立;
[0105]
cpu为前台单元,设有解模糊和拟合处理模块以及角度解算模块;所述cpu对相位差信息进行编帧,所述解模糊和拟合处理模块对编帧后的相位信息进行相位模糊解算及拟
合处理,得到无模糊高精度的相位差信息;所述角度解算模块,用于根据相位差信息解算出辐射源俯仰角和方位角。
[0106]
本发明测向系统还可以包括显示界面,所述显示界面用于对解算出的辐射源俯仰角和方位角进行可视化显示。
[0107]
另外,由于操作系统的非实时性和总线传输速度的不稳定性,在传输过程中,不能实现将写入内存缓存区的数据立即读取完,为了连续不断的接收数据,本实施例采用高效率的循环链式缓存区管理策略。循环链式缓存区是在cpu内存中申请若干个容量相等的缓存区,并将这些缓存区首尾相接,形成一个环式的链,如图15所示。
[0108]
在数据传输过程中,按照箭头的顺序,依次循环地对每个缓存区进行数据填充和读取操作。在每次进行数据读取操作之前,需要判断当前缓存块的数据是否已经被更新,如果未被更新,将处于等待状态。同样,在每次进行数据填充之前,需要判断当前缓存块的数据是否已经被读取完毕,否则,将处于等待状态,直到此缓存块数据被读取完毕。循环链式缓冲区的数据填充线程和数据读写线程被称作多线程,主要负责高速数据流持续地在gpu和cpu内存之间传输,由于cpu数据的填充和gpu数据的读取同时进行,必须使用多线程技术。
[0109]
本发明采用循环链式缓冲区与多线程应用能够连续不断的接收数据,实现高速数据稳定的实时传输。fx互相关鉴相器软件程序流程图如图16示,共设计了2个线程:一个为cpu数据填充线程,负责将cpu接收的数据流按照顺序,依次存储到循环缓冲区的内存块;另一个为gpu读取线程,负责将循环缓冲区的内存块数据依次发送至gpu中进行处理,2个线程协调工作,保证了数据流的高速实时稳定传输。
[0110]
可见,本实施例中,gpu利用其高效的浮点运算能力实现了fx互相关的实时运算,由于在鉴相过程中,每个并行支路的算法是相同的,可以认为每个支路之间没有必然的关联性,这就满足了gpu通用计算的条件,即对大量相同计算可做并行同步处理。在该测向系统中cpu利用循环缓冲区存储通过pcie总线发送过来的数字中频信号,并将这些数据按一定规则进行有序分割,然后将分割后的数据送给gpu,由gpu完成计算量较大并行性较高的提相处理。cpu与gpu之间利用cudamemcpy函数进行数据传输,主机复制数据到设备用cudamemcpyhosttodevice,设备复制数据至主机用cudamemcpydevicetohost。在gpu内部,对数据进行处理时调用cuda函数库内的函数或者自己编写的核函数,同一个gpu内可以调用多个cuda函数和加载多个核函数,当gpu中调用的一个函数或者加载的一个核函数接收到数据后启用一定数量的线程,工作完成后关闭已启用的线程,数据传递至下一个函数或者核函数,不同函数或者核函数之间的线程完全独立。
[0111]
本发明基于gpu的fx互相关鉴相器工作流程如图17所示,包括如下步骤:
[0112]
首先对所述数字中频数据中每一路信号进行fft变换;其中,将一秒内的采样点分成若干段,每段内的数据分别进行快速傅里叶变换;
[0113]
将fft变换后的信号中每两路信号进行共轭相乘,得到每两路信号共轭相乘的结果;共轭相乘时,保持一路信号不变,另一路信号利用欧拉公式中正弦函数和余弦函数在复数范围内的复数关系取共轭,然后将取共轭后的信号与另一路取共轭前的信号进行相乘;
[0114]
针对每两路信号共轭相乘的结果,对每段内数据进行n等分,每段内的共轭相乘后的n份数据相加然后取平均,最终一段内的数据量减少至原来数据量大小的1/n,完成能量
累积,其中,n为正整数;
[0115]
能量累积后得到的数据波形即为两路信号的相关谱,对能量累积后的每一个复数,利用其虚部除以实部,得到每个复数的相角;
[0116]
找到每两路信号相关谱中能量的最大值,该最大值处对应的复数相角即为这两路信号这段数据采样点内的相位。
[0117]
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献