重采样过程
目标
原始信号: 采样频率:
目标信号: 采样频率:
步骤
Farrow算法
变量定义
算法表达式
理想滤波器:
由于插值用的点数不可能是无穷的所以可以得到实际有限点滤波器表达如下所示:
拉格朗日多项式插值
拉格朗日插值法表达式:
周围的点进行拉格朗日插值法得到一下表达式:
:
将Farrow的变量带入可以得到:
因此当I固定时可以得到固定的系数,当点数为4时可以得到系数为:
,可以得到matlab计算公式为
码多普勒仿真
码多普勒效应是指当波源和接收器相对运动时,码元的频率会发生变化的现象。由于物体相互靠近,接收信息的速度会变快。码多普勒和光多普勒同时发生,两者是相辅相成的,对于发送端没有发生多普勒的情况下,码的周期/光的周期,就可以得到一个码下光的相位发生了多少变化,无论多普勒多大,两者之间的运动关系如何,一个码对应的光的相位是不变的。
如何来仿真码多普勒?
码多普勒带来的直接效果就是码宽发生变化,在采样周期相同的情况下,码多普勒会让一个码的采样点的数量发生变化。使用拉格朗日Farrow滤波器进行码多普勒仿真,首先需要对原始信号进行高采样点数的上采样,对原始信号的采样点进行插值抽取获得采样率的信号。下面是部分matlab仿真程序:
程序中目标输出的采样频率是定值,也符合实际系统中DA转换器件的特性,那么码速率是如何发生变化的,从本质上来说其实改变的是输入信号的采样频率,也就是时钟。w = target_rate / (symbol_rate+current_doppler) / sps;起到了关键作用。无论码速率是多少,一个码元过采样32个点并成形滤波后得到的数据是一样的,那么码率体现在什么地方?这就要考虑到rcosmsg的下标也就是i代表的含义,i代表的是输入的采样频率,for i = 1 : len - 1可以看成时钟,原始码率和发生码多普勒的后的码率所对应的rcosmsg是一样的,但是i所对应的时钟周期是不一样,也就是说该代码的码多普勒本质上是通过改变时钟来实现的。
但是在FPGA的实现中这是很难实现的,那么假设i代表的时钟周期不变,这段代码还有意义吗?
可以这么看,输出信号的y(k)代表的是输出的第k个周期的信号大小,那么i的物理意义的变化与y(k)的大小值并无关系。那么是不是可以说即使是我时钟周期不变,只要我的y(k)的值大小一一对应了就没有问题?确实,无论你i对应的周期是否发生变化,你的y(k)都不会发生变化,但是在具体实现中生成y(k)的速度会发生变化,在`i`的周期不变的情况下可能会出现y(k)的值堆积或不够用的情况。那么只要解决了这个问题就可以实现完全的码多普勒。
具体代码可见:https://github.com/ShimokitaYui/Matlab-simulation-of-code-Doppler-based-on-Farrow-interpolation-filter
作者:Yukinohyj
邮箱:Yukinohyj@gmail.com