花生漫画

匹配滤波后寻找最值点(原创)

0
阅读(2496)

      数字运算中,匹配运算是一十分重要的概念,它的基本思想是利用已知信息的相关性和未知信息的不相关性。它的可以用来区分不同类型的信息,在信号检测中有着极为重要的应用,现举例说明一种应用情况:

       假设一帧数据的数据格式为:帧头---同步字(12bit)+48bit信息,其中不同的帧头代表了不同类型的帧信息,如语音帧和数据帧,这时候,正确的检测帧头便成为了接收帧信息的关键。常用的方法就是利用匹配滤波的方法。假设1帧的帧头为[1 -1 -1 -1 1 -1 1 1 -1 1 -1 1],为了检测1帧,引入相关运算,即让接收的信号数据与[1 -1 -1 -1 1 -1 1 1 -1 1 -1 1]进行相关运算,由于数据信息的随机性,故当帧头的最后一个数据到来时,相关运算会出现一个最大值,一旦检测到该最大值,便可认为1帧已出现,下面应该进行接收数据。其中[1 -1 -1 -1 1 -1 1 1 -1 1 -1 1]的自相关运算结果图象如下图所示:

图1  自相关运算的结果

假设这里有两帧数据:[1 -1 -1 -1 1 -1 1 1 -1 1 -1 1,-1 1 1 -1 -1  1 -1 -1 1 -1 1 1 1 -1 1 -1 -1 -1 1 -1 1 -1 1 -1 1 1 -1 -1 -1 1 -1 -1 1 -1 1 -1 1 -1 1 -1 -1 -1 1 -1 1 -1 1 1 1 -1 -1 -1 1 -1 1 1 -1 1 -1 1,1 1 1 -1 -1 1 -1 -1 1 -1 1-1 1 -1 1 -1 -1 1 1 -1 1 -1 1 -1 1 -1 1 -1 -1 1 1 -1 1 -1 1 -1 1 1 1 -1 -1 1 1 -1 1 1 1 1],经过匹配滤波处理以后,得到的结果如下图所示:

图2 匹配滤波后的结果

由图象可以看出,在第12、72个点处出现了最大值,此时,正好为接收数据点的起始位置。

       所以问题的关键便成了如何寻找接收数据进行匹配滤波后的最大值,在实际的系统应用中,发送数据一般以模拟信号的形式发送,在接收的时候首先经过A/D变换,将其变成数字信号以后,再进行相关处理,这个时候经常采用的一种方法是过采样处理,即一个数据信息内进行多次采样,以便正确的判断同步信息,比如:一个数据信息位内进行8次采样,接收端每来一个采样点数据都要取以前的12个采样点进行相关运算,但是取的以前的12个点的数据间隔应为8,但是如何寻找相关峰,这是问题的关键,以下是本人在用在实际项目中的处理方法,仅供参考。

       首先,将采样的数据存入RAM块中,RAM块的大小为12*8=96(其中每个数据的位宽视实际情况而定),采用三个运算寄存器和一个计数器,其中计数器的计数范围为1-3,运算寄存器要根据采样数据的宽度而定,假设每一个数据采用8位采样,则12次相关运算以后数据的宽度就可能变成了12位,这时,运算寄存器的位宽就应设定为12位。RAM块写地址线的操作规则为:当来一个采样数据时,写地址线就加1,并且记到95时便归0,并且读地址线的值记为该时刻采样数据的存储地址。计数器的操作规则为:当来一个采样数据后便对计数器加1,实施循环计数法,当来一个采样数据时,便进行一次相关运算处理,这时,通过读取存入RAM块中的数据来完成计算,但是读地址线的的操作是依次减8,并且取12个地址的数据。其中,计数器在寻找最大值的过程中起到至关重要的作用,在相关运算及判断最大值的过程中,本人采用以下处理方法:假设当前计数器的值为1,采样数据到来时,计数器的值变为2,这时,将相关运算的值存入运算寄存器1,并用判断运算寄存器3的值是否为最大值,并且是否超过设定的门限(从上图可以看到,相关运算以后还会产生一些局部的最大值),只有满足上述两个要求时,才认为检测到了正确的帧头,此后才进行数据的正确接收。

       以下是利用ISE软件仿真的结果:

图1  仿真图1

图2  仿真图2

       为了方便运算与控制,上述仿真中用了4个运算寄存器,并且计数器也随之从0变化到4,例如当第4个数据到来时,运算寄存器中存的值分别为:2362、2841、3621、1723,并且计数器的值为0,所以要判断第2个(往前数两个)运算寄存器的值是否为最大值,并且判断该值是不是过门限(此处门限值设的是1000),由此可知,第四个数据到来时满足上述两个条件,故认为达到了帧同步的条件。