理想滤波器:
由于插值用的点数不可能是无穷的所以可以得到实际有限点滤波器表达如下所示:
拉格朗日插值法表达式:
采样拉格朗日插值法来代替Farrow中的滤波器系数。当
时,利用周围的点进行拉格朗日插值法得到一下表达式:
根据拉格朗日插值法可以得到:
将Farrow的变量带入可以得到:
因此当I固定时可以得到固定的系数,当点数为4时可以得到系数为:
参考https://zhuanlan.zhihu.com/p/706572873以及https://ieeexplore.ieee.org/abstract/document/231921可以得到4点3阶拉格朗日Farrow插值滤波器的matlab仿真代码对于待插点
,可以得到matlab计算公式为
代码块
v3 = 1/6 * x(mk-2) - 1/2*x(mk-1) + 1/2 * x(mk) + -1/6 * x(mk+1);
v2 = 0 + 1/2 * x(mk-1) - x(mk) + 1/2 * x(mk+1);
v1 = -1/6 * x(mk-2) + x(mk-1) - 1/2 * x(mk) - 1/3 * x(mk+1);
v0 = x(mk);
y(t) = ((v3 * u + v2) * u + v1) * u + v0;
复制成功
码多普勒效应是指当波源和接收器相对运动时,码元的频率会发生变化的现象。由于物体相互靠近,接收信息的速度会变快。码多普勒和光多普勒同时发生,两者是相辅相成的,对于发送端没有发生多普勒的情况下,码的周期/光的周期,就可以得到一个码下光的相位发生了多少变化,无论多普勒多大,两者之间的运动关系如何,一个码对应的光的相位是不变的。
如何来仿真码多普勒?
码多普勒带来的直接效果就是码宽发生变化,在采样周期相同的情况下,码多普勒会让一个码的采样点的数量发生变化。使用拉格朗日Farrow滤波器进行码多普勒仿真,首先需要对原始信号进行高采样点数的上采样,对原始信号的采样点进行插值抽取获得采样率的信号。下面是部分matlab仿真程序:
代码块
clike
for i = 1 : len - 1
nco(i + 1) = nco(i) - w;
if(nco(i + 1) <= 0)
u = nco(i) / w;
nco(i + 1) = mod(nco(i + 1), 1);
v3 = 1/6 * temp_D2 - 1/2*temp_D1 + 1/2 * temp_D0 + -1/6 * rcosmsg(i);
v2 = 0 + 1/2 * temp_D1 - temp_D0 + 1/2 * rcosmsg(i);
v1 = -1/6 * temp_D2 + temp_D1 - 1/2 * temp_D0 - 1/3 * rcosmsg(i);
v0 = temp_D0;
y(k) = ((v3 * u + v2) * u + v1) * u + v0;
k=k+1;
end
w = target_rate / (symbol_rate+current_doppler) / sps;
temp_D2 = temp_D1;
temp_D1 = temp_D0;
temp_D0 = rcosmsg(i);
end
复制成功
具体代码可见:https://github.com/ShimokitaYui/Matlab-simulation-of-code-Doppler-based-on-Farrow-interpolation-filter
作者:Yukinohyj
邮箱:Yukinohyj@gmail.com
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删