正弦波信号序列的最小二乘拟合算法

理想正弦信号可用下述四参数表达式表示:
y ( t ) = A 0 cos ⁡ ( ω 0 t ) + B 0 sin ⁡ ( ω 0 t ) + C 0 y(t)=A_0\cos(\omega_0t)+B_0\sin(\omega_0t)+C_0 y(t)=A0cos(ω0t)+B0sin(ω0t)+C0
或:
y ( t ) = A 0 cos ⁡ ( ω 0 t + θ ) + C y(t)=A_0\cos(\omega_0t+\theta)+C y(t)=A0cos(ω0t+θ)+C
用指定参数的正弦波作为数字存储示波器的输人,得到一组数据记录。通过改变拟合正弦信号的相位、幅度、直流偏移和频率,使拟合结果和输人记录序列各点的残差平方和最小。这里提供两种正弦拟合方法:一种用于采样频率和被测信号输入频率均已知时;另一种用于信号频率未知时。第一个途径包括两种算法:一种通过矩阵运算,另一种通过迭代过程。对于已知信号频率的情况,当初始条件相同时,上述两个算法结果一致。但两者和收敛性不一样,使用矩阵算法的收敛速度比不使用矩阵的快,特别是信号周期数小于 5 5 5个时。

注: 下列 1 1 1中所述的三参数算法(对已知频率)是一种闭合算法。因此,总能获得一个结果。但是,如果算法中使用的频率(假设已知)和实际输入的频率不一样,或采集速率有较大误差,三参数算法的结果比稍后所述的四参数算法结果要差。但 2 2 2中的四参数算法在初始条件偏离较多,或有一些特别不正确的数据下,迭代过程可能发散。

1 正弦波三参数(已知频率)最小二乘拟合算法

1.1 正弦信号三参数最小二乘拟合——矩阵算法

设理想正弦信号为:
y ( t ) = A 0 cos ⁡ ( ω 0 t ) + B 0 sin ⁡ ( ω 0 t ) + C 0 y(t)=A_0\cos(\omega_0t)+B_0\sin(\omega_0t)+C_0 y(t)=A0cos(ω0t)+B0sin(ω0t)+C0
数据记录序列为时刻 t 1 , t 2 , . . . , t m t_1,t_2,...,t_m t1,t2,...,tm的采集样本 Y 1 , Y 2 , . . . , Y m Y_1,Y_2,...,Y_m Y1,Y2,...,Ym,拟合过程即为选取或寻找 A 0 , B 0 , C 0 A_0,B_0,C_0 A0,B0,C0,使下式所述残差平方和最小:
∑ n = 1 M [ Y n − A 0 cos ⁡ ( ω 0 t ) − B 0 sin ⁡ ( ω 0 t ) − C 0 ] 2 \begin{equation} \sum_{n=1}^{M}[Y_n-A_0\cos(\omega_0t)-B_0\sin(\omega_0t)-C_0]^2 \end{equation} n=1M[YnA0cos(ω0t)B0sin(ω0t)C0]2
式中 ω 0 \omega_0 ω0是数字存储示波器输人信号频率(假设已知)。
为了找出合适的 A 0 , B 0 A_0,B_0 A0,B0 C 0 C_0 C0值,首先构造下列矩阵:
D 0 = [ cos ⁡ ( ω 0 t 1 ) sin ⁡ ( ω 0 t 1 ) 1 cos ⁡ ( ω 0 t 2 ) sin ⁡ ( ω 0 t 2 ) 1 ⋮ ⋮ ⋮ cos ⁡ ( ω 0 t M ) sin ⁡ ( ω 0 t M ) 1 ]   y = [ y 1 y 2 ⋮ y M ]   x 0 = [ A 0 B 0 C 0 ] D_0 = \begin{bmatrix} \cos(\omega_0t_1) & \sin(\omega_0t_1) & 1 \\ \cos(\omega_0t_2) & \sin(\omega_0t_2) & 1 \\ \vdots & \vdots & \vdots \\ \cos(\omega_0t_M) & \sin(\omega_0t_M) & 1 \end{bmatrix} \ y= \begin{bmatrix} y_1 \\ y_2 \\ \vdots \\ y_M \end{bmatrix}\ x_0 = \begin{bmatrix} A_0 \\ B_0 \\ C_0 \end{bmatrix} D0= cos(ω0t1)cos(ω0t2)cos(ω0tM)sin(ω0t1)sin(ω0t2)sin(ω0tM)111  y= y1y2yM  x0= A0B0C0
( 1 ) (1) (1)可用矩阵方式表示如下
( y − D 0 x 0 ) T ( y − D 0 x 0 ) \begin{equation} (y-D_0x_0)^T(y-D_0x_0) \end{equation} (yD0x0)T(yD0x0)
这里 ( ∗ ) T (*)^T ()T*表示矩阵 ( ∗ ) (*) ()*的转置,可以得出式 ( 2 ) (2) (2)最小时的最小二乘解 x 0 ^ \hat{x_0} x0^

x 0 ^ = ( D 0 T D 0 ) − 1 ( D 0 T y ) \hat{x_0} = (D_0^TD_0)^{-1}(D_0^Ty) x0^=(D0TD0)1(D0Ty)
拟合函数为:
y n ′ = A 0 cos ⁡ ( ω 0 t n ) + B 0 sin ⁡ ( ω 0 t n ) + C 0 y_n'=A_0\cos(\omega_0t_n)+B_0\sin(\omega_0t_n)+C_0 yn=A0cos(ω0tn)+B0sin(ω0tn)+C0
将其转换为幅度和相位表达形式:
y n ′ = A cos ⁡ ( ω 0 t n + θ ) + C y_n'=A\cos(\omega_0t_n+\theta)+C yn=Acos(ω0tn+θ)+C
式 中:
A =   A 0 2 + B 0 2 θ = tan ⁡ − 1 [ − B 0 A 0 ] ,   A 0 ≥ 0 θ = tan ⁡ − 1 [ − B 0 A 0 ]   +   π ,   A 0 < 0 A =\ \sqrt[]{A_0^2+B_0^2} \\ \theta = \tan^{-1}[\frac{-B_0}{A_0}],\ A_0\ge 0 \\ \theta = \tan^{-1}[\frac{-B_0}{A_0}]\ +\ \pi,\ A_0 < 0 A= A02+B02 θ=tan1[A0B0], A00θ=tan1[A0B0] + π, A0<0
拟合残差 r n r_n rn,如下:
r n = y n − A 0 cos ⁡ ( ω 0 t n ) − B 0 sin ⁡ ( ω 0 t n ) − C 0 r_n=y_n-A_0\cos( \omega_0t_n)-B_0\sin(\omega_0t_n)-C_0 rn=ynA0cos(ω0tn)B0sin(ω0tn)C0
拟合残差有效值如下:
ϵ r m s = 1 M ∑ n = 1 M r n 2 \epsilon_{rms}=\sqrt[]{\frac{1}{M}\sum_{n=1}^{M}{r_n^2}} ϵrms=M1n=1Mrn2

1.2 正弦信号三参数最小二乘拟合——代数方程算法

设数据记录序列为包含了一系列在时刻 t M t_M tM上采集的正弦信号样本 y M y_M yM,数字存储示波器输人信号的角频率为 ω \omega ω,定义:

α n = cos ⁡ ( ω t n ) β n = sin ⁡ ( ω t n ) \alpha_n = \cos(\omega t_n) \\ \beta_n = \sin(\omega t_n) αn=cos(ωtn)βn=sin(ωtn)
然后计算下面9个和:
∑ n = 1 M y n      ∑ n = 1 M α n      ∑ n = 1 M β n ∑ n = 1 M α n β n      ∑ n = 1 M α n 2      ∑ n = 1 M β n 2 ∑ n = 1 M y n α n      ∑ n = 1 M y n β n      ∑ n = 1 M y n 2 \sum_{n=1}^{M}{y_n}\ \ \ \ \sum_{n=1}^{M}{\alpha_n}\ \ \ \ \sum_{n=1}^{M}{\beta_n}\\ \sum_{n=1}^{M}{\alpha_n\beta_n}\ \ \ \ \sum_{n=1}^{M}{\alpha_n^2}\ \ \ \ \sum_{n=1}^{M}{\beta_n^2}\\ \sum_{n=1}^{M}{y_n\alpha_n}\ \ \ \ \sum_{n=1}^{M}{y_n\beta_n}\ \ \ \ \sum_{n=1}^{M}{y_n^2}\\ n=1Myn    n=1Mαn    n=1Mβnn=1Mαnβn    n=1Mαn2    n=1Mβn2n=1Mynαn    n=1Mynβn    n=1Myn2
使用这些和计算:
A 1 = A N A D B 1 = B N B D C = y ˉ − A 1 α ˉ − B 1 β ˉ A_1=\frac{A_N}{A_D} \\ B_1=\frac{B_N}{B_D} \\ C=\bar{y}-A_1\bar{\alpha}-B_1\bar{\beta} A1=ADANB1=BDBNC=yˉA1αˉB1βˉ
式中:
A N = ∑ n = 1 M y n α n − y ˉ ∑ n = 1 M α n ∑ n = 1 M α n β n − β ˉ ∑ n = 1 M α n − ∑ n = 1 M y n β n − y ˉ ∑ n = 1 M β n ∑ n = 1 M β n 2 − β ˉ ∑ n = 1 M β n A D = ∑ n = 1 M α n 2 − α ˉ ∑ n = 1 M α n ∑ n = 1 M α n β n − β ˉ ∑ n = 1 M α n − ∑ n = 1 M α n β n − α ˉ ∑ n = 1 M β n ∑ n = 1 M β n 2 − β ˉ ∑ n = 1 M β n B N = ∑ n = 1 M y n α n − y ˉ ∑ n = 1 M α n ∑ n = 1 M α n 2 − α ˉ ∑ n = 1 M α n − ∑ n = 1 M y n β n − y ˉ ∑ n = 1 M β n ∑ n = 1 M α n β n − α ˉ ∑ n = 1 M β n B D = ∑ n = 1 M α n β n − β ˉ ∑ n = 1 M α n ∑ n = 1 M α n 2 − α ˉ ∑ n = 1 M α n − ∑ n = 1 M β n 2 − β ˉ ∑ n = 1 M β n ∑ n = 1 M α n β n − α ˉ ∑ n = 1 M β n y ˉ = 1 M ∑ n = 1 M y n     α ˉ = 1 M ∑ n = 1 M α n     β ˉ = 1 M ∑ n = 1 M β n A_N=\frac{\sum_{n=1}^{M}{y_n\alpha_n}-\bar{y}\sum_{n=1}^{M}{\alpha_n}}{\sum_{n=1}^{M}{\alpha_n\beta_n}-\bar{\beta}\sum_{n=1}^{M}{\alpha_n}}-\frac{\sum_{n=1}^{M}{y_n\beta_n}-\bar{y}\sum_{n=1}^{M}{\beta_n}}{\sum_{n=1}^{M}{\beta_n^2}-\bar{\beta}\sum_{n=1}^{M}{\beta_n}} \\ A_D=\frac{\sum_{n=1}^{M}{\alpha_n^2}-\bar{\alpha}\sum_{n=1}^{M}{\alpha_n}}{\sum_{n=1}^{M}{\alpha_n\beta_n}-\bar{\beta}\sum_{n=1}^{M}{\alpha_n}}-\frac{\sum_{n=1}^{M}{\alpha_n\beta_n}-\bar{\alpha}\sum_{n=1}^{M}{\beta_n}}{\sum_{n=1}^{M}{\beta_n^2}-\bar{\beta}\sum_{n=1}^{M}{\beta_n}} \\ B_N=\frac{\sum_{n=1}^{M}{y_n\alpha_n}-\bar{y}\sum_{n=1}^{M}{\alpha_n}}{\sum_{n=1}^{M}{\alpha_n^2}-\bar{\alpha}\sum_{n=1}^{M}{\alpha_n}}-\frac{\sum_{n=1}^{M}{y_n\beta_n}-\bar{y}\sum_{n=1}^{M}{\beta_n}}{\sum_{n=1}^{M}{\alpha_n\beta_n}-\bar{\alpha}\sum_{n=1}^{M}{\beta_n}} \\ B_D=\frac{\sum_{n=1}^{M}{\alpha_n\beta_n}-\bar{\beta}\sum_{n=1}^{M}{\alpha_n}}{\sum_{n=1}^{M}{\alpha_n^2}-\bar{\alpha}\sum_{n=1}^{M}{\alpha_n}}-\frac{\sum_{n=1}^{M}{\beta_n^2}-\bar{\beta}\sum_{n=1}^{M}{\beta_n}}{\sum_{n=1}^{M}{\alpha_n\beta_n}-\bar{\alpha}\sum_{n=1}^{M}{\beta_n}} \\ \bar{y}=\frac{1}{M}\sum_{n=1}^{M}{y_n}\ \ \ \bar{\alpha}=\frac{1}{M}\sum_{n=1}^{M}{\alpha_n}\ \ \ \bar{\beta}=\frac{1}{M}\sum_{n=1}^{M}{\beta_n} AN=n=1Mαnβnβˉn=1Mαnn=1Mynαnyˉn=1Mαnn=1Mβn2βˉn=1Mβnn=1Mynβnyˉn=1MβnAD=n=1Mαnβnβˉn=1Mαnn=1Mαn2αˉn=1Mαnn=1Mβn2βˉn=1Mβnn=1Mαnβnαˉn=1MβnBN=n=1Mαn2αˉn=1Mαnn=1Mynαnyˉn=1Mαnn=1Mαnβnαˉn=1Mβnn=1Mynβnyˉn=1MβnBD=n=1Mαn2αˉn=1Mαnn=1Mαnβnβˉn=1Mαnn=1Mαnβnαˉn=1Mβnn=1Mβn2βˉn=1Mβnyˉ=M1n=1Myn   αˉ=M1n=1Mαn   βˉ=M1n=1Mβn
拟合函数如下:
y n ′ = A 1 cos ⁡ ( ω t n ) + B 1 sin ⁡ ( ω t n ) + C y_n'=A_1\cos(\omega t_n)+B_1\sin(\omega t_n)+C yn=A1cos(ωtn)+B1sin(ωtn)+C
其幅度和相位表达形式:
y n ′ = A cos ⁡ ( ω t n + θ ) + C y_n'=A\cos(\omega t_n+\theta)+C yn=Acos(ωtn+θ)+C
式中:
A =   A 1 2 + B 1 2 θ = tan ⁡ − 1 [ − B 1 A 1 ] ,   A 1 ≥ 0 θ = tan ⁡ − 1 [ − B 1 A 1 ]   +   π ,   A 1 < 0 A =\ \sqrt[]{A_1^2+B_1^2} \\ \theta = \tan^{-1}[\frac{-B_1}{A_1}],\ A_1\ge 0 \\ \theta = \tan^{-1}[\frac{-B_1}{A_1}]\ +\ \pi,\ A_1 < 0 A= A12+B12 θ=tan1[A1B1], A10θ=tan1[A1B1] + π, A1<0
拟合残差有效值为:
ϵ r m s = ϵ M \epsilon_{rms}=\sqrt[]{\frac{\epsilon}{M}} ϵrms=Mϵ
式中:
ϵ = ∑ n = 1 M y n 2 + A 1 2 ∑ n = 1 M α n 2 + B 1 2 ∑ n = 1 M β n 2 + M C 2 − 2 A 1 ∑ n = 1 M α n y n − 2 B 1 ∑ n = 1 M β n y n − 2 C ∑ n = 1 M y n + 2 A 1 B 1 ∑ n = 1 M α n β n + 2 A 1 C ∑ n = 1 M α n + 2 B 1 C ∑ n = 1 M β n = ∑ n = 1 M ( y n − A 1 α n − B 1 β n − C ) 2 = ∑ n = 1 M ( y n − y n ′ ) 2 \epsilon = \sum_{n=1}^{M}{y_n^2}+A_1^2\sum_{n=1}^{M}{\alpha_n^2}+B_1^2\sum_{n=1}^{M}{\beta_n^2}+MC^2-2A_1\sum_{n=1}^{M}{\alpha_ny_n}-2B_1\sum_{n=1}^{M}{\beta_ny_n}-2C\sum_{n=1}^{M}{y_n}+2A_1B_1\sum_{n=1}^{M}{\alpha_n\beta_n}+2A_1C\sum_{n=1}^{M}{\alpha_n}+2B_1C\sum_{n=1}^{M}{\beta_n} = \sum_{n=1}^{M}{(y_n-A_1\alpha_n-B_1\beta_n-C)^2}=\sum_{n=1}^{M}{(y_n-y_n')^2} ϵ=n=1Myn2+A12n=1Mαn2+B12n=1Mβn2+MC22A1n=1Mαnyn2B1n=1Mβnyn2Cn=1Myn+2A1B1n=1Mαnβn+2A1Cn=1Mαn+2B1Cn=1Mβn=n=1M(ynA1αnB1βnC)2=n=1M(ynyn)2
由于这是一种闭合算法,因而收敛是肯定的。

2 正弦波四参数最小二乘拟合算法

2.1正弦波信号四参数最小二乘拟合——矩阵迭代算法

设正弦数据记录序列中时刻 t 1 , t 2 , . . . , t m t_1,t_2,...,t_m t1,t2,...,tm上采集的样本 y 1 , y 2 , . . . , y m y_1,y_2,...,y_m y1,y2,...,ym,可使用迭代过程寻找到 A i , B i , C i A_i,B_i,C_i AiBi,Ci ω i \omega_i ωi值,使得下式所述残差平方和最小:
∑ n = 1 M [ y n − A 1 cos ⁡ ( ω i t n ) − B i sin ⁡ ( ω i t n ) − C i ] 2 \begin{equation} \sum_{n=1}^{M}\left[y_{n}-A_{1} \cos \left(\omega_{i} t_{n}\right)-B_{i} \sin \left(\omega_{i} t_{n}\right)-C_{i}\right]^{2} \end{equation} n=1M[ynA1cos(ωitn)Bisin(ωitn)Ci]2

式中, ω i \omega_i ωi为数字存储示波器输人信号的频率。

其操作步骤如下:

a)设置循环指针 i = 0 i=0 i=0,对数字存储示波器输人信号的角频率 ω 0 \omega_0 ω0作一个初始估计。可以用离散傅里叶变换( D F T DFT DFT)来计算频率;或者通过数波形过零点个数计算频率;或简单地输人一个测量频率初始值。使用 1 1 1中给定的三参数矩阵算法,进行拟合以确定 A 0 , B 0 A_0,B_0 A0,B0 C 0 C_0 C0
b)设置 i = i + 1 i=i+1 i=i+1作下一次迭代。
c)使用下式获得新的角频率:
ω i = ω i − 1 + Δ ω i − 1    ( 当 i = 1 时, Δ ω i − 1 = 0 ) \omega_{i}=\omega_{i-1}+\Delta\omega_{i-1}\ \ (当i=1时,\Delta\omega_{i-1}=0) ωi=ωi1+Δωi1  (i=1时,Δωi1=0)
d)构造如下矩阵

y = [ y 1 y 2 ⋮ y M ] D i = [ cos ⁡ ( ω i t 1 ) sin ⁡ ( ω i t 1 ) 1 − A i − 1 t 1 sin ⁡ ( ω i t 1 ) + B i − 1 t 1 cos ⁡ ( ω i t 1 ) cos ⁡ ( ω i t 2 ) sin ⁡ ( ω i t 2 ) 1 − A i − 1 t 2 sin ⁡ ( ω i t 2 ) + B i − 1 t 2 cos ⁡ ( ω i t 2 ) ⋮ ⋮ ⋮ ⋮ cos ⁡ ( ω i t M ) sin ⁡ ( ω i t M ) 1 − A i − 1 t M sin ⁡ ( ω i t M ) + B i − 1 t M cos ⁡ ( ω i t M ) ] x i = [ A i B i C i Δ ω i ] y=\left[\begin{array}{c}y_{1} \\y_{2} \\\vdots \\y_{M}\end{array}\right] \\\begin{array}{l}\mathrm{D}_{\mathrm{i}}=\left[\begin{array}{cccc}\cos \left(\omega_{i} t_{1}\right) & \sin \left(\omega_{i} t_{1}\right) & 1 & -A_{i-1} t_{1} \sin \left(\omega_{i} t_{1}\right)+B_{i-1} t_{1} \cos \left(\omega_{i} t_{1}\right) \\\cos \left(\omega_{i} t_{2}\right) & \sin \left(\omega_{i} t_{2}\right) & 1 & -A_{i-1} t_{2} \sin \left(\omega_{i} t_{2}\right)+B_{i-1} t_{2} \cos \left(\omega_{i} t_{2}\right) \\\vdots & \vdots & \vdots & \vdots \\\cos \left(\omega_{i} t_{M}\right) & \sin \left(\omega_{i} t_{M}\right) & 1 & -A_{i-1} t_{M} \sin \left(\omega_{i} t_{M}\right)+B_{i-1} t_{M} \cos \left(\omega_{i} t_{M}\right)\end{array}\right] \\x_{i}=\left[\begin{array}{l}A_{i} \\B_{i} \\C_{i} \\\Delta \omega_{i}\end{array}\right]\end{array} y= y1y2yM Di= cos(ωit1)cos(ωit2)cos(ωitM)sin(ωit1)sin(ωit2)sin(ωitM)111Ai1t1sin(ωit1)+Bi1t1cos(ωit1)Ai1t2sin(ωit2)+Bi1t2cos(ωit2)Ai1tMsin(ωitM)+Bi1tMcos(ωitM) xi= AiBiCiΔωi
e)使式(3)达到最小的最小二乘解用矩阵形式表示如下:
x i ^ = ( D i T D i ) − 1 ( D i T y ) \hat{x_i}=(D_i^TD_i)^{-1}(D_i^Ty) xi^=(DiTDi)1(DiTy)
f)按下式计算幅度 A A A和相位 θ \theta θ
y n ′ = A cos ⁡ ( ω t n + θ ) + C y_n'=A\cos(\omega t_n+\theta)+C yn=Acos(ωtn+θ)+C

式中:

A =   A i 2 + B i 2 θ = tan ⁡ − 1 [ − B i A i ] ,   A i ≥ 0 θ = tan ⁡ − 1 [ − B i A i ]   +   π ,   A i < 0 A =\ \sqrt[]{A_i^2+B_i^2} \\ \theta = \tan^{-1}[\frac{-B_i}{A_i}],\ A_i\ge 0 \\ \theta = \tan^{-1}[\frac{-B_i}{A_i}]\ +\ \pi,\ A_i < 0 A= Ai2+Bi2 θ=tan1[AiBi], Ai0θ=tan1[AiBi] + π, Ai<0
9)重复步骤b)到f),根据上一次迭代得到的 A i , B i , ω i A_i,B_i,\omega_i Ai,Bi,ωi的值,继续迭代直到与 A , ω , θ A,\omega,\theta A,ω,θ C C C的变化小到满足要求。
拟合残差如下:
r n = y n − A i cos ⁡ ( ω i t n ) − B i sin ⁡ ( ω i t n ) − C i r_n=y_n-A_i\cos( \omega_it_n)-B_i\sin(\omega_it_n)-C_i rn=ynAicos(ωitn)Bisin(ωitn)Ci
误差有效值如下:
ϵ r m s = 1 M ∑ n = 1 M r n 2 \epsilon_{rms}=\sqrt[]{\frac{1}{M}\sum_{n=1}^{M}{r_n^2}} ϵrms=M1n=1Mrn2

2.2 正弦信号四参数最小二乘拟合——非矩阵迭代算法

对采集记录下来的数据序列估计一个角频率初始值 ω \omega ω和相位初始值 θ \theta θ,这里的相位指的是记录中的第一个点对应的相位。角频率用弧度每秒来表示,可以用离散傅里叶变换( D F T DFT DFT)或计算序列过零次数得到,也可以直接使用输人信号频率算得。
相位用弧度来表示,可以按 1 1 1中所述三参数法计算得到。或者用下面的公式计算得到:
[ sign ⁡ ( y 2 − y 1 ) ] cos ⁡ − 1 ( y 1 − C A ) {\left[\operatorname{sign}\left(y_{2}-y_{1}\right)\right] \cos ^{-1}\left(\frac{y_{1}-C}{A}\right)} [sign(y2y1)]cos1(Ay1C)
式中:
sign ⁡ ( y 2 − y 1 ) = { 1 , y 2 ⩾ y 1 − 1 , y 2 < y 1 \operatorname{sign}\left(y_{2}-y_{1}\right)=\left\{\begin{array}{l}1, y_{2} \geqslant y_{1} \\-1, y_{2}<y_{1}\end{array}\right. sign(y2y1)={1,y2y11,y2<y1
y 1 y_1 y1 t = 0 t=0 t=0的第一个样本点; y 2 y_2 y2是紧跟着 y 1 y_1 y1的下一个样本点; C , A C,A C,A分别是正弦波的直流偏移和幅度。
使用上式计算时,估计波形幅度可以参照如下方法:(1)如果数字存储示波器噪声不大,用记录数据中的最大值和最小值的代数差的一半作为波形幅度。(2)用众数法找最大和最小值,计算波形幅度。估计偏移的方法:(1)可以使用记录中的最大值和最小值之和的一半。(2)偏移估计的另一方法是取整数个周期的数据的平均值。注意,如果在每个周期中点太少,符号 ( y 2 − y 1 ) (y_2-y_1) (y2y1)能给出不正确的情况。特别是在 cos ⁡ − 1 \cos^{-1} cos1值接近 0 0 0 π \pi π时。
设数据记录序列中包含了一系列时刻 t n t_n tn的取样 y n y_n yn,用以估计 ω \omega ω θ \theta θ,计算下面的16个和:
∑ n = 1 M α n ∑ n = 1 M β n ∑ n = 1 M y n ∑ n = 1 M α n y n ∑ n = 1 M β n y n ∑ n = 1 M α n β n ∑ n = 1 M β n 2 ∑ n = 1 M α n 2 ∑ n = 1 M y n 2 ∑ n = 1 M β n t n y n ∑ n = 1 M α n β n t n ∑ n = 1 M β n 2 t n ∑ n = 1 M β n 2 t n 2 ∑ n = 1 M β n t n ∑ n = 1 M α n t n ∑ n = 1 M β n t n 2 \begin{array}{llll}\sum_{n=1}^{M} \alpha_{n} & \sum_{n=1}^{M} \beta_{n} & \sum_{n=1}^{M} y_{n} & \sum_{n=1}^{M} \alpha_{n} y_{n} \\\sum_{n=1}^{M} \beta_{n} y_{n} & \sum_{n=1}^{M} \alpha_{n} \beta_{n} & \sum_{n=1}^{M} \beta_{n}^{2} & \sum_{n=1}^{M} \alpha_{n}^{2} \\\sum_{n=1}^{M} y_{n}^{2} & \sum_{n=1}^{M} \beta_{n} t_{n} y_{n} & \sum_{n=1}^{M} \alpha_{n} \beta_{n} t_{n} & \sum_{n=1}^{M} \beta_{n}^{2} t_{n} \\\sum_{n=1}^{M} \beta_{n}^{2} t_{n}^{2} & \sum_{n=1}^{M} \beta_{n} t_{n} & \sum_{n=1}^{M} \alpha_{n} t_{n} & \sum_{n=1}^{M} \beta_{n} t_{n}^{2}\end{array} n=1Mαnn=1Mβnynn=1Myn2n=1Mβn2tn2n=1Mβnn=1Mαnβnn=1Mβntnynn=1Mβntnn=1Mynn=1Mβn2n=1Mαnβntnn=1Mαntnn=1Mαnynn=1Mαn2n=1Mβn2tnn=1Mβntn2
式中:
α n = cos ⁡ ( ω t n + θ ) β n = sin ⁡ ( ω t n + θ ) \begin{array}{l}\alpha_{n}=\cos \left(\omega t_{n}+\theta\right) \\\beta_{n}=\sin \left(\omega t_{n}+\theta\right)\end{array} αn=cos(ωtn+θ)βn=sin(ωtn+θ)
现在使用 ω \omega ω θ \theta θ的估计值,计算:
Ψ = ω + a 22 R − a 12 S a 11 a 22 − a 12 a 21 ϕ = θ + a 11 S − a 21 R a 11 a 22 − a 12 a 21 \begin{aligned}\Psi & =\omega+\frac{a_{22} R-a_{12} S}{a_{11} a_{22}-a_{12} a_{21}} \\\phi & =\theta+\frac{a_{11} S-a_{21} R}{a_{11} a_{22}-a_{12} a_{21}}\end{aligned} Ψϕ=ω+a11a22a12a21a22Ra12S=θ+a11a22a12a21a11Sa21R
式中:
a 11 = ∑ n = 1 M β n t n ( α n − α ˉ ) ∑ n = 1 M α n t n ( β n − β ˉ ) [ ∑ n = 1 M α n ( α n − α ˉ ) ] 2 − ∑ n = 1 M α n ( α n − α ˉ ) ∑ n = 1 M β n t n 2 ( β n − β ˉ ) [ ∑ n = 1 M α n ( α n − α ˉ ) ] 2 a 12 = ∑ n = 1 M β n t n ( α n − α ˉ ) ∑ n = 1 M α n ( β n − β ˉ ) [ ∑ n = 1 M α n ( α n − α ˉ ) ] 2 − ∑ n = 1 M α n ( α n − α ˉ ) ∑ n = 1 M β n t n ( β n − β ˉ ) [ ∑ n = 1 M α n ( α n − α ˉ ) ] 2 a 21 = ∑ n = 1 M β n ( α n − α ˉ ) ∑ n = 1 M α n t n ( β n − β ˉ ) [ ∑ n = 1 M α n ( α n − α ˉ ) ] 2 − ∑ n = 1 M α n ( α n − α ˉ ) ∑ n = 1 M β n t n ( β n − β ˉ ) [ ∑ n = 1 M α n ( α n − α ˉ ) ] 2 a 22 = ∑ n = 1 M β n ( α n − α ˉ ) ∑ n = 1 M α n ( β n − β ˉ ) [ ∑ n = 1 M α n ( α n − α ˉ ) ] 2 − ∑ n = 1 M α n ( α n − α ˉ ) ∑ n = 1 M β n ( β n − β ˉ ) [ ∑ n = 1 M α n ( α n − α ˉ ) ] 2 R = ∑ n = 1 M β n t n ( y n − y ˉ ) ∑ n = 1 M α n ( y n − y ˉ ) − ∑ n = 1 M t n β n ( α n − α ˉ ) ∑ n = 1 M α n ( α n − α ˉ ) S = ∑ n = 1 M β n ( y n − y ˉ ) ∑ n = 1 M α n ( y n − y ˉ ) − ∑ n = 1 M β n ( α n − α ˉ ) ∑ n = 1 M α n ( α n − α ˉ ) y ˉ = 1 M ∑ n = 1 M y n α ˉ = 1 M ∑ n = 1 M α n β ˉ = 1 M ∑ n = 1 M β n α n = cos ⁡ ( ω t n + θ ) β n = sin ⁡ ( ω t n + θ ) \begin{array}{l}a_{11}=\frac{\sum_{n=1}^{M} \beta_{n} t_{n}\left(\alpha_{n}-\bar{\alpha}\right) \sum_{n=1}^{M} \alpha_{n} t_{n}\left(\beta_{n}-\bar{\beta}\right)}{\left[\sum_{n=1}^{M} \alpha_{n}\left(\alpha_{n}-\bar{\alpha}\right)\right]^{2}}-\frac{\sum_{n=1}^{M} \alpha_{n}\left(\alpha_{n}-\bar{\alpha}\right) \sum_{n=1}^{M} \beta_{n} t_{n}^{2}\left(\beta_{n}-\bar{\beta}\right)}{\left[\sum_{n=1}^{M} \alpha_{n}\left(\alpha_{n}-\bar{\alpha}\right)\right]^{2}} \\a_{12}=\frac{\sum_{n=1}^{M} \beta_{n} t_{n}\left(\alpha_{n}-\bar{\alpha}\right) \sum_{n=1}^{M} \alpha_{n}\left(\beta_{n}-\bar{\beta}\right)}{\left[\sum_{n=1}^{M} \alpha_{n}\left(\alpha_{n}-\bar{\alpha}\right)\right]^{2}}-\frac{\sum_{n=1}^{M} \alpha_{n}\left(\alpha_{n}-\bar{\alpha}\right) \sum_{n=1}^{M} \beta_{n} t_{n}\left(\beta_{n}-\bar{\beta}\right)}{\left[\sum_{n=1}^{M} \alpha_{n}\left(\alpha_{n}-\bar{\alpha}\right)\right]^{2}} \\a_{21}=\frac{\sum_{n=1}^{M} \beta_{n}\left(\alpha_{n}-\bar{\alpha}\right) \sum_{n=1}^{M} \alpha_{n} t_{n}\left(\beta_{n}-\bar{\beta}\right)}{\left[\sum_{n=1}^{M} \alpha_{n}\left(\alpha_{n}-\bar{\alpha}\right)\right]^{2}}-\frac{\sum_{n=1}^{M} \alpha_{n}\left(\alpha_{n}-\bar{\alpha}\right) \sum_{n=1}^{M} \beta_{n} t_{n}\left(\beta_{n}-\bar{\beta}\right)}{\left[\sum_{n=1}^{M} \alpha_{n}\left(\alpha_{n}-\bar{\alpha}\right)\right]^{2}} \\a_{22}=\frac{\sum_{n=1}^{M} \beta_{n}\left(\alpha_{n}-\bar{\alpha}\right) \sum_{n=1}^{M} \alpha_{n}\left(\beta_{n}-\bar{\beta}\right)}{\left[\sum_{n=1}^{M} \alpha_{n}\left(\alpha_{n}-\bar{\alpha}\right)\right]^{2}}-\frac{\sum_{n=1}^{M} \alpha_{n}\left(\alpha_{n}-\bar{\alpha}\right) \sum_{n=1}^{M} \beta_{n}\left(\beta_{n}-\bar{\beta}\right)}{\left[\sum_{n=1}^{M} \alpha_{n}\left(\alpha_{n}-\bar{\alpha}\right)\right]^{2}} \\R=\frac{\sum_{n=1}^{M} \beta_{n} t_{n}\left(y_{n}-\bar{y}\right)}{\sum_{n=1}^{M} \alpha_{n}\left(y_{n}-\bar{y}\right)}-\frac{\sum_{n=1}^{M} t_{n} \beta_{n}\left(\alpha_{n}-\bar{\alpha}\right)}{\sum_{n=1}^{M} \alpha_{n}\left(\alpha_{n}-\bar{\alpha}\right)} \\S=\frac{\sum_{n=1}^{M} \beta_{n}\left(y_{n}-\bar{y}\right)}{\sum_{n=1}^{M} \alpha_{n}\left(y_{n}-\bar{y}\right)}-\frac{\sum_{n=1}^{M} \beta_{n}\left(\alpha_{n}-\bar{\alpha}\right)}{\sum_{n=1}^{M} \alpha_{n}\left(\alpha_{n}-\bar{\alpha}\right)} \\\bar{y}=\frac{1}{M} \sum_{n=1}^{M} y_{n} \\\bar{\alpha}=\frac{1}{M} \sum_{n=1}^{M} \alpha_{n} \\\bar{\beta}=\frac{1}{M} \sum_{n=1}^{M} \beta_{n} \\\alpha_{n}=\cos \left(\omega t_{n}+\theta\right) \\\beta_{n}=\sin \left(\omega t_{n}+\theta\right) \\\end{array} a11=[n=1Mαn(αnαˉ)]2n=1Mβntn(αnαˉ)n=1Mαntn(βnβˉ)[n=1Mαn(αnαˉ)]2n=1Mαn(αnαˉ)n=1Mβntn2(βnβˉ)a12=[n=1Mαn(αnαˉ)]2n=1Mβntn(αnαˉ)n=1Mαn(βnβˉ)[n=1Mαn(αnαˉ)]2n=1Mαn(αnαˉ)n=1Mβntn(βnβˉ)a21=[n=1Mαn(αnαˉ)]2n=1Mβn(αnαˉ)n=1Mαntn(βnβˉ)[n=1Mαn(αnαˉ)]2n=1Mαn(αnαˉ)n=1Mβntn(βnβˉ)a22=[n=1Mαn(αnαˉ)]2n=1Mβn(αnαˉ)n=1Mαn(βnβˉ)[n=1Mαn(αnαˉ)]2n=1Mαn(αnαˉ)n=1Mβn(βnβˉ)R=n=1Mαn(ynyˉ)n=1Mβntn(ynyˉ)n=1Mαn(αnαˉ)n=1Mtnβn(αnαˉ)S=n=1Mαn(ynyˉ)n=1Mβn(ynyˉ)n=1Mαn(αnαˉ)n=1Mβn(αnαˉ)yˉ=M1n=1Mynαˉ=M1n=1Mαnβˉ=M1n=1Mβnαn=cos(ωtn+θ)βn=sin(ωtn+θ)
使用 Ψ \Psi Ψ ϕ \phi ϕ作为新的 ω \omega ω θ \theta θ估计值,重复上述过程,直到两者的差别小到满足要求,产生其拟合函数的形式如下:
y ′ n = A cos ⁡ ( Ψ t n + ϕ ) + C y^{\prime}{ }_{n}=A \cos \left(\Psi t_{n}+\phi\right)+C yn=Acos(Ψtn+ϕ)+C
可按下列式子计算
A = ∑ n = 1 M β n ( y n − y ˉ ) ( α n + β n + β n t n ) ∑ n = 1 M ( α n − α ¨ ) ( α n + β n + β n t n ) C = y ˉ − A α ˉ \begin{aligned}A & =\frac{\sum_{n=1}^{M} \beta_{n}\left(y_{n}-\bar{y}\right)\left(\alpha_{n}+\beta_{n}+\beta_{n} t_{n}\right)}{\sum_{n=1}^{M}\left(\alpha_{n}-\ddot{\alpha}\right)\left(\alpha_{n}+\beta_{n}+\beta_{n} t_{n}\right)} \\C & =\bar{y}-A \bar{\alpha}\end{aligned} AC=n=1M(αnα¨)(αn+βn+βntn)n=1Mβn(ynyˉ)(αn+βn+βntn)=yˉAαˉ
残差有效值为 ( ϵ M ) 1 2 (\frac{\epsilon}{M})^{\frac{1}{2}} (Mϵ)21,这里
ε M = 1 M ∑ n = 1 M y n 2 + A 2 M ∑ n = 1 M α n 2 − 2 A M ∑ n = 1 M α n y n + C 2 − 2 C y ˉ + 2 A C α ˉ = 1 M ∑ n = 1 M ( y n − A x n − C ) 2 = 1 M ∑ n = 1 M ( y n − y n ′ ) 2 \begin{aligned}\frac{\varepsilon}{M} & =\frac{1}{M} \sum_{n=1}^{M} y_{n}^{2}+\frac{A^{2}}{M} \sum_{n=1}^{M} \alpha_{n}^{2}-2 \frac{A}{M} \sum_{n=1}^{M} \alpha_{n} y_{n}+C^{2}-2 C\bar{y}+2 A C\bar{\alpha} \\& =\frac{1}{M} \sum_{n=1}^{M}\left(y_{n}-A x_{n}-C\right)^{2}=\frac{1}{M} \sum_{n=1}^{M}\left(y_{n}-y_{n}^{\prime}\right)^{2}\end{aligned} Mε=M1n=1Myn2+MA2n=1Mαn22MAn=1Mαnyn+C22Cyˉ+2ACαˉ=M1n=1M(ynAxnC)2=M1n=1M(ynyn)2
由于这是一个迭代过程,所以对一些误差很大的估计初始值 ω \omega ω θ \theta θ有可能引起发散。

### MATLAB 中实现傅里叶级数拟合 在 MATLAB 中,可以通过 `fit` 函数来执行傅里叶级数拟合。此函数允许指定模型类型为 `'fourier'` 并定义所需的项数。下面是一个详细的例子说明如何使用该功能。 #### 使用 fit 函数进行傅里叶级数拟合 为了展示具体过程,假设有一个周期性的信号数据集 `(xdata, ydata)` 需要被拟合成傅里叶级数形式: ```matlab % 定义输入变量 (模拟数据) xdata = linspace(0, 2*pi, 100); ydata = sin(xdata) + cos(2*xdata); % 假设这是待拟合的目标函数 % 创建一个四次傅里叶逼近器对象 fitter = fittype('fourier4'); % 执行拟合并获取拟合结果 [fittedModel, gof] = fit(xdata', ydata', fitter); % 显示拟合优度统计信息 disp(gof) % 绘制原始数据与拟合曲线对比图 figure; plot(fittedModel, xdata, ydata); title('Fourier Series Fit to Data'); xlabel('X Axis Label'); ylabel('Y Axis Label'); legend('Original Data','Fitted Curve') ``` 上述代码片段展示了如何利用内置工具箱中的 `fit` 和 `fittype` 来创建并应用傅里叶级数模型到给定的数据上[^1]。 对于更复杂的场景或者自定义需求,则可能需要手动编写傅里叶变换公式来进行参数估计。这通常涉及到最小二乘法或其他数值优化技术以找到最佳匹配系数向量。 #### 自动化处理大数据集时的注意事项 当面对较大的数据集合时,考虑到计算效率问题,建议采用分批读取的方式减少内存占用;同时也可以考虑简化模型结构降低复杂度从而加快运算速度。如果遇到高噪声的情况,应当先尝试去噪预处理步骤再做进一步分析[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值