插入导频
本来只打算写一个简单的插入导频的小demo,但是觉得对于导频在整个OFDM传输系统中起到的作用还是有必要去理一下,因此这里会对导频做一个简单的介绍。
导频在整个通信传输系统中的作用是信道估计(有的也可用于同步,但那大多是训练序列的工作)。而信道估计,顾名思义就是估计出信道对传输信号的影响,从而在后端的均衡模块对接收信号进行补偿,一定程度上恢复原信号。
信道估计的方法有很多,除了常用的导频法还有盲(半盲)方法,这里不再展开介绍。只针对导频法(也称数据辅助法)进行介绍。常见的导频结构有以下三种,分别是块状导频,梳状导频和离散导频。
不同的导频结构主要是为了应对不同信道对应的时频特性。我们这里以梳状导频为例来详细的介绍导频在信道估计中起到的作用,梳状导频是在发送信号的频域内进行内插来实现的。由先前第一章和第二章的内容我们可以知道,对于OFDM系统而言,我们是在规定好在频域内对应的星座符号后再将其调制到各个子载波上的。我们举一个简单的栗子,发送四个载波,频率分别为10hz,20hz,30hz,40hz,分别携带10 ,20 ,30,40这四个数据(这里考虑的情况比较简单,为实数信号,且没有达到OFDM的最高频带利用率)如下图所示:
f1
合成的信号以及其频谱为:
当然,实际的发送出去的频谱不可能这么完美,在窗函数和成型滤波器的作用下会呈现sinc函数的模样。这里以理想的情况作为说明。
现在我们需要对10hz,20hz,30hz,40hz这几个频带进行内插,就简单的以15hz,25hz,35hz这几个频带来放置导频,这里的导频携带已知数据1,导频在频谱上反映出的是一条谱线,但是在时域中是均匀离散分布的。导频信号如下:
P
将其叠加,得到合成导频信号及其频谱如下:
现在我们将导频插入到发送信号中,观看其频域图:
y_add_plot
可以明显的看出导频在频域内插在发送信号各载波的的中间。现在我们将加入导频后的信号送入信道中,这里的信道我做的比较简单,以一个double flat信道为例(若采用频率选择性信道可以参考我的第三章信道建模):
h
因为信道是flat的,所以发现基本上相位没有太大的偏差,只是幅度衰减了一半左右,并且加入了一些白噪声。接下来我们需要在频域进行信道估计了:首先在频域提取刚才在15hz 25hz 35hz三个频带的接收数据(即上面数据和导频的频谱图中导频对应的那几个频点),即通过信道后的,随后和原始信号相除,即最小二乘信道估计法(LS):
[
这样我们就获得了在频域上三个频点对应的信道系数,这时需要通过插值扩展到所有的频带上,如下代码所示:
x
扩展到所有频带后就可以对其进行均衡补偿处理了:这里采用的均衡算法也很简单,采用单抽头均衡,直接除去信道系数:得到均衡后的信号:
Y_data
可以看出,均衡后的信号携带的数据分别为9.462,18.76,28.07,37.53相比之前信号携带的数据10,20,30,40还是比较接近的,因为信噪比设置的1,噪声还是比较大的,恢复的不是那么完美,插值那边也有部分误差。到频域这边其实我们的工作就差不多结束了,我们只需要得到频带上携带的数据即可。
关于硬件实现这里,我只写了一个简单的导频插入模块,因为对于OFDM系统来说,只要将导频添加到QAM信号序列中,直接送入IFFT发送,到FFT解调即可。主要思路是建立一个RAM,将导频位置的coe文件存入RAM中做个表,1代表导频,0代表数据。QAM符号直接送入FIFO,当检测到表为0存入数据,检测到1存入导频。代码如下:
`timescale
ram coe为:
最后的仿真结果为:
看到最后的输出序列是每4个载波间隔一个导频的:
做完才发现好像丢了个数据(233333),fifo rd en那里读取导频的时候忘记拉低了,算个小bug....有空改。。。
接收端只需要也知道这张表,然后根据表提取导频即可~
今天就水到这里啦~睡觉睡觉~