α-β滤波器(一种1维稳态Kalman滤波器)详解
α−β\alpha-\betaα−β滤波器
文章目录
- α−β\alpha-\betaα−β滤波器
- 状态方程和观测方程
- α−β\alpha-\betaα−β滤波器最终形式
- α−β\alpha-\betaα−β滤波器作为一种稳态Kalman滤波器
- 状态方程、量测方程
- 推导增益KKK
- 结论
- α,β\alpha,\betaα,β参数的工程化设置
- 仿真
- 工况1 初始估计误差很大
- 工况2 观测噪声很大
- 工况3 恒定加速度扰动
- 工况4 增大a、b的结果
- 总结
- Ref
本博客来自一个课程的作业,包含以下内容:
- 一.α-β滤波器推导
- 二.作为稳态滤波器与Kalman滤波的比较
- 三.α-β的参数设置及其最优性
- 四.仿真演示
- 五.总结
KF是噪声干扰下、线性系统最优的滤波器,而a-b滤波器是KF的衍生物,在性质、结构上都很类似,但在计算复杂性上大大降低。KF动态地调整系数,以最大效率的滤除观测误差,使对应的状态估计值最佳。而a-b滤波则使用固定的滤波增益,或者认为给定好的变化增益。所以a-b滤波器是次优的。通过调整系数,用户可以控制用于从最近的测量中历史数据的长度,并用来估计数据的真实值。
对一标量x(k)x(k)x(k),存在对它的一系列观测值{z(k)}\{z(k)\}{z(k)},则α−β\alpha-\betaα−β滤波器的预测和滤波方程为
x(k+1∣k)=x^(k)+Δt⋅v^(k)x^(k+1)=x(k+1∣k)+α⋅[z(k+1)−x(k+1∣k)]v^(k+1)=v^(k)+β/Δt⋅[z(k+1)−x(k+1∣k)\begin{aligned} x(k+1|k)&=\hat x(k) + \Delta t\cdot\hat v(k)\\ \hat x(k+1)&=x(k+1|k)+\alpha \cdot[z(k+1)-x(k+1|k)]\\ \hat v(k+1)&=\hat v(k)+\beta/\Delta t \cdot [z(k+1)-x(k+1|k) \end{aligned} x(k+1∣k)x^(k+1)v^(k+1)=x^(k)+Δt⋅v^(k)=x(k+1∣k)+α⋅[z(k+1)−x(k+1∣k)]=v^(k)+β/Δt⋅[z(k+1)−x(k+1∣k)其中Δt\Delta tΔt为观测的更新时间。参数α,β\alpha,\betaα,β的设置依赖于对数据机动量噪声估计的大小、观测误差的大小。
状态方程和观测方程
a-b滤波和a-b-g滤波都要解决这样一个问题:对1维数据x(k)x(k)x(k),已知这个数据的一系列观测值{x(0),x(1),⋯,x(k)}\{x(0),x(1),\cdots,x(k)\}{x(0),x(1),⋯,x(k)},然后要利用已有数据进行滤波估计,得到更准确和平滑的值。
通常使用场景:假设1维场景的目标以匀速直线运动,而能够测量到距离序列,需要估计它的真实距离。
a-b滤波器不要求已知数学模型,它所考虑的只有状态在时域的连续性,也就是状态量xxx的一阶导和二阶导存在如下关系
x˙=vv˙=a\dot x=v \\ \dot v=a x˙=vv˙=a这个式子如果改成离散型,一阶或二阶形式分别就是a-b滤波,a-b-g滤波的系统方程
x(k+1)=x(k)+Δt⋅v(k)x(k+1)=x(k)+Δt⋅v(k)+Δt22⋅a(k)x(k+1)=x(k)+\Delta t\cdot v(k) \\ x(k+1)=x(k)+\Delta t\cdot v(k)+ \frac{\Delta t^2}{2}\cdot a(k) x(k+1)=x(k)+Δt⋅v(k)x(k+1)=x(k)+Δt⋅v(k)+2Δt2⋅a(k)改写成state-space的离散形式:
x(k+1∣k)=Φ(k+1∣k)x(k)2个状态:位置-速度:Φ(k+1∣k)=[1Δt01],x=[xv]3个状态:位置-速度-加速度:Φ(k+1∣k)=[1ΔtΔt2201Δt001],x=[xva]{\boldsymbol x}(k+1|k)=\boldsymbol \Phi(k+1|k){\boldsymbol x}(k)\\ \text{2个状态:位置-速度:} \boldsymbol \Phi(k+1|k)=\begin{bmatrix} 1 & \Delta t \\ 0 & 1 \end{bmatrix} , \boldsymbol{x}=\begin{bmatrix} x \\ v \end{bmatrix}\\ \text{3个状态:位置-速度-加速度:} \boldsymbol \Phi(k+1|k)=\begin{bmatrix} 1 & \Delta t & \frac{\Delta t^2}{2}\\ 0 & 1 & \Delta t\\ 0 & 0& 1 \end{bmatrix} , \boldsymbol{x}=\begin{bmatrix} x \\ v \\ a \end{bmatrix} x(k+1∣k)=Φ(k+1∣k)x(k)2个状态:位置-速度:Φ(k+1∣k)=[10Δt1],x=[xv]3个状态:位置-速度-加速度:Φ(k+1∣k)=100Δt102Δt2Δt1,x=xva而观测方程往往是只有位置,只有1维,对a-b滤波而言
z(k)=[10][x(k)v(k)]z(k)= \begin{bmatrix} 1 & 0 \end{bmatrix} \begin{bmatrix} x(k)\\ v(k) \end{bmatrix} z(k)=[10][x(k)v(k)]对a-b-g滤波而言,
z(k)=[100][x(k)v(k)a(k)]z(k)= \begin{bmatrix} 1 & 0 & 0 \end{bmatrix} \begin{bmatrix} x(k)\\ v(k)\\ a(k) \end{bmatrix} z(k)=[100]x(k)v(k)a(k)
如果你的实际模型和这个不一样,很显然,它是被一个2阶Markov过程近似了,而其他的内部关系都没有考虑,都被当做了噪声。也就是说,噪声项w(k)w(k)w(k)直接施加在加速度上,以3阶为例:
x(k+1)=[1ΔtΔt2201Δt001][x(k)v(k)a(k)]+[Δt22Δt1]w(k)\boldsymbol{x}(k+1)= \begin{bmatrix} 1 & \Delta t & \frac{\Delta t^2}{2}\\ 0 & 1 & \Delta t\\ 0 & 0& 1 \end{bmatrix} \begin{bmatrix} x(k) \\ v(k) \\ a(k) \end{bmatrix} + \begin{bmatrix} \frac{\Delta t^2}{2} \\ \Delta t \\ 1 \end{bmatrix}w(k) x(k+1)=100Δt102Δt2Δt1x(k)v(k)a(k)+2Δt2Δt1w(k)
z(k)=[100][x(k)v(k)a(k)]+n(k)z(k)= \begin{bmatrix} 1 & 0 & 0 \end{bmatrix} \begin{bmatrix} x(k)\\ v(k)\\ a(k) \end{bmatrix} + n(k) z(k)=[100]x(k)v(k)a(k)+n(k)其中w(k),n(k)w(k),n(k)w(k),n(k)均是不相关的高斯白噪声,互相独立,设他们的方差为Q=σw2,R=σn2Q=\sigma_w^2,R=\sigma_n^2Q=σw2,R=σn2. 3阶状态方程的Γ=[Δt2/2,Δt,1]T\boldsymbol \Gamma =[\Delta t^2/2, \Delta t, 1]^{\mathrm T}Γ=[Δt2/2,Δt,1]T,2阶方程的噪声增益为Γ=[Δt2/2,Δt]T\boldsymbol \Gamma =[\Delta t^2/2, \Delta t]^{\mathrm T}Γ=[Δt2/2,Δt]T
α−β\alpha-\betaα−β滤波器最终形式
需要从已有的位置观测序列{z(0),z(1),⋯,z(k),z(k+1)}\{z(0),z(1),\cdots,z(k),z(k+1)\}{z(0),z(1),⋯,z(k),z(k+1)}中估计位置x^(k+1)\hat x(k+1)x^(k+1)、速度v^(k+1)\hat v(k+1)v^(k+1)。类似地a-b-g滤波器需要从已有的位置观测序列{z(0),z(1),⋯,z(k),z(k+1}\{z(0),z(1),\cdots,z(k),z(k+1\}{z(0),z(1),⋯,z(k),z(k+1}中估计位置x^(k+1)\hat x(k+1)x^(k+1)、速度v^(k+1)\hat v(k+1)v^(k+1)、加速度a^(k+1)\hat a(k+1)a^(k+1),实际上由于种种原因,估计出来的导数项如速度、加速度都是不可用的,但滤波方程中仍然包含这些项,以保证连续性。
类似于KF的滤波过程,分为预测和更新2部分。利用上一轮的滤波数据,其中包含在新一轮观测更新时,新的预测为
x(k+1∣k)=x^(k)+Δt⋅v^(k)v(k+1∣k)=v^(k)x(k+1|k)=\hat x(k) + \Delta t\cdot\hat v(k)\\ v(k+1|k)=\hat v(k) x(k+1∣k)=x^(k)+Δt⋅v^(k)v(k+1∣k)=v^(k)新的测量为z(k+1)z(k+1)z(k+1),则观测误差为
z~(k+1)=z(k+1)−x(k+1∣k)\tilde z(k+1)=z(k+1)-x(k+1|k) z~(k+1)=z(k+1)−x(k+1∣k)
滤波方程使用残差的 α 倍来校正位置估计,使用残差的 β/T 倍来校正速度估计,即最终结果为
x^(k+1)=x(k+1∣k)+α⋅z~(k+1)v^(k+1)=v(k+1∣k)+β/Δt⋅z~(k+1)\hat x(k+1)=x(k+1|k)+\alpha \cdot\tilde z(k+1)\\ \hat v(k+1)=v(k+1|k)+\beta/\Delta t \cdot \tilde z(k+1) x^(k+1)=x(k+1∣k)+α⋅z~(k+1)v^(k+1)=v(k+1∣k)+β/Δt⋅z~(k+1)其中第二个式子也通常把Δt\Delta tΔt直接引进去。a-b滤波的参数α,β\alpha,\betaα,β需要实际调整。
α−β\alpha-\betaα−β滤波器作为一种稳态Kalman滤波器
状态方程、量测方程
- 预测状态x^(k+1∣k)=Φ(k+1∣k)x^(k)\hat{\boldsymbol x}(k+1|k)=\boldsymbol \Phi(k+1|k)\hat{\boldsymbol x}(k) x^(k+1∣k)=Φ(k+1∣k)x^(k)
- 修正x^(k+1∣k+1)=x^(k+1∣k)+K[z(k+1)−Hx^(k+1∣k)]\hat{\boldsymbol x}(k+1|k+1)=\hat{\boldsymbol x}(k+1|k)+\boldsymbol K[z(k+1)-\boldsymbol H\hat{\boldsymbol x}(k+1|k)] x^(k+1∣k+1)=x^(k+1∣k)+K[z(k+1)−Hx^(k+1∣k)]其中观测矩阵h=[1,0]\boldsymbol h=[1,0]h=[1,0],Kalman增益是一个定常矩阵
K=[αβ/Δt]\boldsymbol K=\begin{bmatrix} \alpha \\ \beta/\Delta t \end{bmatrix} K=[αβ/Δt]这2个方程与Kalman滤波完全一样。
推导增益KKK
根据Kalman滤波协方差矩阵稳态的条件,可以推出其余的3个方程:
- 状态协方差预测
P(k+1∣k)=ΦP(k∣k)ΦT+Γσw2ΓT\boldsymbol P(k+1|k)=\boldsymbol\Phi \boldsymbol P(k|k) \boldsymbol\Phi^{\mathrm T}+ \boldsymbol\Gamma \sigma^2_w \boldsymbol\Gamma^{\mathrm T} P(k+1∣k)=ΦP(k∣k)ΦT+Γσw2ΓT
- 目标跟踪增益(方括号里的矩阵求逆退化为1维标量求倒数)
K(k+1)=P(k+1∣k)hT[hP(k+1∣k)hT+σn2]−1\boldsymbol K(k+1) =\boldsymbol P(k+1|k)\boldsymbol h^{\mathrm T} [\boldsymbol h \boldsymbol P(k+1|k)\boldsymbol h^{\mathrm T}+\sigma_n^2]^{-1} K(k+1)=P(k+1∣k)hT[hP(k+1∣k)hT+σn2]−1
- 协方差更新
P(k+1∣k+1)=[I2−K(k+1)h]P(k+1∣k)\boldsymbol P(k+1|k+1)= [I_2-\boldsymbol K(k+1)\boldsymbol h] \boldsymbol P(k+1|k) P(k+1∣k+1)=[I2−K(k+1)h]P(k+1∣k)
构造这样的关系,即预测出的协方差矩阵已经趋于稳态:
P(k+1∣k)=P(k∣k−1)=P\boldsymbol P(k+1|k)=\boldsymbol P(k|k-1)=\boldsymbol P P(k+1∣k)=P(k∣k−1)=P将稳态形式的Kalman滤波的三个方程代入,得到Riccati方程形式
Φ[P−PH⊤(HPH⊤+R)−1HP]Φ⊤+ΓQΓ⊤=P↓ΦPΦ⊤−ΦPH⊤(HPHT+σn2)−1HPΦ⊤+Γσw2Γ⊤=P\Phi\left[P-P H^{\top}\left(H P H^{\top}+R\right)^{-1} H P\right] \Phi^{\top}+\Gamma Q \Gamma^{\top}=P\\ \downarrow\\ \Phi P \Phi^{\top}-\Phi P H^{\top}\left( H P H^{\mathrm T}+\sigma_n^2\right)^{-1} H P \Phi^{\top}+\Gamma \sigma_w^2 \Gamma^{\top}=P Φ[P−PH⊤(HPH⊤+R)−1HP]Φ⊤+ΓQΓ⊤=P↓ΦPΦ⊤−ΦPH⊤(HPHT+σn2)−1HPΦ⊤+Γσw2Γ⊤=P求解预测的协方差矩阵
P=[P11P12P21P22]\boldsymbol P=\begin{bmatrix} P_{11} & P_{12} \\ P_{21} & P_{22} \end{bmatrix} P=[P11P21P12P22]通过将所有的项代入,可以在mathematica中解出3个方程的解,共有4组可行解,再考虑到协方差矩阵的正定性,只剩下一组可行解。
即作为其他几个变量的函数
P11↦(Δt,σw,σn)P12↦(Δt,σw,σn)P22↦(Δt,σw,σn)P_{11}\mapsto(\Delta t,\sigma_w,\sigma_n)\\ P_{12}\mapsto(\Delta t,\sigma_w,\sigma_n)\\ P_{22}\mapsto(\Delta t,\sigma_w,\sigma_n) P11↦(Δt,σw,σn)P12↦(Δt,σw,σn)P22↦(Δt,σw,σn)
将这个表达式代入,就可以得到滤波增益:
K=[αβ/Δt]=1σn2+P11[P11P21]\boldsymbol K=\begin{bmatrix} \alpha \\ \beta/\Delta t \end{bmatrix} =\frac{1}{\sigma_n^2+P_{11}} \begin{bmatrix} P_{11}\\ P_{21} \end{bmatrix} K=[αβ/Δt]=σn2+P111[P11P21]这样,就可以构造关系:
Δt,σw,σn↦P11,P12↦α,β\Delta t,\sigma_w,\sigma_n \mapsto P_{11},P_{12} \mapsto \alpha,\beta Δt,σw,σn↦P11,P12↦α,β但是,由于前一个表达式过于复杂,不可能把这么长的表达式代入。因此求解结果仍然没有应用价值。
结论
结论:a-b滤波器是Kalman滤波器作为稳态滤波器的衍生物,在性质、结构上与KF都很类似。
- KF有明确的状态空间模型,而a-b滤波器将状态简化为二阶噪声驱动的Markov随机过程
- KF有多维观测量,而a-b滤波器只有所有状态的第1维。但两者都是将观测直接加白噪声。
- KF预测协方差矩阵,而a-b滤波器只关注状态的连续性,不考虑不确定部分
- KF是噪声干扰下、线性系统最优的滤波器,而a-b滤波器是稳态的固定系数的,次优的滤波器
α,β\alpha,\betaα,β参数的工程化设置
KF动态地调整系数,以最大效率的滤除观测误差,使对应的状态估计值最佳。而a-b滤波则使用固定的滤波增益,或者认为给定好的变化增益。
文献给出了一种根据物理意义明确的设置方法,定义了跟踪指数tracking index,
Λ≜Δt2⋅σwσn\Lambda\triangleq \frac{\Delta t^2\cdot\sigma_w}{\sigma_n} Λ≜σnΔt2⋅σw其实就是位置的机动(加速度上的噪声w(k)w(k)w(k))误差除以测量误差(测量方程噪声n(k)n(k)n(k)),作为模型误差与观测误差的比值,根据它,可以直接约束α\alphaα,进而确定β\betaβ。
- 如果观测不可靠,则跟踪指数小,会更倾向于已有的数据;
- 如果目标机动量大,则跟踪指数大,则更倾向于观测的数据。
- 跟踪指数小,滤波结果更平滑,但收敛更慢。但是不至于导致发散。
按照它,最优的参数准则应该满足以下关系:
β21−α=Λ2\frac{\beta^{2}}{1-\alpha}=\Lambda^{2} 1−αβ2=Λ2经过在Kalman滤波器框架下的推导,证明等价于最小方差的最优稳态滤波器,实际上就是Riccati方程的化简解。化简解还有
r=4+Λ−8Λ+Λ24,α=1−r2β=2(2−α)−41−αr=\frac{4+\Lambda-\sqrt{8 \Lambda+\Lambda^{2}}}{4}\ ,\ \alpha=1-r^{2}\\ \beta=2(2-\alpha)-4 \sqrt{1-\alpha} r=44+Λ−8Λ+Λ2 , α=1−r2β=2(2−α)−41−α根据跟踪指数可以获得最优的α\alphaα,进而得到最优的β\betaβ,两个参数之间的关系如下图所示。
此外,Kalata还给出了其他的一些类型如α\alphaα滤波器,α−β−γ\alpha-\beta-\gammaα−β−γ滤波器的参数设置。
由于根号内部不能小于0,所以还有一些不等式条件:
0<α<10<β≤20<4−2α−β\begin{aligned} &0<\alpha<1 \\ &0<\beta \leq 2 \\ &0<4-2 \alpha-\beta \end{aligned} 0<α<10<β≤20<4−2α−β
Kalata还给出了滤波过程的初始化,以及性能指标的预估。虽然这几个滤波器都是全局收敛的。:
仿真
搭建一个1维模拟的模块,模拟匀速直线运动,加速度项用噪声模拟。滤波器根据观测噪声的比值,用最优的参数配置。
观测更新率 | dTdTdT | 10Hz |
观测误差(高斯白噪声,1σ\sigmaσ) | σn\sigma_nσn | 1m |
目标实际运动 | ||
机动性模拟(高斯白噪声,1σ\sigmaσ) | σw\sigma_wσw | 0.03m/s2 |
加速度 | a(0)a(0)a(0) | 0 |
速度 | v(0)v(0)v(0) | 10m/s |
初始距离 | x(0)x(0)x(0) | 980m |
滤波器 | ||
初始距离估计 | x^(0)\hat x(0)x^(0) | 1200m |
初始位置估计 | v^(0)\hat v(0)v^(0) | 5m/s |
加速度估计 | 无 | |
跟踪指数 | Δt2⋅σwσn\frac{\Delta t^2\cdot\sigma_w}{\sigma_n}σnΔt2⋅σw | 3e-4 |
α\alphaα | 0.0242 | |
β\betaβ | 0.0003 |
工况1 初始估计误差很大
目标机动量较小,基本沿匀速直线运动,观测噪声一般,但初始估值较差。结果如下
估计太差,而观测器显然不会出现这样的问题,所以此时收敛非常慢。要收敛正常,可增大增益a、b,或者按照跟踪指数的原则,增大Λ\LambdaΛ,得到
α\alphaα 0.1362 β\betaβ 0.0099
此时,收敛更快
工况2 观测噪声很大
目标偏离直线运动较多σw=1m/s2\sigma_w=1m/s^2σw=1m/s2,,观测噪声很大σn=3.16m\sigma_n=3.16mσn=3.16m,初始估值较差,此时滤波结果仍为平滑的
工况3 恒定加速度扰动
目标短暂地加速,加速度a=10m/s2a=10m/s^2a=10m/s2,机动量噪声较大σw=1m/s2\sigma_w=1m/s^2σw=1m/s2,观测噪声一般σn=1m\sigma_n=1mσn=1m,初始估值较差,此时
工况4 增大a、b的结果
α\alphaα 0.1362 β\betaβ 0.0099
α\alphaα 0.75 β\betaβ 0.5
小的参数,更平滑,但会在目标动态机动时产生滞后误差;大的参数,跟踪性能更好,但滤波曲线波动更多。
总结
- 对高斯白噪声影响下的动态数据,未知系统模型,根据现有的数据观测,滤波效率非常高、收敛性也较好。
- 只能处理1维的观测数据,适用于计算量要求苛刻的简单问题。
- 滤波性能十分依赖于α、β 参数,越大,代表更相信观测数据,滤波的噪声越多;越小,代表更相信历史数据,也就是收敛更慢。
- 作为稳态卡尔曼滤波的简化形式,存在一个最优的设置,它依赖于观测更新时间、机动量噪声、观测噪声
Ref
- Mathworks-alphabetafilter
- Robert Penoyer - The Alpha-Beta Filter
- Wikipedia - Alpha_beta filter
- Kalata, P. R. (1984). The Tracking Index: A Generalized Parameter for α-β and α-β-γ Target Trackers. IEEE Transactions on Aerospace and Electronic Systems, AES-20(2), 174-182. doi:10.1109/TAES.1984.310438
α-β滤波器(一种1维稳态Kalman滤波器)详解相关推荐
- c语言求解热传导方程,二维稳态导热问题的数值解法.docx
核科学与技术学院 <传热学> 二维稳态导热问题的 数值解法作业 姓名:罗晓 学号: 2014151214 班级:任课教师:李磊,张智刚 哈尔滨工程大学 核科学与技术学院 2016 年 11 ...
- python有限元传热求解_二维稳态热传导基本方程的有限元求解(2)
四节点矩形单元 在二维稳态热传导基本方程的有限元求解(1)这篇文章中,我们仅仅给出了有限元单元方程的一种比较标准的推导步骤,并未涉及某种具体的单元.且在式(20)中,单元 上温度 的近似函数表示成节点 ...
- comsol官方案例学习——2、二维稳态导热
二维稳态热传导 模型定义 解析解 建模仿真 几何条件 边界条件 物理条件 划分网格 计算 分析比较 模型定义 设定了一个宽和高分别为 0.6 m 和 1.0 m 的矩形域.边界条件: • 左边界为绝缘 ...
- 二维稳态对流扩散问题,无源项,QUICK格式,四周边界定壁温的Python程序
二维稳态对流扩散,QUICK格式 原理 模型 四面为定壁温
- 【Comsol学习】二维稳态热传导问题
问题分析 根据comsol例程,问题给出条件如下 稳态建模仿真 选择二维稳态研究,选择固体传热物理场,开始设定各类条件 几何条件 根据问题描述构建几何模型 物理条件 按照问题描述,为矩形设置其热导率等 ...
- MATLAB实现二维稳态导热
MATLAB实现二维稳态导热 一.理论基础 二.代码实现 一.理论基础 步骤: Step.1 二维模型传热控制微分方程的确定,具体推导可以在任何一本传热学的书中找到. d 2 T d x 2 + d ...
- 二维稳态热传导基本方程的有限元方程
二维稳态热传导基本方程的有限元方程 - 知乎 二维稳态热传导基本方程的有限元求解(2) - 知乎 关于学习拉格朗日矩形单元和serendipity四边形单元形函数的构造方法 - 知乎 CFD理论学习- ...
- 维吉尼亚密码详解及C语言实现
维吉尼亚密码详解及C语言实现 文章目录 维吉尼亚密码详解及C语言实现 0x01 维吉尼亚密码 0x02 维吉尼亚密码原理 0x03 维吉尼亚密码CTF题目 0x04 C语言实现 图片地址:https: ...
- java 三种将list转换为map的方法详解
这篇文章主要介绍了java 三种将list转换为map的方法详解的相关资料,需要的朋友可以参考下 java 三种将list转换为map的方法详解 在本文中,介绍三种将list转换为map的方法: 1) ...
最新文章
- 《C++面向对象高效编程(第2版)》——3.17 编写内存安全类
- 在conda环境中pip使用清华源秒速安装skimage、opencv、tensorflow、pytorch1.2.0等p
- elasticsearch的增删改查
- 如何将usb连接到远程计算机,远程服务器怎么共享usb
- 降低成本是永恒的追求(xamarin)
- 五大领域总目标指南_每日干货 | 五大领域 学前社会教育1
- 动态网站数据采集 - 时光网电影信息爬虫
- 解决Word中插入表格超过页面边界问题
- android 平板刷机,小白必看,安卓平板电脑刷机教程之一键刷机
- springboot项目运行错误‘com.wei.service.UserService‘ in your configuration
- 在FME中的使用正则表达式之向前看向后看(前瞻后顾)
- linux插网卡不能识别,linux-解决添加的网卡无法识别的问题
- 0day安全:软件漏洞分析技术(第2版)
- JavaScript中的扁平化数据转换为树形结构、树形结构扁平化数据
- 罗杨美慧 20190919-1 每周例行报告
- 远程连接mysql2005_数据库2005链接远程
- Nature:真核核糖体可以像原核核糖体一样被修饰以应对抗生素
- 细细品味Hadoop_Hadoop集群精华文档合集
- 申请国自然科学基金也有计算公式
- 《程序员》2012年2期精彩内容:大数据
热门文章
- 年轻人,你活着不是为了观察K线做布朗运动
- 域名信息收集 dnsenum
- json对象,java对象,json字符串,java字符串转换方式,没写的自己去看源码!
- element表格里面放图片_Element ui表格展示图片问题
- 错误	MSB6006	“CL.exe”已退出,代码为 2
- ROS从入门到精通0-2:Win10+Ubuntu双系统安装、配置、卸载保姆级图文教程
- 【每日一题】字符串解码
- SpringBoot导出数据到Excle中
- iOS 苹果授权登录(Sign in with Apple)
- 高性能TcpServer(C#) - 3.命令通道(处理:掉包,粘包,垃圾包)