×
FPGA/DSP > 可编程逻辑 > 详情

赛灵思FPGA设计技巧与应用创新

发布时间:2020-05-15 发布时间:
|

上一次我们提到可以利用本地存储的训练序列与接收到的序列进行匹配滤波(相关)的方法来搜寻精确的OFDM符号起始位置。整个模块的框图如下:

(1)框图的第一部分是匹配滤波器(相关器),假如我们直接调用复数乘法器完成,则需要16个复数乘法器,这么大的资源要求,我们肯定要设法化简。(注:这不像前面我们遇到的情况,前面是计算接受序列的自相关,可以只用一个复数乘法器即可实现,但在这里,要将接受的序列与本地存储的值做相关,必须要16个复数乘法器)
实际当中考虑到节约芯片的资源,可以将本地存储的序列进行量化(正的(包括0)量化为1,负的量化为-1),当然也可以将接收到的序列进行量化,但是这样会稍稍复杂一点。就是说我们为了计算简单而将本地存储的序列近似为1+j,1-j,-1-j,-1+j这四种情况(因为训练序列良好的自相关性所以这种处理是允许的)。因此这样就可以利用加减法代替复数乘法,从而达到节约芯片面积的目的。
为了在理论上比较一下近似处理之后的结果,我用量化后的本地序列与接收到的序列做互相关(就是匹配滤波)如下图,接受信号中已叠加噪声。

从理论的结果来看,我们做上述近似是可行的。这样原先的复数乘法器就可以省掉了,简单将各级的数据实部与虚部组合加减就可以了,非常方便,当然,在连接模块的时候还是很烦的,必须非常小心。

(2)数据经过匹配滤波器后,我们需要计算出结果的幅值,我们当然不会去求实部和虚部平方和再开方,一方面这样的资源消耗是可观的,另一方面,完全没有必要。我们只需要求出实部和虚部的绝对值的和,适当调整门限值就可以了。和我在第一篇实现分组检测的处理方法类似,不再赘述。如下图:

(3)符号搜寻模块:

本单元负责检测计算出的幅值是否大于设定的门限值,并计数峰值出现的次数,当次数为短训练序列的段数时(10),此刻即为长训练序列循环前缀精确地起始位置。关于门限值的设定需要先进行理论仿真,并考虑实际信道的影响,灵活调整,一般要反复多次调试。(其实,我觉得这种设置绝对门限值的做法不好,因为实际的信道环境是复杂的,不可能设置一个绝对的门限值适合所有的环境,可以考虑设置相对的门限值)。如下图示意:

(4)循环前缀去除单元

考虑到符号的精确位置已经找到,所以长训练序列符号和数据符号的循环前缀部分可以去除了,用信号Symbol_enable指示数据是否有效(为1时数据有效),有效时间为一个符号中数据的长度,Symbol_enable为低电平的时长为16。
因为标准中规定两个长训练序列的循环前缀是连续在一起的,即首先的32个数据我们就舍弃,我们仅需将前一模块的Symbol_finded延时32个单位即可。
随后的两段长训练序列,64X2,为保证和后面数据的结构相同,我们做如下处理:
先输出64个样值(第一段长训练序列),此后的所有样值延时16个单位时间输出。同时,利用一个模80的计数器输出占空比为4/5的脉冲,用它来指示此时是否是有效符号的数据。

(5)最后附上本设计的顶层文件及仿真波形:

仿真波形中我们将信号叠加了15db的噪声,基本功能我们已经实现,输出的信号为数据(实部、虚部)和Symbol_Finded(指示符号准确起始位置)以及Symbol_enable(指示有效数据),本设计的后续单元就是FFT单元了,因此本单元是系统同步的关键部分。回归到SysGen上来,我们看到,只要结构十分清晰,从基本算法到硬件实现,用Xilinx的这个DSP工具是很方便的,很形象化,相比代码方法,集成速度大幅提高。

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
功率集成电路中过热保护电路的设计