Pulsar的DFT模块区别于标准的DFT功能,只适用于Servotest的HUB中的DFT功能,实际是DFT的一个简版,针对某一频率进行的积分变化(所以数据库中看到DFT模块中经加了Filter的字眼(DFT X Filter)),利用了正余弦三角函数的正交性,在一个周期内进行积分变化,得到实部和虚部结果。
1)TriggerSignalName:周期的触发信号,每次触发后对之前的积分结果进行复位,一般为Signal Generator的Zero Crossing信号,某一位为1的bool量,Data Logger记录时由于时浮点量,采集的结果基本为零;
2)SinSignalName:用于积分计算变化的实部部分,与一般DFT或FS里面不一致,
3) CosSignalName:用于积分计算变化的虚部部分,与一般DFT或FS里面不一致,两者由于定义相反,导致将来通过Acrtan(Real,Image)时需要调换一下顺序;
4) FeedbackSignalName:需要进行变化的目标信号,即该信号与标准的Signal Gen输出的波形之间积分变换后的实部、虚部、基频及Command的结果(待确认计算过程)
5)InverseTicksSignalName:为1/N Ticks,表示每个步长的时间,来源于Divide Zero X(Crossing)给计算出的Tick进行求倒数。
0)CommandOutput(仅用于ASC控制)
1)FundamentalOutput
2)RealOutput
3)ImaginaryOutput
其中2)和3)是需要经过一个周期才能给出一个结果,并在下一个周期维持不变,知道下一次Zero Crossing再更新一次。1)是结合当前的Feedback值及上一个周期的Real/Imag值进行实时计算输出。
DFT模块利用了三角函数的正交性,以一种类似傅里叶级数的方法,以每一个完整的周期作为一个DFT的Frame,避免了频率泄露的发生。也不要求整数频率或Frame Size要求,以ZeroCrossing为判断依据,但严格要求频率相等/
一个初始相位未知的正弦波f ( t ) = sin ( 2 π f t + ϕ 0 ) {\color {magenta}f(t)=\sin(2\pi f t+ \phi_0)}f ( t ) = s i n ( 2 π f t + ϕ 0 ) 与相同频率的正弦波sin ( 2 π f t ) {\color {blue}\sin(2\pi f t)}s i n ( 2 π f t ) 与余弦波cos ( 2 π f t ) {\color {red}\cos(2\pi f t)}c o s ( 2 π f t ) (均为零相位)的参考信号相乘后在一个周期内进行积分,与正弦参考信号积分后得到的为实部,与余弦参考信号积分后得到的为虚部,实部与虚部组成的向量即为该输入正弦波的初始相位角。
根据傅里叶级数定义
f ( t ) = C + ∑ n = 1 ∞ ( a n cos ( 2 π f 0 n t ) + b n sin ( 2 π f 0 n t ) ) f(t)=C+\sum_{n=1}^{\infty}\left(a_{n} \cos (2 \pi f_0 n t)+b_{n} \sin (2 \pi f_0 n t)\right)
f ( t ) = C + n = 1 ∑ ∞ ( a n cos ( 2 π f 0 n t ) + b n sin ( 2 π f 0 n t ) )
利用三角函数的正交性推导可得:
{ a n = ∫ 0 T 0 f ( t ) cos ( 2 π f 0 n t ) d t ∫ 0 T 0 2 ( 2 π f 0 n t ) d t = 2 T 0 ∫ 0 T 0 f ( t ) cos ( 2 π f 0 n t ) d t b n = ∫ 0 T 0 f ( t ) sin ( 2 π f 0 n t ) d t ∫ 0 T 0 2 ( 2 π f 0 n t ) d t = 2 T 0 ∫ 0 T 0 f ( t ) sin ( 2 π f 0 n t ) d t \begin {aligned}
\left\{
\begin{matrix}
\begin {aligned}
a_{n}=\cfrac{\int_{0}^{T_0} f(t) \cos (2 \pi f_0 n t) d t}{\int _{0}^{T_0} \cos ^{2}(2 \pi f_0 n t) d t}=\cfrac{2}{T_0} \int _{0}^{T_0} f(t) \cos (2 \pi f_0 n t) dt \\
b_{n}=\cfrac{\int_{0}^{T_0} f(t) \sin (2 \pi f_0 n t) d t}{\int_{0}^{T_0} \sin ^{2}(2 \pi f_0 n t) d t}=\cfrac{2}{T_0} \int_{0}^{T_0} f(t) \sin (2 \pi f_0 n t) dt
\end{aligned}
\end{matrix}
\right .
\end{aligned}
⎩ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎧ a n = ∫ 0 T 0 cos 2 ( 2 π f 0 n t ) d t ∫ 0 T 0 f ( t ) cos ( 2 π f 0 n t ) d t = T 0 2 ∫ 0 T 0 f ( t ) cos ( 2 π f 0 n t ) d t b n = ∫ 0 T 0 sin 2 ( 2 π f 0 n t ) d t ∫ 0 T 0 f ( t ) sin ( 2 π f 0 n t ) d t = T 0 2 ∫ 0 T 0 f ( t ) sin ( 2 π f 0 n t ) d t
其中f 0 = 1 T 0 f_0=\cfrac{1}{T_0}f 0 = T 0 1
在Pulsar中由于仅对单一频率成分信号f ( t ) = sin ( 2 π f t + ϕ 0 ) f(t)={\color {magenta}\sin(2\pi f t+ \phi_0)}f ( t ) = s i n ( 2 π f t + ϕ 0 ) 进行相位分析时,即只需求n = 1 n=1n = 1 时的b 1 b_1b 1 (实部)及a 1 a_1a 1 (虚部)即可,之后用反余切函数即可得到相位:
ϕ 0 = arctan ( I m a g i n a r y O u t p u t R e a l O u t p u t ) = a t a n s p ( I m a g i n a r y O u t p u t , R e a l O u t p u t ) \phi _0 =\arctan(\cfrac{I_{maginaryOutput}}{R_{ealOutput}})=atansp(I_{maginaryOutput},R_{ealOutput})
ϕ 0 = arctan ( R e a l O u t p u t I m a g i n a r y O u t p u t ) = a t a n s p ( I m a g i n a r y O u t p u t , R e a l O u t p u t )
(注:Pulsar扫频信号在某一时刻仍然时定频信号)
B 1 = ∫ 0 T 0 sin ( 2 π f t + ϕ 0 ) sin ( 2 π f t ) d t = ∫ 0 T 0 ( sin ( 2 π f t ) cos ( ϕ 0 ) + cos ( 2 π f t ) sin ( ϕ 0 ) ) sin ( 2 π f t ) d t = cos ( ϕ 0 ) ∫ 0 T 0 sin ( 2 π f t ) sin ( 2 π f t ) d t + sin ( ϕ 0 ) ∫ 0 T 0 cos ( 2 π f t ) sin ( 2 π f t ) d t = cos ( ϕ 0 ) ∫ 0 T 0 1 2 ( 1 − cos ( 4 π f t ) ) d t + sin ( ϕ 0 ) ∫ 0 T 0 1 2 sin ( 4 π f t ) d t = cos ( ϕ 0 ) ∫ 0 T 0 1 2 d t − 1 2 cos ( ϕ 0 ) ∫ 0 T 0 cos ( 4 π f t ) d t ⏟ = 0 + sin ( ϕ 0 ) ∫ 0 T 0 1 2 sin ( 4 π f t ) d t ⏟ = 0 = 1 2 cos ( ϕ 0 ) T 0 \begin {aligned}
\begin{matrix}
\begin {aligned}
B_1& =\int _0 ^{T_0} {\color {magenta}\sin(2\pi f t+ \phi_0)}{\color {blue}\sin(2\pi ft)}dt \\
& =\int _0 ^{T_0} {\color {magenta}(\sin(2\pi f t)\cos (\phi_0)+\cos(2\pi f t)\sin (\phi_0))}{\color {blue}\sin(2\pi ft)}dt \\
& =\cos (\phi_0)\int _0 ^{T_0} {\color {magenta}\sin(2\pi f t)}{\color {blue}\sin(2\pi ft)}dt +\sin (\phi_0)\int _0 ^{T_0} {\color {magenta}\cos(2\pi f t)}{\color {blue}\sin(2\pi f t)}dt \\
& =\cos (\phi_0)\int _0 ^{T_0} {\color {aqua}\cfrac{1}{2}(1-\cos(4\pi ft))}dt +\sin (\phi_0)\int _0 ^{T_0} {\color {aqua}\cfrac{1}{2}\sin(4\pi f t)}dt \\
& =\cos (\phi_0)\int _0 ^{T_0} {\color {aqua}\cfrac{1}{2}}dt-\cfrac{1}{2}\cos (\phi_0)\underbrace{\int _0 ^{T_0} {\color {aqua}\cos(4\pi ft)}dt}_{=0} +\sin (\phi_0)\underbrace{\int _0 ^{T_0} {\color {aqua}\cfrac{1}{2}\sin(4\pi f t)}dt}_{=0} \\
& =\cfrac{1}{2}\cos (\phi_0){T_0}
\end{aligned}
\end{matrix}
\end{aligned}
B 1 = ∫ 0 T 0 s i n ( 2 π f t + ϕ 0 ) s i n ( 2 π f t ) d t = ∫ 0 T 0 ( s i n ( 2 π f t ) c o s ( ϕ 0 ) + c o s ( 2 π f t ) s i n ( ϕ 0 ) ) s i n ( 2 π f t ) d t = cos ( ϕ 0 ) ∫ 0 T 0 s i n ( 2 π f t ) s i n ( 2 π f t ) d t + sin ( ϕ 0 ) ∫ 0 T 0 c o s ( 2 π f t ) s i n ( 2 π f t ) d t = cos ( ϕ 0 ) ∫ 0 T 0 2 1 ( 1 − c o s ( 4 π f t ) ) d t + sin ( ϕ 0 ) ∫ 0 T 0 2 1 s i n ( 4 π f t ) d t = cos ( ϕ 0 ) ∫ 0 T 0 2 1 d t − 2 1 cos ( ϕ 0 ) = 0 ∫ 0 T 0 c o s ( 4 π f t ) d t + sin ( ϕ 0 ) = 0 ∫ 0 T 0 2 1 s i n ( 4 π f t ) d t = 2 1 cos ( ϕ 0 ) T 0
A 1 = ∫ 0 T 0 sin ( 2 π f t + ϕ 0 ) cos ( 2 π f t ) d t = ∫ 0 T 0 ( sin ( 2 π f t ) cos ( ϕ 0 ) + cos ( 2 π f t ) sin ( ϕ 0 ) ) cos ( 2 π f t ) d t = cos ( ϕ 0 ) ∫ 0 T 0 sin ( 2 π f t ) cos ( 2 π f t ) d t + sin ( ϕ 0 ) ∫ 0 T 0 cos ( 2 π f t ) cos ( 2 π f t ) d t = cos ( ϕ 0 ) ∫ 0 T 0 1 2 sin ( 4 π f t ) d t + sin ( ϕ 0 ) ∫ 0 T 0 1 2 ( 1 + cos ( 4 π f t ) ) d t = cos ( ϕ 0 ) ∫ 0 T 0 1 2 sin ( 4 π f t ) d t ⏟ = 0 + sin ( ϕ 0 ) ∫ 0 T 0 1 2 d t + sin ( ϕ 0 ) ∫ 0 T 0 1 2 cos ( 4 π f t ) d t ⏟ = 0 = 1 2 sin ( ϕ 0 ) T 0 \begin {aligned}
\begin{matrix}
\begin {aligned}
A_1 &= \int _0 ^{T_0} {\color {magenta}\sin(2\pi f t+ \phi_0)}{\color {red}\cos(2\pi ft)}dt \\
& =\int _0 ^{T_0} {\color {magenta} (\sin(2\pi f t)\cos (\phi_0)+\cos(2\pi f t)\sin (\phi_0))}{\color {red}\cos(2\pi ft)}dt \\
& =\cos (\phi_0)\int _0 ^{T_0} {\color {magenta}\sin(2\pi f t)}{\color {red}\cos(2\pi ft)}dt +\sin (\phi_0)\int _0 ^{T_0} {\color {magenta}\cos(2\pi f t)}{\color {red}\cos(2\pi f t)}dt \\
& =\cos (\phi_0)\int _0 ^{T_0} \cfrac{1}{2}{\color {orange}\sin(4\pi f t)}dt+\sin (\phi_0)\int _0 ^{T_0} {\color {orange}\cfrac{1}{2}(1+\cos(4\pi ft))}dt \\
& =\cos (\phi_0)\underbrace{\int _0 ^{T_0} \cfrac{1}{2}{\color {orange}\sin(4\pi f t)}dt}_{=0} +\sin (\phi_0)\int _0 ^{T_0}{\color {orange}\cfrac{1}{2}}dt +\sin (\phi_0)\underbrace{\int _0 ^{T_0} {\color {orange}\cfrac{1}{2}\cos(4\pi ft)}dt}_{=0} \\
& =\cfrac{1}{2}\sin (\phi_0){T_0}\\
\end{aligned}
\end{matrix}
\end{aligned}
A 1 = ∫ 0 T 0 s i n ( 2 π f t + ϕ 0 ) c o s ( 2 π f t ) d t = ∫ 0 T 0 ( s i n ( 2 π f t ) c o s ( ϕ 0 ) + c o s ( 2 π f t ) s i n ( ϕ 0 ) ) c o s ( 2 π f t ) d t = cos ( ϕ 0 ) ∫ 0 T 0 s i n ( 2 π f t ) c o s ( 2 π f t ) d t + sin ( ϕ 0 ) ∫ 0 T 0 c o s ( 2 π f t ) c o s ( 2 π f t ) d t = cos ( ϕ 0 ) ∫ 0 T 0 2 1 s i n ( 4 π f t ) d t + sin ( ϕ 0 ) ∫ 0 T 0 2 1 ( 1 + c o s ( 4 π f t ) ) d t = cos ( ϕ 0 ) = 0 ∫ 0 T 0 2 1 s i n ( 4 π f t ) d t + sin ( ϕ 0 ) ∫ 0 T 0 2 1 d t + sin ( ϕ 0 ) = 0 ∫ 0 T 0 2 1 c o s ( 4 π f t ) d t = 2 1 sin ( ϕ 0 ) T 0
上述的A1及B1为第一阶段输出Imaginary和Real部分,需要准确的T 0 {T_0}T 0 ,乘以2 T 0 \cfrac{2}{T_0}T 0 2 以得到正确的幅值b 1 b_1b 1 及a 1 a_1a 1 。
由于Pulsar控制为离散系统,需要进行离散的推导,为简要处理,先不处理dt,只进行求和,再处理因为采样间隔。
以正弦波的周期T 0 T_0T 0 为例,每个周期采集的点数为N 0 N_0N 0 (不同控制频率下N 0 N_0N 0 会不同)
B 1 = ∑ N = 0 N T − 1 sin ( 2 π f N i N T T 0 + ϕ 0 ) sin ( 2 π f N i N T T 0 ) = ∑ N = 0 N T − 1 ( sin ( 2 π f N i N T T 0 ) cos ( ϕ 0 ) + cos ( 2 π f N i N T T 0 ) sin ( ϕ 0 ) ) sin ( 2 π f N i N T T 0 ) = cos ( ϕ 0 ) ∑ N = 0 N T − 1 sin ( 2 π f N i N T T 0 ) sin ( 2 π f N i N T T 0 ) + sin ( ϕ 0 ) ∑ N = 0 N T − 1 cos ( 2 π f N i N T T 0 ) sin ( 2 π f N i N T T 0 ) = cos ( ϕ 0 ) ∑ N = 0 N T − 1 1 2 ( 1 − cos ( 4 π f N i N T T 0 ) ) + sin ( ϕ 0 ) ∑ N = 0 N T − 1 1 2 sin ( 4 π f N i N T T 0 ) = cos ( ϕ 0 ) ∑ N = 0 N T − 1 1 2 − cos ( ϕ 0 ) ∑ N = 0 N T − 1 1 2 cos ( 4 π f N i N T T 0 ) ⏟ = 0 + sin ( ϕ 0 ) ∑ N = 0 N T − 1 1 2 sin ( 4 π f N i N T T 0 ) ⏟ = 0 = 1 2 cos ( ϕ 0 ) N T \begin {aligned}
\begin{matrix}
\begin {aligned}
B_1& =\sum _{N=0} ^{N_T-1} {\color{magenta}\sin(2\pi f \frac{N_i}{N_T} T_0+ \phi_0)}{\color{blue}\sin(2\pi f \frac{N_i}{N_T} T_0)} \\
& =\sum _{N=0} ^{N_T-1} ({\color{magenta}\sin(2\pi f \frac{N_i}{N_T} T_0)\cos (\phi_0)+\cos(2\pi f \frac{N_i}{N_T} T_0)\sin (\phi_0)}){\color{blue}\sin(2\pi f \frac{N_i}{N_T} T_0)} \\
& =\cos (\phi_0)\sum _{N=0} ^{N_T-1} {\color{magenta}\sin(2\pi f \frac{N_i}{N_T} T_0)}{\color{blue}\sin(2\pi f \frac{N_i}{N_T} T_0)} +\sin (\phi_0)\sum _{N=0} ^{N_T-1} {\color{magenta} \cos(2\pi f \frac{N_i}{N_T} T_0)}{\color{blue}\sin(2\pi f \frac{N_i}{N_T} T_0)}\\
& =\cos (\phi_0)\sum _{N=0} ^{N_T-1} {\color{aqua} \cfrac{1}{2}(1-\cos(4\pi f \frac{N_i}{N_T} T_0))} +\sin (\phi_0)\sum _{N=0} ^{N_T-1} {\color{aqua}\cfrac{1}{2}\sin(4\pi f \frac{N_i}{N_T} T_0)}\\
& =\cos (\phi_0)\sum _{N=0} ^{N_T-1}{\color{aqua}\cfrac{1}{2}}-\cos (\phi_0)\underbrace{\sum _{N=0} ^{N_T-1}{\color{aqua}\cfrac{1}{2}\cos(4\pi f \frac{N_i}{N_T} T_0)}}_{=0} +\sin (\phi_0)\underbrace{\sum _{N=0} ^{N_T-1} {\color{aqua}\cfrac{1}{2}\sin(4\pi f \frac{N_i}{N_T} T_0)}}_{=0}\\
& =\cfrac{1}{2}\cos (\phi_0)N_T\\
\end{aligned}
\end{matrix}
\end{aligned}
B 1 = N = 0 ∑ N T − 1 s i n ( 2 π f N T N i T 0 + ϕ 0 ) s i n ( 2 π f N T N i T 0 ) = N = 0 ∑ N T − 1 ( s i n ( 2 π f N T N i T 0 ) c o s ( ϕ 0 ) + c o s ( 2 π f N T N i T 0 ) s i n ( ϕ 0 ) ) s i n ( 2 π f N T N i T 0 ) = cos ( ϕ 0 ) N = 0 ∑ N T − 1 s i n ( 2 π f N T N i T 0 ) s i n ( 2 π f N T N i T 0 ) + sin ( ϕ 0 ) N = 0 ∑ N T − 1 c o s ( 2 π f N T N i T 0 ) s i n ( 2 π f N T N i T 0 ) = cos ( ϕ 0 ) N = 0 ∑ N T − 1 2 1 ( 1 − c o s ( 4 π f N T N i T 0 ) ) + sin ( ϕ 0 ) N = 0 ∑ N T − 1 2 1 s i n ( 4 π f N T N i T 0 ) = cos ( ϕ 0 ) N = 0 ∑ N T − 1 2 1 − cos ( ϕ 0 ) = 0 N = 0 ∑ N T − 1 2 1 c o s ( 4 π f N T N i T 0 ) + sin ( ϕ 0 ) = 0 N = 0 ∑ N T − 1 2 1 s i n ( 4 π f N T N i T 0 ) = 2 1 cos ( ϕ 0 ) N T
A 1 = ∑ N = 0 N T − 1 sin ( 2 π f N i N T T 0 + ϕ 0 ) cos ( 2 π f N i N T T 0 ) = ∑ N = 0 N T − 1 ( sin ( 2 π f N i N T T 0 ) cos ( ϕ 0 ) + cos ( 2 π f N i N T T 0 ) sin ( ϕ 0 ) ) cos ( 2 π f N i N T T 0 ) = cos ( ϕ 0 ) ∑ N = 0 N T − 1 sin ( 2 π f N i N T T 0 ) cos ( 2 π f N i N T T 0 ) + sin ( ϕ 0 ) ∑ N = 0 N T − 1 cos ( 2 π f N i N T T 0 ) cos ( 2 π f N i N T T 0 ) = cos ( ϕ 0 ) ∑ N = 0 N T − 1 1 2 sin ( 4 π f N i N T T 0 ) + sin ( ϕ 0 ) ∑ N = 0 N T − 1 1 2 ( cos ( 4 π f N i N T T 0 ) + 1 ) = cos ( ϕ 0 ) ∑ N = 0 N T − 1 1 2 sin ( 4 π f N i N T T 0 ) ⏟ = 0 + sin ( ϕ 0 ) ∑ N = 0 N T − 1 1 2 + sin ( ϕ 0 ) ∑ N = 0 N T − 1 1 2 cos ( 4 π f N i N T T 0 ) ⏟ = 0 = 1 2 sin ( ϕ 0 ) N T \begin {aligned}
\begin{matrix}
\begin {aligned}
A_1& =\sum _{N=0} ^{N_T-1} {\color{magenta}\sin(2\pi f \frac{N_i}{N_T} T_0+ \phi_0)}{\color{red}\cos(2\pi f \frac{N_i}{N_T} T_0)} \\
& =\sum _{N=0} ^{N_T-1} ({\color{magenta}\sin(2\pi f \frac{N_i}{N_T} T_0)\cos (\phi_0)+\cos(2\pi f \frac{N_i}{N_T} T_0)\sin (\phi_0)}){\color{red}\cos(2\pi f \frac{N_i}{N_T} T_0) }\\
& =\cos (\phi_0)\sum _{N=0} ^{N_T-1} {\color{magenta}\sin(2\pi f \frac{N_i}{N_T} T_0)}{\color{red}\cos(2\pi f \frac{N_i}{N_T} T_0)} +\sin (\phi_0)\sum _{N=0} ^{N_T-1} {\color{magenta} \cos(2\pi f \frac{N_i}{N_T} T_0)}{\color{red}\cos(2\pi f \frac{N_i}{N_T} T_0)}\\
& =\cos (\phi_0)\sum _{N=0} ^{N_T-1} {\color{orange}\cfrac{1}{2}\sin(4\pi f \frac{N_i}{N_T} T_0)}+ \sin (\phi_0)\sum _{N=0} ^{N_T-1} {\color{orange} \cfrac{1}{2}(\cos(4\pi f \frac{N_i}{N_T} T_0)+1)}\\
& =\cos (\phi_0)\underbrace{\sum _{N=0} ^{N_T-1} {\color{orange}\cfrac{1}{2}\sin(4\pi f \frac{N_i}{N_T} T_0)}}_{=0} +\sin (\phi_0)\sum _{N=0} ^{N_T-1}{\color{orange}\cfrac{1}{2}}+\sin (\phi_0)\underbrace{\sum _{N=0} ^{N_T-1}{\color{orange}\cfrac{1}{2}\cos(4\pi f \frac{N_i}{N_T} T_0)}}_{=0}\\
& =\cfrac{1}{2}\sin (\phi_0)N_T
\end{aligned}
\end{matrix}
\end{aligned}
A 1 = N = 0 ∑ N T − 1 s i n ( 2 π f N T N i T 0 + ϕ 0 ) c o s ( 2 π f N T N i T 0 ) = N = 0 ∑ N T − 1 ( s i n ( 2 π f N T N i T 0 ) c o s ( ϕ 0 ) + c o s ( 2 π f N T N i T 0 ) s i n ( ϕ 0 ) ) c o s ( 2 π f N T N i T 0 ) = cos ( ϕ 0 ) N = 0 ∑ N T − 1 s i n ( 2 π f N T N i T 0 ) c o s ( 2 π f N T N i T 0 ) + sin ( ϕ 0 ) N = 0 ∑ N T − 1 c o s ( 2 π f N T N i T 0 ) c o s ( 2 π f N T N i T 0 ) = cos ( ϕ 0 ) N = 0 ∑ N T − 1 2 1 s i n ( 4 π f N T N i T 0 ) + sin ( ϕ 0 ) N = 0 ∑ N T − 1 2 1 ( c o s ( 4 π f N T N i T 0 ) + 1 ) = cos ( ϕ 0 ) = 0 N = 0 ∑ N T − 1 2 1 s i n ( 4 π f N T N i T 0 ) + sin ( ϕ 0 ) N = 0 ∑ N T − 1 2 1 + sin ( ϕ 0 ) = 0 N = 0 ∑ N T − 1 2 1 c o s ( 4 π f N T N i T 0 ) = 2 1 sin ( ϕ 0 ) N T
上述推导过程得到的A 1 、 B 1 A_1、B_1A 1 、 B 1 未考虑输入波形的幅度值(Amplitude),实际上幅度再整个推导过程中,均为线性的系数,不参与三角函数的和差化积变换,因此实际上最后的得到的实部和虚部均乘上该幅值即可得到实际带幅值的实部和虚部。
变换过程中得到求和的结果和N T N_TN T 有关,因此需要通过Signal Generator的Zero Crossing计算出N T N_TN T 并通过Divide Zero X模块求一次倒数得到准确的1 N T \frac{1}{N_T}N T 1 ,在DFT模块内直接使用该值,并乘以2以恢复原始的幅值。
以力加载过程为例,Signal Generator 0发出指令,同时产生Ref Sin和Ref Cos及Zero Crossing信号,以Signal Gen OP 1(-30°=− π 6 = − 0.5236 -\cfrac{\pi}{6}=-0.5236− 6 π = − 0 . 5 2 3 6 ,因Pulsar不能设置为负相位,故设置为330°)模拟力响应信号输入到DFT1中Feedback信号,DFT1输出实部及虚部后经过SignalArithmetic-> Arctan (DFT1 Real,DFT1 Image),得到以rad为单位的数值。
同步激活信号发生器,采集DFT1的输出及相位值Phase 1如下图所示。
注:由于Arctan函数有两个输入,因此可覆盖的角度范围为 ( − π , π ] (-\pi, \pi]( − π , π ] ,而实际滞后通常要求为 ( − 2 π , 0 ] (-2\pi, 0]( − 2 π , 0 ] ,因此需要转换,转换实现方法待确定。
利用三角函数的正交性可以对信号进行滤波,提取基频的数据(幅值及相位),实际上通过前一个周期的积分变换,正交特性在积分过程中会将倍频的谐波成分积分为零,仅保留基频的幅值和相位(实部和虚部,共同组成了幅值和相位特性),在下一周期内保持该滞后不变(相位ϕ 0 \phi_0ϕ 0 不变)同时保留幅度A m p l i t u d e AmplitudeA m p l i t u d e 不变,累加到Ref Sig Gen的输出上,实现基波幅频保留,谐波成分滤除。
注:本方法仅针对倍频的谐波滤波,保留基波(Ref Sig Gen)频率成分的实时波形。
以输入信号f ( t ) = sin ( 2 π f 0 t + ϕ 1 ) + sin ( 4 π f 0 t + ϕ 2 ) f(t)=\sin(2\pi f_0t+\phi_1)+\sin(4\pi f_0t+\phi_2)f ( t ) = sin ( 2 π f 0 t + ϕ 1 ) + sin ( 4 π f 0 t + ϕ 2 ) 为例,根据上述推导,其中基频f 0 f_0f 0 经过积分后得到(cos ( ϕ 1 ) , i sin ( ϕ 1 ) \cos(\phi_1),i\sin(\phi_1)cos ( ϕ 1 ) , i sin ( ϕ 1 ) )的实部与虚部(等效为幅值为1,相位为ϕ 1 \phi_1ϕ 1 )。
而倍频成分以2倍谐波为例
模拟输入为含多种谐波频率成分的正弦波组合Sin Gender Sum OP,经过DFT Test(以基频Sig Gen 0 Ref Sin/Cos)滤波后输出DFT Fundamental。
f 2 ( t ) = sin ( 4 π f 0 t + ϕ 2 ) f_2(t)=\sin(4\pi f_0t+\phi_2)
f 2 ( t ) = sin ( 4 π f 0 t + ϕ 2 )
经过积分后,实部与虚部分别为:
R e a l O u t p u t = f ( t ) sin ( 2 π f t ) d t = ∫ 0 T 0 sin ( 4 π f t + ϕ 2 ) sin ( 2 π f t ) d t = ∫ 0 T 0 ( sin ( 4 π f t ) cos ( ϕ 2 ) + cos ( 4 π f t ) sin ( ϕ 2 ) ) sin ( 2 π f t ) d t = cos ( ϕ 2 ) ∫ 0 T 0 sin ( 4 π f t ) sin ( 2 π f t ) d t + sin ( ϕ 2 ) ∫ 0 T 0 cos ( 4 π f t ) sin ( 2 π f t ) d t = cos ( ϕ 2 ) ∫ 0 T 0 1 2 ( cos ( 6 π f t ) + cos ( 2 π f t ) ) d t + sin ( ϕ 2 ) ∫ 0 T 0 1 2 ( sin ( 6 π f t ) − sin ( 2 π f t ) d t = cos ( ϕ 2 ) ∫ 0 T 0 1 2 ( cos ( 6 π f t ) d t ⏟ = 0 + cos ( ϕ 2 ) ∫ 0 T 0 1 2 cos ( 2 π f t ) ) d t ⏟ = 0 + sin ( ϕ 2 ) ∫ 0 T 0 1 2 ( sin ( 6 π f t ) d t ⏟ = 0 − sin ( ϕ 2 ) ∫ 0 T 0 1 2 sin ( 2 π f t ) d t ⏟ = 0 = 0 \begin {aligned}
\begin{matrix}
\begin {aligned}
RealOutput &=f(t){\color {blue}\sin(2\pi ft)}dt \\
& =\int _0 ^{T_0} {\color {magenta}\sin(4\pi f t+ \phi_2)}{\color {blue}\sin(2\pi ft)}dt \\
& =\int _0 ^{T_0} {\color {magenta}(\sin(4\pi f t)\cos (\phi_2)+\cos(4\pi f t)\sin (\phi_2))}{\color {blue}\sin(2\pi ft)}dt \\
& =\cos (\phi_2)\int _0 ^{T_0} {\color {magenta}\sin(4\pi f t)}{\color {blue}\sin(2\pi ft)}dt +\sin (\phi_2)\int _0 ^{T_0} {\color {magenta}\cos(4\pi f t)}{\color {blue}\sin(2\pi f t)}dt \\
& =\cos (\phi_2)\int _0 ^{T_0} {\color {aqua}\cfrac{1}{2}(\cos(6\pi ft)+\cos(2\pi ft))}dt +\sin (\phi_2)\int _0 ^{T_0} {\color {aqua}\cfrac{1}{2}(\sin(6\pi ft)-\sin(2\pi ft)}dt \\
& =\cos (\phi_2)\underbrace{\int _0 ^{T_0} {\color {aqua}\cfrac{1}{2}(\cos(6\pi ft)}dt}_{=0}+\cos (\phi_2)\underbrace{\int _0 ^{T_0} {\color {aqua}\cfrac{1}{2}\cos(2\pi ft))}dt}_{=0} +\sin (\phi_2)\underbrace{\int _0 ^{T_0} {\color {aqua}\cfrac{1}{2}(\sin(6\pi ft)}dt}_{=0}-\sin (\phi_2)\underbrace{\int _0 ^{T_0} {\color {aqua}\cfrac{1}{2}\sin(2\pi ft)}dt}_{=0} \\
& =0
\end{aligned}
\end{matrix}
\end{aligned}
R e a l O u t p u t = f ( t ) s i n ( 2 π f t ) d t = ∫ 0 T 0 s i n ( 4 π f t + ϕ 2 ) s i n ( 2 π f t ) d t = ∫ 0 T 0 ( s i n ( 4 π f t ) c o s ( ϕ 2 ) + c o s ( 4 π f t ) s i n ( ϕ 2 ) ) s i n ( 2 π f t ) d t = cos ( ϕ 2 ) ∫ 0 T 0 s i n ( 4 π f t ) s i n ( 2 π f t ) d t + sin ( ϕ 2 ) ∫ 0 T 0 c o s ( 4 π f t ) s i n ( 2 π f t ) d t = cos ( ϕ 2 ) ∫ 0 T 0 2 1 ( c o s ( 6 π f t ) + c o s ( 2 π f t ) ) d t + sin ( ϕ 2 ) ∫ 0 T 0 2 1 ( s i n ( 6 π f t ) − s i n ( 2 π f t ) d t = cos ( ϕ 2 ) = 0 ∫ 0 T 0 2 1 ( c o s ( 6 π f t ) d t + cos ( ϕ 2 ) = 0 ∫ 0 T 0 2 1 c o s ( 2 π f t ) ) d t + sin ( ϕ 2 ) = 0 ∫ 0 T 0 2 1 ( s i n ( 6 π f t ) d t − sin ( ϕ 2 ) = 0 ∫ 0 T 0 2 1 s i n ( 2 π f t ) d t = 0
I m a g O u t p u t = f ( t ) cos ( 2 π f t ) d t = ∫ 0 T 0 sin ( 4 π f t + ϕ 2 ) cos ( 2 π f t ) d t = ∫ 0 T 0 ( sin ( 4 π f t ) cos ( ϕ 2 ) + cos ( 4 π f t ) sin ( ϕ 2 ) ) cos ( 2 π f t ) d t = cos ( ϕ 2 ) ∫ 0 T 0 sin ( 4 π f t ) cos ( 2 π f t ) d t + sin ( ϕ 2 ) ∫ 0 T 0 cos ( 4 π f t ) cos ( 2 π f t ) d t = cos ( ϕ 2 ) ∫ 0 T 0 1 2 ( cos ( 6 π f t ) + sin ( 2 π f t ) ) d t + sin ( ϕ 2 ) ∫ 0 T 0 1 2 ( cos ( 6 π f t ) + cos ( 2 π f t ) d t = cos ( ϕ 2 ) ∫ 0 T 0 1 2 ( cos ( 6 π f t ) d t ⏟ = 0 + cos ( ϕ 2 ) ∫ 0 T 0 1 2 sin ( 2 π f t ) ) d t ⏟ = 0 + sin ( ϕ 2 ) ∫ 0 T 0 1 2 ( cos ( 6 π f t ) d t ⏟ = 0 + sin ( ϕ 2 ) ∫ 0 T 0 1 2 cos ( 2 π f t ) d t ⏟ = 0 = 0 \begin {aligned}
\begin{matrix}
\begin {aligned}
ImagOutput &=f(t){\color {red}\cos(2\pi ft)}dt \\
& =\int _0 ^{T_0} {\color {magenta}\sin(4\pi f t+ \phi_2)}{\color {red}\cos(2\pi ft)}dt \\
& =\int _0 ^{T_0} {\color {magenta}(\sin(4\pi f t)\cos (\phi_2)+\cos(4\pi f t)\sin (\phi_2))}{\color {red}\cos(2\pi ft)}dt \\
& =\cos (\phi_2)\int _0 ^{T_0} {\color {magenta}\sin(4\pi f t)}{\color {red}\cos(2\pi ft)}dt +\sin (\phi_2)\int _0 ^{T_0} {\color {magenta}\cos(4\pi f t)}{\color {red}\cos(2\pi f t)}dt \\
& =\cos (\phi_2)\int _0 ^{T_0} {\color {orange}\cfrac{1}{2}(\cos(6\pi ft)+\sin(2\pi ft))}dt +\sin (\phi_2)\int _0 ^{T_0} {\color {orange}\cfrac{1}{2}(\cos(6\pi ft)+\cos(2\pi ft)}dt \\
& =\cos (\phi_2)\underbrace{\int _0 ^{T_0} {\color {orange}\cfrac{1}{2}(\cos(6\pi ft)}dt}_{=0}+\cos (\phi_2)\underbrace{\int _0 ^{T_0} {\color {orange}\cfrac{1}{2}\sin(2\pi ft))}dt}_{=0} +\sin (\phi_2)\underbrace{\int _0 ^{T_0} {\color {orange}\cfrac{1}{2}(\cos(6\pi ft)}dt}_{=0}+\sin (\phi_2)\underbrace{\int _0 ^{T_0} {\color {orange}\cfrac{1}{2}\cos(2\pi ft)}dt}_{=0} \\
& =0
\end{aligned}
\end{matrix}
\end{aligned}
I m a g O u t p u t = f ( t ) c o s ( 2 π f t ) d t = ∫ 0 T 0 s i n ( 4 π f t + ϕ 2 ) c o s ( 2 π f t ) d t = ∫ 0 T 0 ( s i n ( 4 π f t ) c o s ( ϕ 2 ) + c o s ( 4 π f t ) s i n ( ϕ 2 ) ) c o s ( 2 π f t ) d t = cos ( ϕ 2 ) ∫ 0 T 0 s i n ( 4 π f t ) c o s ( 2 π f t ) d t + sin ( ϕ 2 ) ∫ 0 T 0 c o s ( 4 π f t ) c o s ( 2 π f t ) d t = cos ( ϕ 2 ) ∫ 0 T 0 2 1 ( c o s ( 6 π f t ) + s i n ( 2 π f t ) ) d t + sin ( ϕ 2 ) ∫ 0 T 0 2 1 ( c o s ( 6 π f t ) + c o s ( 2 π f t ) d t = cos ( ϕ 2 ) = 0 ∫ 0 T 0 2 1 ( c o s ( 6 π f t ) d t + cos ( ϕ 2 ) = 0 ∫ 0 T 0 2 1 s i n ( 2 π f t ) ) d t + sin ( ϕ 2 ) = 0 ∫ 0 T 0 2 1 ( c o s ( 6 π f t ) d t + sin ( ϕ 2 ) = 0 ∫ 0 T 0 2 1 c o s ( 2 π f t ) d t = 0
而对于基频成分,可利用积分变换后的幅值和相位(实部和虚部),对Ref Sin进行幅值和相位的调节即可实现仅保留基频成分的实时数据。
F u n d O u t p u t = sin ( 2 π f t + ϕ 1 ) = sin ( 2 π f t ) cos ( ϕ 1 ) + cos ( 2 π f t ) sin ( ϕ 1 ) = sin ( 2 π f t ) R e a l O P + cos ( 2 π f t ) I m a g O P \begin {aligned}
\begin{matrix}
\begin {aligned}
FundOutput & =\sin(2\pi ft+\phi_1)\\
& =\sin(2\pi ft) \cos(\phi_1) +\cos(2\pi ft) \sin(\phi_1)\\
& =\sin(2\pi ft) RealOP +\cos(2\pi ft)ImagOP
\end{aligned}
\end{matrix}
\end{aligned}
F u n d O u t p u t = sin ( 2 π f t + ϕ 1 ) = sin ( 2 π f t ) cos ( ϕ 1 ) + cos ( 2 π f t ) sin ( ϕ 1 ) = sin ( 2 π f t ) R e a l O P + cos ( 2 π f t ) I m a g O P
其中 RealOP和ImagOP为上一周期的积分的输出实部与虚部,在当前周期内保持不变。
C:\D2R\Generic\src\Model\AdaptiveSineControlAlgorithm.cs
ASC 主要用于多自由度系统的单轴激励(主振方向),同时抑制其它方向(耦合振动方向),采用的方法为:认为某一时刻周期为一固定频率,通过DFG模块对各轴进行DFT分析,得到其实际的幅值,主振方向与目标幅值进行比对计算误差,耦合方向则全部为误差,再通过ASC算法对齐进行修正,对DFT输出的正弦输出和余弦部分分别进行逐步交替修正,其中sinIncrement=(sinAmplitude - CurrentSinAmplitude) / Ticks
```csharp
TicksForRamp=(_discreteFourierTransformModel.DSPCodeIterationFrequency * rampTime) / _signalGenerator.Frequency
```
比如1000Hz,rampTime=10(单位应该为周期数),比如进行5Hz的试验,则,Ticks=1000*10/5=2000Tick,每1s DSP=1000Ticks/s,正弦波周期 =1/_signalGenerator.Frequency=0.2s, 每个周期Ticks=200,共需要10个周期为2000Ticks,用于起始或停止时缓慢达到预定状态。
```csharp
private int RampTicksByCycles(float Cycles)
{
return (int)Math.Floor((Cycles * _primaryAxis.DiscreteFourierTransformModel.DSPCodeIterationFrequency) / _signalGenerator.Frequency);
}
```
if (0 < pDFT->count) {
pDFT->count--;
pDFT->sinAmplitude += pDFT->sinIncrement;
pDFT->cosAmplitude += pDFT->cosIncrement;
}
SinIncrement和CosIncrement分别进行计算,并除以Ticks以实现累加,从而避免输出阶跃带来的冲击现象。
public void UpdateSinCosAndTicks(float sinAmplitude, float cosAmplitude, int ticks)
{
// RJM - DCS has a five second timeout here waiting for Count to reach 0.
// Do we do the same, and what about it stalling the UI?
if(ticks < 0) throw new AssertException();
this.ticks = ticks;
this.sinAmplitude = sinAmplitude;
this.cosAmplitude = cosAmplitude;
block[(int)WordIndices.SinIncrement] = new Word((sinAmplitude - CurrentSinAmplitude) / Ticks);
block[(int)WordIndices.CosIncrement] = new Word((cosAmplitude - CurrentCosAmplitude) / Ticks);
Count = Ticks;
}
另外主振方向和非主振方向分别修正,每次只修正某一个误差最大的方向,且幅值和相位分别修正。
<add key="SignalGeneratorDefaultToAccurateSine" value="true" />
MIMO 功能也是基于某一时刻的定频假设,相对ASC较为简单一些,由于每个周期都认为是固定的频率,因此也基本上趋近于线性系统进行迭代,调整一个增益即可。
MIMO 实际上是将离线的ICS通过插值近似拟合近似成了在线定频ICS,具体原理分为几步:
系统辨识得到相同的逆矩阵SIM (SystemInverseMatrix,复数矩阵,分为实部和虚部),以6自由度系统在某一频率ω \omegaω 为例,形式为:
[ i n v H X X ω i n v H X Y ω i n v H X Z ω i n v H X R ω i n v H X P ω i n v H X W ω i n v H Y X ω i n v H Y Y ω i n v H Y Z ω i n v H Y R ω i n v H Y P ω i n v H Y W ω i n v H Z X ω i n v H Z Y ω i n v H Z Z ω i n v H Z R ω i n v H Z P ω i n v H Z W ω i n v H R X ω i n v H R Y ω i n v H R Z ω i n v H R R ω i n v H R P ω i n v H R W ω i n v H P X ω i n v H P Y ω i n v H P Z ω i n v H P R ω i n v H P P ω i n v H P W ω i n v H W X ω i n v H W Y ω i n v H W Z ω i n v H W R ω i n v H W P ω i n v H W W ω ] \begin{bmatrix}
invH_{XX_\omega} &invH_{XY_\omega} &invH_{XZ_\omega} &invH_{XR_\omega} &invH_{XP_\omega} &invH_{XW_\omega} \\
invH_{YX_\omega} &invH_{YY_\omega} &invH_{YZ_\omega} &invH_{YR_\omega} &invH_{YP_\omega} &invH_{YW_\omega} \\
invH_{ZX_\omega} &invH_{ZY_\omega} &invH_{ZZ_\omega} &invH_{ZR_\omega} &invH_{ZP_\omega} &invH_{ZW_\omega} \\
invH_{RX_\omega} &invH_{RY_\omega} &invH_{RZ_\omega} &invH_{RR_\omega} &invH_{RP_\omega} &invH_{RW_\omega} \\
invH_{PX_\omega} &invH_{PY_\omega} &invH_{PZ_\omega} &invH_{PR_\omega} &invH_{PP_\omega} &invH_{PW_\omega} \\
invH_{WX_\omega} &invH_{WY_\omega} &invH_{WZ_\omega} &invH_{WR_\omega} &invH_{WP_\omega} &invH_{WW_\omega} \\
\end{bmatrix}
⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎡ i n v H X X ω i n v H Y X ω i n v H Z X ω i n v H R X ω i n v H P X ω i n v H W X ω i n v H X Y ω i n v H Y Y ω i n v H Z Y ω i n v H R Y ω i n v H P Y ω i n v H W Y ω i n v H X Z ω i n v H Y Z ω i n v H Z Z ω i n v H R Z ω i n v H P Z ω i n v H W Z ω i n v H X R ω i n v H Y R ω i n v H Z R ω i n v H R R ω i n v H P R ω i n v H W R ω i n v H X P ω i n v H Y P ω i n v H Z P ω i n v H R P ω i n v H P P ω i n v H W P ω i n v H X W ω i n v H Y W ω i n v H Z W ω i n v H R W ω i n v H P W ω i n v H W W ω ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎤
当在完整的系统ICS时,假定该频率点的命令的复数向量为C V C_VC V :
[ T X ω T Y ω T Z ω T R ω T P ω T W ω ] \begin{bmatrix}
T_{X_\omega}\\
T_{Y_\omega}\\
T_{Z_\omega}\\
T_{R_\omega}\\
T_{P_\omega}\\
T_{W_\omega}\\
\end{bmatrix}
⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎡ T X ω T Y ω T Z ω T R ω T P ω T W ω ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎤
那么在该频率点的各自由度的命令向量为R V e c R_{Vec}R V e c :
R V e c = S I M ∗ C V e c = [ i n v H X X ω i n v H X Y ω i n v H X Z ω i n v H X R ω i n v H X P ω i n v H X W ω i n v H Y X ω i n v H Y Y ω i n v H Y Z ω i n v H Y R ω i n v H Y P ω i n v H Y W ω i n v H Z X ω i n v H Z Y ω i n v H Z Z ω i n v H Z R ω i n v H Z P ω i n v H Z W ω i n v H R X ω i n v H R Y ω i n v H R Z ω i n v H R R ω i n v H R P ω i n v H R W ω i n v H P X ω i n v H P Y ω i n v H P Z ω i n v H P R ω i n v H P P ω i n v H P W ω i n v H W X ω i n v H W Y ω i n v H W Z ω i n v H W R ω i n v H W P ω i n v H W W ω ] ∗ [ T X ω T Y ω T Z ω T R ω T P ω T W ω ] R_{Vec} =SIM*C_{Vec} =
\begin{bmatrix}
invH_{XX_\omega} &invH_{XY_\omega} &invH_{XZ_\omega} &invH_{XR_\omega} &invH_{XP_\omega} &invH_{XW_\omega} \\
invH_{YX_\omega} &invH_{YY_\omega} &invH_{YZ_\omega} &invH_{YR_\omega} &invH_{YP_\omega} &invH_{YW_\omega} \\
invH_{ZX_\omega} &invH_{ZY_\omega} &invH_{ZZ_\omega} &invH_{ZR_\omega} &invH_{ZP_\omega} &invH_{ZW_\omega} \\
invH_{RX_\omega} &invH_{RY_\omega} &invH_{RZ_\omega} &invH_{RR_\omega} &invH_{RP_\omega} &invH_{RW_\omega} \\
invH_{PX_\omega} &invH_{PY_\omega} &invH_{PZ_\omega} &invH_{PR_\omega} &invH_{PP_\omega} &invH_{PW_\omega} \\
invH_{WX_\omega} &invH_{WY_\omega} &invH_{WZ_\omega} &invH_{WR_\omega} &invH_{WP_\omega} &invH_{WW_\omega} \\
\end{bmatrix} *\begin{bmatrix}
T_{X_\omega}\\
T_{Y_\omega}\\
T_{Z_\omega}\\
T_{R_\omega}\\
T_{P_\omega}\\
T_{W_\omega}\\
\end{bmatrix}
R V e c = S I M ∗ C V e c = ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎡ i n v H X X ω i n v H Y X ω i n v H Z X ω i n v H R X ω i n v H P X ω i n v H W X ω i n v H X Y ω i n v H Y Y ω i n v H Z Y ω i n v H R Y ω i n v H P Y ω i n v H W Y ω i n v H X Z ω i n v H Y Z ω i n v H Z Z ω i n v H R Z ω i n v H P Z ω i n v H W Z ω i n v H X R ω i n v H Y R ω i n v H Z R ω i n v H R R ω i n v H P R ω i n v H W R ω i n v H X P ω i n v H Y P ω i n v H Z P ω i n v H R P ω i n v H P P ω i n v H W P ω i n v H X W ω i n v H Y W ω i n v H Z W ω i n v H R W ω i n v H P W ω i n v H W W ω ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎤ ∗ ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎡ T X ω T Y ω T Z ω T R ω T P ω T W ω ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎤
在MIMO Sine时,通常只有一个方向进行激励,其它方向只需要抑制即可,以Y方向为例:
R Y = S I M ∗ C V = [ 0 0 0 0 0 0 i n v H Y X ω i n v H Y Y ω i n v H Y Z ω i n v H Y R ω i n v H Y P ω i n v H Y W ω 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] ⋅ [ 0 T Y ω 0 0 0 0 ] R_{Y} =SIM*C_V =
\begin{bmatrix}
0 &0 &0 &0 &0 &0 \\
invH_{YX_\omega} &invH_{YY_\omega} &invH_{YZ_\omega} &invH_{YR_\omega} &invH_{YP_\omega} &invH_{YW_\omega} \\
0 &0 &0 &0 &0 &0 \\
0 &0 &0 &0 &0 &0 \\
0 &0 &0 &0 &0 &0 \\
0 &0 &0 &0 &0 &0 \\
\end{bmatrix} \cdot \begin{bmatrix}
0\\
T_{Y_\omega}\\
0\\
0\\
0\\
0\\
\end{bmatrix}
R Y = S I M ∗ C V = ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎡ 0 i n v H Y X ω 0 0 0 0 0 i n v H Y Y ω 0 0 0 0 0 i n v H Y Z ω 0 0 0 0 0 i n v H Y R ω 0 0 0 0 0 i n v H Y P ω 0 0 0 0 0 i n v H Y W ω 0 0 0 0 ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎤ ⋅ ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎡ 0 T Y ω 0 0 0 0 ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎤
T_y的复数化处理(DFT)与复数驱动生成
由上述公式可得,在任意频率点都需要对目标进行傅里叶变换,由于扫频信号或定频信号在某一时刻内均可认为为定频信号,且对应频率的幅值和相位则由信号发生器的Ref Sin和Ref Cos共同决定,以其作为目标的DFT虚部和实部,分别与系统逆矩阵的实部和虚部进行点积求和,乘上所需的目标幅值作为自由度的命令进行输入。
i n v H ω = [ R e a l , j I m a g ] = A ω e j φ ω = A ω [ cos ( φ ) , j sin ( φ ) ] invH_\omega =[Real ,jImag]=A_\omega e^{j\varphi _\omega}=A_\omega[\cos(\varphi),j\sin(\varphi)]i n v H ω = [ R e a l , j I m a g ] = A ω e j φ ω = A ω [ cos ( φ ) , j sin ( φ ) ]
T y ( t i ) = sin ( ω t i ) = e j ω t i , T_y(t_i)=\sin(\omega t_i)=e^{j\omega t_i},T y ( t i ) = sin ( ω t i ) = e j ω t i ,
在t i t_it i 时刻T y ( t i ) T_y(t_i)T y ( t i ) 的DFT为$1\angle (\omega t_i) $,即 T y ( t i ) = [ cos ( ω t i ) , j sin ( ω t i ) ] T_y(t_i)=[\cos(\omega t_i),j\sin(\omega t_i)]T y ( t i ) = [ cos ( ω t i ) , j sin ( ω t i ) ]
则i n v H ω ⋅ D F T ( T y ( t i ) ) = A ω e j φ ω e j ω t i = A ω e j ( φ ω + ω t i ) = ( A ω [ cos ( φ ) + j sin ( φ ) ] [ cos ( ω t ) + j sin ( ω t i ) ] = A ω [ cos ( φ + ω t i ) + j sin ( φ + ω t i ) ] invH_\omega\cdot DFT(T_y (t_i))=A_\omega e^{j\varphi _\omega}e^{j\omega t_i}\\=A_\omega e^{j(\varphi _\omega+\omega t_i)}\\
=(A_\omega[\cos(\varphi)+j\sin(\varphi)][\cos(\omega t)+j\sin(\omega t_i)]\\
=A_\omega[\cos(\varphi+\omega t_i) + j\sin(\varphi+\omega t_i)]i n v H ω ⋅ D F T ( T y ( t i ) ) = A ω e j φ ω e j ω t i = A ω e j ( φ ω + ω t i ) = ( A ω [ cos ( φ ) + j sin ( φ ) ] [ cos ( ω t ) + j sin ( ω t i ) ] = A ω [ cos ( φ + ω t i ) + j sin ( φ + ω t i ) ]
驱动的生成(IDFT)
对其进行逆傅里叶变换(定频)则得到:
C m d ω ( t i ) = I D F T ( A ω [ cos ( φ + ω t i ) , j sin ( φ + ω t i ) ] ) = A ω sin ( φ + ω t i ) Cmd_\omega (t_i)=IDFT(A_\omega[\cos(\varphi+\omega t_i) , j\sin(\varphi+\omega t_i)])
=A_\omega\sin(\varphi+\omega t_i)\\C m d ω ( t i ) = I D F T ( A ω [ cos ( φ + ω t i ) , j sin ( φ + ω t i ) ] ) = A ω sin ( φ + ω t i )
为了实现在Pulsar中运算,进一步展开则:
C m d ω ( t i ) = A ω ( sin φ cos ω t i + cos φ sin ω t i ) = A ω sin φ cos ω t i + A ω cos φ sin ω t i = C o m p r e s s e d R e f S i n ⋅ cos ω t i + C o m p r e s s e d R e f C o s ⋅ sin ω t i Cmd_\omega(t_i)=A_\omega(\sin\varphi \cos\omega t_i+\cos\varphi\sin\omega t_i)\\
=A_\omega\sin\varphi \cos\omega t_i+A_\omega\cos\varphi\sin\omega t_i\\
=Compressed Ref Sin \cdot \cos\omega t_i +Compressed Ref Cos \cdot \sin\omega t_i C m d ω ( t i ) = A ω ( sin φ cos ω t i + cos φ sin ω t i ) = A ω sin φ cos ω t i + A ω cos φ sin ω t i = C o m p r e s s e d R e f S i n ⋅ cos ω t i + C o m p r e s s e d R e f C o s ⋅ sin ω t i
传函的插值处理
受分辨率影响,ICS系统识别通常只能进行有限频率点的辨识,比如0 0.5 1.0 1.5 2.0……等,而实际上在MIMO Sine需要进行扫频或定频试验,试验频率点不可能完全落在这些较为整的频率点上,因此需要通过插值(一维)进行处理,利用Pulsar中的LookupTable1D实现线性插值。
变幅扫频的插值处理
根据对数或线性扫频生成插值频率点,根据Sig Gen生成的Frequency输入到Lookup Table1D进行插值即可。
补偿方法
8.1 SineSweep 补偿算法
SineSweep是通过Compressor实现调整系统逆矩阵计算得到的指令进行微调,而对耦合方向只通过系统辨识的矩阵进行等比例进行抑制,系统辨识完生成了逆矩阵后不再进行耦合方向的修正,这一点与ASC的思想有一点差异。
8.1 Sinebeat 补偿算法
Sinebeat所需要的幅值为每一拍最大的幅值,与Compressor对每一个周期循环进行修正略有差异,即上一个还没修完,下一个幅值已经不一样了,修正的Control Dynamic Gain没法用,而且也不方便生成一个随时间变化的幅值,因为每一拍的几个波形的频率都是一样的,即使可以生成,但阶跃也比较明显,Control Dynamic Gain也比较大,不利于稳定输出。每一拍计算一次最大最小值(将Max/MIn Manually设置为true),与目标幅值进行比较,计算出所需的比例,再进行Max/MIn复位。
// Reset Min/Max of AmplitudeMonitor 61#
$Main_Axis_Feedback$.ManualMinMaxReset = false;
WaitForSync();
$Main_Axis_Feedback$.ManualMinMaxReset = true;
variables.SetValue( "General", "PreviousFrequency", PreviousFrequency );
variables.SetValue( "General", "PreviousTargetAmplitude", PreviousTargetAmplitude );
variables.SetValue( "General", "PreviousAchievedAmplitude", PreviousAchievedAmplitude );
variables.Save();
Compressor原理,Compressor经过获取两次ZeroCrossing之间的峰谷值,与目标峰谷值进行对比,之后乘上增益系数(0.2-0.5之间)逐步提升放大系数(最高放大10倍,Servo Controllor Dynamic Gain值),该放大系数呈上控制器的位移Scale值作为Command IP给到控制器;【如下,红色为x Control Dyn Gain,蓝色为无量纲的command 命令】