目录
一、前言
中国剩余定理本名孙子定理,《孙子算经》卷下第二十六问:今有物,不知其数。三、三数之,剩二;五、五数之,剩三;七、七数之,剩二。问物几何?如果一个自然数对一组互质的因子分别取余数,那么在知道余数和互质因子的情况下,一定可以计算出原始的自然数。
二、毫米波雷达速度扩展动机
毫米波雷达探测最远距离与接收到目标反射能量(RCS)及相关累计时间成正比,距离分辨率、速度分辨率和最大探测速度与下图FMCW波形的参数存在下列关系:
中频带宽(IF)表示接收机对天线接收到的反射信号进行放大和混频后,转换到基带的零中频信号(zero IF)带宽:
受到中射频电路设计难度和成本制约,中频信号存在一定限制,超出IF的目标反射信号会被低通滤波器抑制,只有满足下式才能被检测到:
,
限制条件:
1.更小的距离分辨率需要更大的扫频带宽(B)
2.更高的目标检测速度需要更短的chirp扫频周期Tc
限制条件导致目标在接收机形成的中频信号量IF会超出芯片的最大IF,因此需要设计出满足分辨率性能的前提下提高探测的最大速度。
设计BSD雷达步骤:
- 根据最大探测距离指标,由中频信号和距离的公式,可以看出FMCW波形斜率的要求;如80m距离,slope小于9.375MHz/us
- 根据距离分辨率,设计带宽要求;如0.36m的分辨率,由距离分辨率公式可知,带宽大于400MHz
- 由扫频带宽和斜率可知,可以确定chirps的周期Tc;如:400/9.375 = 42.66us
由上述指标算出的最大探测速度为22.86m/s,实际使用中最大速度需要正负150km/h,不满足需求,因此需要扩展速度。本文参考TI工程将给出一个简单的速度扩展算法——基于中国剩余定理的速度扩展算法(实际产品工程还要考虑距离-速度耦合的情况以及检测点有效性等算法)。
三、中国余数定理算法步骤
中国余数定理算法步骤:
(32*2*2+21*1*3+15*1*2)%(3*5*7)=233%105=23;
四、求解逆元
欧几里德(辗转相除法,greatest common divisor)可以求解两个整数的最大公约数,但对于ax ≡ 1( mod b ) 变为 ax - by = 1,比如a=35, b=3,只能采用扩展欧几里德来计算gcd(a,b)==1;
递归法:
ax+by=gcd(a,b)
ax+by=bx’+(a%b)y’
ax+by=bx’+(a-(a/b)*b)y’
ax+by=ay’+b(x’-(a/b)y’)
x=y’
y=x’-(a/b)y’
具体推导过程如下:
枚举法:
事实上,三三数余2,Mi关于mi的逆元其实不会大于mi,当mi比较小是,通过从1~mi之间的数枚举推导ax mod b≡ 1,也是可行的。
五、程序实例
#include<iostream>
#define ll long long int
using namespace std;
void exgcd(ll a1, ll b, ll &x, ll &y)
{
ll t;
if (b == 0)
{
x = 1;
y = 0;
return;
}
exgcd(b, a1%b, x, y);
t = x;
x = y;
y = t - (a1 / b)*y;
}
ll CRT(ll a[], ll m[], ll n)
{
ll M = 1, ans = 0, t, x, y, i;
for (i = 0; i < n; i++)
{
M *= m[i];
}
for (i = 0; i < n; i++)
{
t = M / m[i];
exgcd(t, m[i], x, y);
ans = (ans + a[i] * x*t) % M;
}
return (ans + M) % M;
}
int main()
{
ll n, i, ans;
n = 3;
ll m[10] = { 3, 5, 7};
ll a[10] = { 2, 3, 2};
ans = CRT(a, m, n);
cout<<"The anwser is: "<< ans<<endl;
return 0;
}
参考:
扩展欧几里德:https://blog.csdn.net/zhjchengfeng5/article/details/7786595
0830-扩展欧几里得算法+例题 https://blog.csdn.net/weixin_42557561/article/details/82227468
中国剩余定理:https://blog.csdn.net/wu_tongtong/article/details/79669723
基于AWR1642 汽车雷达的速度扩展算法研究