STMCU小助手
发布时间:2022-12-2 15:20
- Y8 s& w) Q2 K: I/ l% g
9 @: G+ }' ]& _- n5 l: } 目的和益处 本设计建议阐释了如何分析和识别 MEMS 传感器中的噪声。解释了 Allan 和 Hadamard 方差及其变体(重叠、修正和总体)。还提到了理论方差#1(Theo1)。% p8 e* R; H! D, q8 l 优势:! Z# d% z6 @) O0 b: ?# Y 如何通过 Allan 和其他方差来表征 MEMS 传感器5 s! o' K9 z5 e 信号和噪声 基本假设是:测量期间目标信号是恒定且平稳的。但是传感器输出是目标信号和噪声的总和。大体上,从长期看噪声应该平均为零。 测量期间采集多个样本。噪声的分析和识别可以帮助确定要使传感器输出的方差最小,需要对 多少个样本取平均。 标准方差的问题在于,它不能很好地表征增加数据运行长度时的情形。为了解决此问题,开发出了 Allan 方差。Allan 方差 σ2被计算为连续“样本”(2 样本方差)之间的平方差的平均值。! w' S+ T( p/ A) d 通过在时间间隔 τ = m*Ts 中对 m 个样本求平均来计算“样本”,其中 Ts=1/Fs 是采样间隔,Fs 是采样频率。 " n, y1 K+ D* Q! H+ k* A# _4 L8 f Allan 方差等等 Allan 偏差 σ(τ)是 Allan 方差 σ2(τ)的平方根。对数-对数图的斜率取决于噪声类型。该斜率能够识别噪声类型。参见下表。( s& F4 I" n: T- l 可以使用数字滤波器链来计算 Allan 方差(非重叠 AVAR,重叠 OAVAR,修正 MAVAR)和Hadamard 方差(非重叠 HVAR 和重叠 OHVAR): M(m)是 m 个样本的移动平均值,, X) U% b* P+ d( D' f$ }/ i D1(m)是第 n 个样本与第(n+m+1) 个样本之间的一阶差, m:通过从 m 个样本中选择 1 个样本进行 1 次下采样" n, O8 C% i, I- R 瞬态不得出现在输出中。通过对输出样本求平方和求平均来计算方差。偏差是方差的平方根。可以将偏差的置信度估计为偏差本身除以平均输出样本数的平方根。. ~. u8 ]! w( c; ?9 U: o J7 Y , X p/ a0 d' j# W0 W6 s! A! a
8 [ Y2 D( E2 [$ B% C 一些重要说明:; R0 W4 m4 R8 g8 @& b 重叠 Allan(OAVAR)和重叠 Hadamard 方差(OHVAR)具有更好的置信度,应该用于 m = 10%的数据运行长度情况下。 时间方差(TVAR)是修正 Allan 方差(MAVAR)的缩放版本,缩放因子是 τ2/3。对于白相位噪声它是最佳的(这意味着:白高斯噪声的导数,称为白频噪声)。6 v) X7 h* Y1 a 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。( @* F7 h. T" p8 i0 f; C 用来计算方差的 MatLab 代码, M$ p! a5 F( \5 } 这是将上述方差计算为数字滤波器链的参考 MatLab 代码。 % Allan 作为一个数字滤波器/ y& j" c. U; X( F8 D n % 平均因子,平均 n 个样本4 P2 E* U: o5 D3 K+ | Fs % 采样频率 Ts=1/Ts; tau=n*Ts; - I3 _( v; `4 H7 [8 Y* l: X6 ^ %---- STDVAR 和 OSTDVAR2 w7 I# ?' H4 I Mn=ones(1,n)/n; % 平均滤波器 dataM=filter(Mn,1,data); dataM=dataM(n:end); % 滤波并去除瞬态- x1 B6 r8 f- O% b6 T3 h1 f Y ostdvar()=var(dataM);1 X$ J3 n9 P/ m1 s& y; J; C% L stdvar()=var(dataM(1:n:end)); %---- AVAR 和 OAVAR3 g Y# w$ x4 C5 j D1n=zeros(1,n+1); D1n(1)=+1; D1n(end)=-1; % 差分滤波器 dataMD=filter(D1n,1,dataM); dataMD=dataMD(n+1:end); % 滤波并去除瞬态 A; f- v4 \# f0 ? L=length(dataMD); oavar()=0.5*sum(dataMD.^2)/(L); L=length(dataMD(1:n:end)); avar()=0.5*sum(dataMD(1:n:end).^2)/(L); H* X; T/ s- N/ ]! O/ u) \ : j( h2 k$ w& _ %---- MAVAR dataMDM=filter(Mn,1,dataMD);9 q1 U8 f( {7 p# @) N/ U dataMDM=dataMDM(n:end); L=length(dataMDM); mavar()=0.5*sum(dataMDM.^2)/(L); %---- HVAR 和 OHVAR dataMDD=filter(D1n,1,dataMD); dataMDD=dataMDD(n+1:end); % 滤波并去除瞬态2 f/ b ^6 Y( ` L=length(dataMDD); ohvar()=0.5*sum(dataMDD.^2)/(L);9 n2 R+ X% ]& U& X7 j4 G0 f* I L=length(dataMDD(1:n:end)); hvar()=0.5*sum(dataMDD(1:n:end).^2)/(L);& A; ?7 |, v9 [* S% D 上述代码中最慢的一行是移动平均滤波器。如果在添加新项的同时丢弃旧项并保持运行总量不变,则执行速度会快很多。 % OAVAR 最优化" J* O9 q' P7 I, n* d& G) I n2=n*n; acc(1)=sum(data(1:n)); % 初始化运行总数 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;8 J$ `- R: f) b % AVAR0 ]: r& T* }+ P$ u5 _, k6 p$ q& w diffL=fix((N-2*n+1 -1)/n)+1;2 o% M0 o+ T' f1 O e! C" O6 U avar()=0.5*sum( (acc(1:n:N-2*n+1)-acc(1+n:n:N-n+1)).^2 )/(diffL)/n2; 2 {0 Q/ ^% u% w) K* [% f1 _) C0 L % STDVAR 和 OSTDVAR stdvar()=var(acc(1:n:N-n+1))/n2; ostdvar()=var(acc(1:N-n+1))/n2;3 Y* q6 w/ ~' c3 K- G F# u! J6 z. F+ c* |0 b . R( P7 v0 ^4 \; ^4 I4 [6 g9 {. T0 X % MAVAR 最优化 n4=n2*n2; acc2(1)=sum(acc(1:n)); % 初始化运行总数 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; % OHVAR9 N' `. W/ m! W+ P. m# O n ohvar()=0.5*sum( ( (acc(1 :N-3*n+1) - acc(1+ n:N-2*n+1)) - ... a" X' h7 g- Y* F2 b (acc(1+n:N-2*n+1) - acc(1+2*n:N- n+1)) ).^2 )/(N-3*n+1)/n2; % f' f; G/ Y6 Y# g% y8 d % HVAR diffL=fix((N-3*n+1 -1)/n)+1;* m4 v) {& Z+ ^; E$ t, v+ |0 _ hvar()=0.5*sum( ( (acc(1 :n:N-3*n+1) - acc(1+ n:n:N-2*n+1)) - ...6 O/ E+ k& o- ` E% n) i# `# [ (acc(1+n:n:N-2*n+1) - acc(1+2*n:n:N- n+1)) ).^2 )/(diffL)/n2; 代码可以进一步优化。例如,对于优化的 C 代码,有可能计算一次得出方差(但通常需要两次计算:第一次用于求均值,第二次用来求实际方差)。4 U; f% B0 H) N# n8 p9 D5 O 完整版请查看:附件 |
MEMS 传感器中的噪声分析和识别,Allan,时间,Hadamard,重叠,修正,总体方差.pdf.pdf
下载674.18 KB, 下载次数: 0
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
Keil-MDK 在线调试设置断点的高级用法
请教下STM32N6570 怎么把分辨率改成320x240并可以全屏显示
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
使用STM32 MCU和MPU连接PDM数字麦克风
分享STM32资料-采用 STM32U031R8 MCU 的 STM32 Nucleo-64 开发板,官方资料,数据手册等资料
HRTIM 指南
使用 STM32 的 DWT 单元监控内存
DAC,COMP,HRTIM Fault 功能的使用
微信公众号
手机版