总体功能:分组检测,频偏粗估计矫正
一、complex_to_mag_sq.v
复数乘法器计算分母
在计算短前导码相关性的时候用于计算分母
S[i]是表示为复数形式的〈I,Q〉样本, 是它的共轭,
实现 (a+bi)*(a-bi)的效果=a^2+b^2
二、moving_avg.v 用于计算滑动均值滤波
滑动平均值滤波是指先在RAM中建立一个数据缓冲区,依顺序存放N个采样数据,每采进一个新数据,就将最早采集的那个数据丢掉,而后求包括新数据在内的N个数据的算术平均值或加权平均值。这样,每进行一次采样,就可计算出一个新的平均值,从而加快了数据处理的速度。
滑动平均值滤波程序设计的关键是:每采样一次,移动一次数据块,然后求出新一组数据之和,再求平均值。滑动平均值滤波程序有两种,一种是滑动算术平均值滤波,一种是滑动加权平均值滤波。不管是算术平均值滤波,还是加权平均值滤波,都需连续采样N个数据,然后求算术平均值或加权平均值。
一共存了16个数据的算术和
三、delay_sample.v
使用双口RAM,先把第1到第16个数据通过A口存入RAM,当ADDR到15的时候,下一个周期开始从B口往外发送延时16个周期的数据,从这个时候开始,A口进一个,B口就输出一个。
四、complex_mult.v 用于在计算短训练序列相关性时候的分子
五、delay_prod_avg_mag_inst : complex_to_mag (complex_to_mag.v) 计算分子的模
计算复数模的简单方法
Mag ~=Alpha * max(|I|, |Q|) + Beta * min(|I|, |Q|)
其实就是说能量约等于 I,Q绝对值(正数数值)的最大值和最小值的加权之和。这两个权ALPHA和BETA在下面VERILOG代码中分别取1和0.25.
mag <= max + (min>>2);
sync_short.v
短前导码持续时间8us 160个样本,利用自相关找到10个相同的STS,进行分组检测判断一个OFDM数据包的开始,并进行频偏粗估计
input [31:0] sample_in 输入的两路iq信号
output: short_preamble_detected 短训练序列监测完毕给sync_long
input [15:0] phase_out, phase.v模块计算的相位
output [15:0] phase_offset 给sync_long.v 粗频偏校正需要的调整的相位在sync_long模块FFT前应用频偏粗校正