\" z" Z: P4 g7 [& ]& x7 Q . v8 E7 T% Q0 H0 k2 e0 z 目的和益处 本设计建议阐释了如何分析和识别 MEMS 传感器中的噪声。解释了 Allan 和 Hadamard 方差及其变体(重叠、修正和总体)。还提到了理论方差#1(Theo1)。 优势:1 r% ^7 ~( }8 K, F8 A 如何通过 Allan 和其他方差来表征 MEMS 传感器% z, `$ x! O. g0 h 信号和噪声& {8 `/ i7 o- A 基本假设是:测量期间目标信号是恒定且平稳的。但是传感器输出是目标信号和噪声的总和。大体上,从长期看噪声应该平均为零。* N# c9 L; c# o* |/ e$ S 测量期间采集多个样本。噪声的分析和识别可以帮助确定要使传感器输出的方差最小,需要对 多少个样本取平均。 标准方差的问题在于,它不能很好地表征增加数据运行长度时的情形。为了解决此问题,开发出了 Allan 方差。Allan 方差 σ2被计算为连续“样本”(2 样本方差)之间的平方差的平均值。 通过在时间间隔 τ = m*Ts 中对 m 个样本求平均来计算“样本”,其中 Ts=1/Fs 是采样间隔,Fs 是采样频率。: K+ l M* S$ T5 `, o& ^7 g , i3 F/ N) e9 m. P 3 k' ^ M/ t7 }* I9 s4 [9 f$ P V5 p Allan 方差等等, s: d6 B* A" Q7 C) b) y7 v, `' c Allan 偏差 σ(τ)是 Allan 方差 σ2(τ)的平方根。对数-对数图的斜率取决于噪声类型。该斜率能够识别噪声类型。参见下表。% K# X; U* O6 H' C- E+ A 可以使用数字滤波器链来计算 Allan 方差(非重叠 AVAR,重叠 OAVAR,修正 MAVAR)和Hadamard 方差(非重叠 HVAR 和重叠 OHVAR): # N4 U- m7 Y' R P M(m)是 m 个样本的移动平均值,, F/ ^0 q" ?! k! G) y( D D1(m)是第 n 个样本与第(n+m+1) 个样本之间的一阶差, m:通过从 m 个样本中选择 1 个样本进行 1 次下采样% Y) B, i/ S" _6 I* ^- E' u 9 D; F+ s9 D( z+ d( r" V: x6 X3 d 瞬态不得出现在输出中。通过对输出样本求平方和求平均来计算方差。偏差是方差的平方根。可以将偏差的置信度估计为偏差本身除以平均输出样本数的平方根。 ' W% }1 D. Y: V8 [! D/ r# f) J 一些重要说明: 重叠 Allan(OAVAR)和重叠 Hadamard 方差(OHVAR)具有更好的置信度,应该用于 m = 10%的数据运行长度情况下。 时间方差(TVAR)是修正 Allan 方差(MAVAR)的缩放版本,缩放因子是 τ2/3。对于白相位噪声它是最佳的(这意味着:白高斯噪声的导数,称为白频噪声)。4 {6 v: Y# Y+ _( |9 g2 K7 K/ B, T Allan 总体、修正总体和 Hadamard 总体方差在 m = 30-50%的数据运行长度时具有更好的置信度。通过在两侧反射来扩展数据运行长度,以此来计算总体方差。对于Allan,反射样本数量为 2m,对于修正 Allan 和 Hadamard,反应样本数量为 3m。 理论#1 方差(Theo1)在 m = 75%的数据运行长度下具有更好的置信度。对于所有其他方差,步幅时间与用于计算“样本”的平均时间相同,var(τ=m*Ts)。对于 Theo1,步幅时间是 m*Ts 减去平均时间;平均时间从 m/2 下降到 1;步幅时间从 m/2 降到m-1;平均步幅时间为 0.75*m*Ts:Theo1(τ=0.75*m*Ts)。Theo1 有偏差,Theo1BR(去除偏差)是无偏的,m <10%时 Theo1H 是 Allan,而 m> 10%时是Theo1BR。( U: L6 g! H/ J. L0 J$ X' [8 |2 c 用来计算方差的 MatLab 代码9 A9 }. Y8 i! s) N& p 这是将上述方差计算为数字滤波器链的参考 MatLab 代码。; l' Q; E5 L! t8 f4 \# e; _6 { ; n0 U9 j" Q7 Q % Allan 作为一个数字滤波器 n % 平均因子,平均 n 个样本( d E* G- V: y0 a1 D/ p Fs % 采样频率 Ts=1/Ts; tau=n*Ts; %---- STDVAR 和 OSTDVAR Mn=ones(1,n)/n; % 平均滤波器 dataM=filter(Mn,1,data); dataM=dataM(n:end); % 滤波并去除瞬态$ K4 c5 a" x) H' o2 @ ostdvar()=var(dataM); stdvar()=var(dataM(1:n:end));0 ]% I8 S& { Y* g, k* N %---- AVAR 和 OAVAR7 D$ G) [1 B, W5 \$ u. B D1n=zeros(1,n+1); D1n(1)=+1; D1n(end)=-1; % 差分滤波器8 S% v8 B9 {) i+ h# P$ j3 C: v/ C dataMD=filter(D1n,1,dataM); dataMD=dataMD(n+1:end); % 滤波并去除瞬态 L=length(dataMD); oavar()=0.5*sum(dataMD.^2)/(L);9 F! L1 b$ R/ [7 w* T8 ]! g1 _ L=length(dataMD(1:n:end)); avar()=0.5*sum(dataMD(1:n:end).^2)/(L); 0 i3 |$ ?7 M* \& a5 R% i; K6 D / ~9 X( y& E* T$ }7 P* g9 _ %---- MAVAR dataMDM=filter(Mn,1,dataMD);$ w7 T# g: j7 ]6 t) u dataMDM=dataMDM(n:end); L=length(dataMDM); mavar()=0.5*sum(dataMDM.^2)/(L); 6 x: B4 J1 ^: o, t$ ]% T# h %---- HVAR 和 OHVAR" c5 v+ c, h& R2 X# U' ]6 E) S dataMDD=filter(D1n,1,dataMD); dataMDD=dataMDD(n+1:end); % 滤波并去除瞬态# ]+ q" [3 V5 {! H( F& D6 Y6 x5 ]6 J! c L=length(dataMDD); ohvar()=0.5*sum(dataMDD.^2)/(L); L=length(dataMDD(1:n:end)); hvar()=0.5*sum(dataMDD(1:n:end).^2)/(L); & C" a8 `& Z6 e! ?% m6 L* F 上述代码中最慢的一行是移动平均滤波器。如果在添加新项的同时丢弃旧项并保持运行总量不变,则执行速度会快很多。* ?4 a8 D0 i# @+ ]2 Q$ q/ o % OAVAR 最优化+ L. Q/ X8 s9 D) r( g" ]; n n2=n*n;" {! r Q0 v% Z; a acc(1)=sum(data(1:n)); % 初始化运行总数9 ^# \" Q0 z* m1 i# \" e' } for i=1:N-n, acc(i+1)=acc(i)-data(i)+data(i+n); end; % 运行总数 oavar()=0.5*sum( (acc(1:N-2*n+1) - acc(1+n:N-n+1)).^2 )/(N-2*n+1)/n2;2 r1 \7 p0 g; g0 e ?7 Z7 M 4 W- U8 Q& R- C& L) w % AVAR( a# R3 J8 ?7 [" x6 S diffL=fix((N-2*n+1 -1)/n)+1; avar()=0.5*sum( (acc(1:n:N-2*n+1)-acc(1+n:n:N-n+1)).^2 )/(diffL)/n2;, j6 a1 j7 _/ C. ~+ m. ? 4 M! N2 V/ `: V3 U2 A+ J) U % STDVAR 和 OSTDVAR stdvar()=var(acc(1:n:N-n+1))/n2;! r( L7 K, L9 J1 N8 Z ostdvar()=var(acc(1:N-n+1))/n2;1 W# ^9 B" Z; r5 x7 E2 |3 f* T4 G; U- u % MAVAR 最优化7 _( B) h) g, r2 p* {6 z4 o n4=n2*n2;! D( o% o# T" w6 O acc2(1)=sum(acc(1:n)); % 初始化运行总数1 N1 o( W; i/ r6 L' V$ V- r for i=1:N-2*n+1, acc2(i+1)=acc2(i)-acc(i)+acc(i+n); end; % 运行总数 mavar()=0.5*sum( (acc2(1:N-3*n+2) - acc2(1+n:N-2*n+2)).^2 )/(N-3*n+2)/n4;3 \+ {$ ~( Q+ y) a% _ % OHVAR+ [$ |! y& w# X \ ohvar()=0.5*sum( ( (acc(1 :N-3*n+1) - acc(1+ n:N-2*n+1)) - ... (acc(1+n:N-2*n+1) - acc(1+2*n:N- n+1)) ).^2 )/(N-3*n+1)/n2; ~& u: \. N' T+ }. q ; a; J6 ]) A: d: l/ } % HVAR diffL=fix((N-3*n+1 -1)/n)+1; hvar()=0.5*sum( ( (acc(1 :n:N-3*n+1) - acc(1+ n:n:N-2*n+1)) - ... (acc(1+n:n:N-2*n+1) - acc(1+2*n:n:N- n+1)) ).^2 )/(diffL)/n2;) d+ I( C. N2 z9 v/ y8 n 代码可以进一步优化。例如,对于优化的 C 代码,有可能计算一次得出方差(但通常需要两次计算:第一次用于求均值,第二次用来求实际方差)。 完整版请查看:附件 |
MEMS 传感器中的噪声分析和识别,Allan,时间,Hadamard,重叠,修正,总体方差.pdf.pdf
下载674.18 KB, 下载次数: 0
基于STM32的BootLoader经验分享
基于STM32如何选择 S2-LP 的外部晶体经验分享
基于是STM32的BLE 设备地址经验分享
基于ToF传感器的3D手势识别
NUCLEO-U545RE-Q评测(2)运行环境建立
基于使用 STM32 TT 类型 IO 的注意事项经验分享
基于STM32使用Framebuffer_Analyzer工具调试图像显示
ST安全连接,护航工业物联网一路前行
基于STM32的TouchGFX 4.22解锁新功能经验分享
基于STM32的MPU子区经验分享