花生漫画

已知信号检测的FPGA实现

0
阅读(2488)

在信号处理领域常会涉及到已知信号的检测问题,如帧同步字的检测就是一个典型的实例应用,而处理的过程通常会在数字域里实现,由于信号检测过程的运算量较大,且通常实时性要求比较高,所以用FPGA实现已知信号的检测是个不错的方法。

检测已知信号的方法主要是匹配滤波器的思想,即利用信号本身的相关性进行检测。其实信号检测的本质是比较信号的相似性,即比较接收信号跟已知信号长的像不像,如果像则说明信号已检测到,如果不像说明未检测到,在数学领域,判断两个函数长得像不像有多种方法,其中相关运算是比较常见的一种,再有就是判断二者的均方差,如果由两个信号计算得来的均方差比较小,在允许的范围内,则认为检测到信号,如果均方差比较大,则说明未检测到信号。

      其实,利用相关运算检测已知信号有的时候是会出现虚检的,假如已知的信号是:3 -3 3 -3 -3 3,而数字化后的信号用16位数来表示,+3用10000来表示,-3用-10000来表示,如果某时刻接到的信号为20000,-1000,20000,5000,2000,15000,则相关运算后的结果为:3*20000+(-3)*(-1000)+20000*3+(-3)*5000+(-3)*2000+3*15000

=147000,而理想值为:3*10000*6=180000,如果取理想值的80%作为检测门限的话,应为144000,而此时实际的运算结果已经超过了门限,但是很显然,接收到的信号不为已知信号,故出现了“虚检”,出现这种情况的主要原因是因为接收信号中的几个值起了重要的作用,它几个值突发性的比较大,从而影响了计算结果,所以仅靠相关运算来检测已知信号是远远不够的,必须借助其它手段进行进一步的“筛选”,这时可以利用均方差的概念,如上述情况,算得两个信号的均方差后会发现,均方差会特别大,所以是不正确的,这个时候会尽最大可能的保证检测信号的正确性。

      接下来谈一下如何利用FPGA实现已知信号的检测,总体思想可以分两步进行,首先进行相关运算,当相关运算的值超过阈值的时候再启动均方差的运算,因为如果已知信号到来时,首先经过相关运算后会变得比较大,这时才会有进一步计算的必要。由于只有当已知信号的最后一点到来时才能判断是否为所需的信号,所以必须先借助一RAM将信号存储起来,由于一般基带输入信号的频率较FPGA工作的时钟较低,所以RAM的大小可以定为已知信号的长度*每符号的采样点数(在此假设采样率为基带信号的16倍,即一个符号周期内采16个点),每来一个点时都要进行一次匹配滤波处理,然后判断是否过门限,如果过门限则应进一步的判断是否满足均方差的要求,由于对RAM块的读地址线需要重复操作,为了避免由此带来的麻烦,可以用两块RAM同时存储基带输入信号,一个RAM负责相关运算,一个RAM负责计算均方差,由此,读地址线的操作可以分开,下百是具体的仿真图。

    

图1 相关运算过程仿真

图2 相关运算过程仿真

      经过相关运算后,会得到一个初步的判断结果,用syn_flag标识,当该信号为高电平时,初步判断为信号到来,便可启动下一模块,进行均方差的计算,均方差计算的实现思想跟相关运算过程类似,可以用一计数器控制RAM读地址线的操作和乘加运算,需要注意的是,由于调用了乘法器,故需要考虑电路的时序特性,而不能单纯从理论上仿真验证,一般的二十位以上的乘法器,需要经过3-5个时钟周期才能完成乘法运算,所以运用处理结果时需要注意。此处便不再详细列出。

      以上是本人的一些看法,仅供参考!