锁相放大器(Lock-in Amplifier)是一种用于提取微小信号的测量仪器。它的主要特点是能够通过参考信号对输入信号进行同步检测,并且具有很强的抗干扰能力。
锁相放大器的工作原理是基于相位敏感检测技术。它将输入信号与一个参考信号进行乘法运算,使得输入信号与参考信号同频率同相位。然后,通过低通滤波器对乘积信号进行滤波,从而获得输入信号的幅度和相位信息。锁相放大器可以有效地抑制输入信号中的噪声和干扰,提高信号的信噪比。
输入信号可以定义为
$$S_t = A_I \sin( \omega t + \varphi) + \text{Noise}(t)$$
参考信号为
$$S_{R1}(t) = A_R \sin ( \omega t + \delta)$$
$$S_{R2}(t) = A_R \cos ( \omega t + \delta)$$
相乘后,得到
$$S_{PSD1}(t) = \frac {1}{2} A_I A_R \cos (\varphi - \delta) + \text{Noise}(t)A_R\sin(\omega t + \delta)-\frac {1}{2} A_I A_R \cos (2\omega t + \varphi + \delta)$$
$$S_{PSD2}(t) = \frac {1}{2} A_I A_R \sin (\varphi - \delta) + \text{Noise}(t)A_R\cos(\omega t + \delta)+\frac {1}{2} A_I A_R \sin (2\omega t + \varphi + \delta)$$
经过低通滤波器滤波后($A$为最终增益),两个信号的直流分量为
$$ S_{o1} = \frac {1}{2} A_I A \cos (\varphi - \delta)$$
$$ S_{o2} = \frac {1}{2} A_I A \sin (\varphi - \delta)$$
可得幅度为:
$$ A_I = \frac{2 \sqrt {S_{o1}^2+S_{o2}^2}}{A} $$
可得相对相位为:
$$ \theta = \varphi - \delta = \tan^{-1} \frac{S_{o2}}{S_{o1}} $$
Name | Description |
---|---|
SCL | IIC的SCL接口 |
SDA | IIC的SDA接口 |
SIGNAL[15:0] | 16位输入信号 |
REQ | 请求传输信号 |
ACK | 响应信号 |
RSTN | 清零信号 |
锁相放大器的7位设备地址为0x6C,寄存器地址为8位,寄存器有32位数据位
寄存器名字 | 地址 | 类型 | 描述 |
---|---|---|---|
start | 0x00 | 控制寄存器 | 32位任意一位为1,锁相放大器开始工作 |
meas_signal_freq | 0x01 | 控制寄存器 | 待测信号的频率 |
sample_freq | 0x02 | 控制寄存器 | 待测信号的采样频率 |
output_cos | 0x03 | 只读寄存器 | 待测信号与余弦信号调制、滤波后的值 |
output_sin | 0x04 | 只读寄存器 | 待测信号与正弦信号调制、滤波后的值 |
ref_cos | 0x05 | 只读寄存器 | [15:0]为参考余弦信号 |
ref_sin | 0x06 | 只读寄存器 | [15:0]为参考正弦信号 |
16位输入信号与16位参考信号相乘,参考信号的幅度为$2^{14}-1$,相乘后的信号为32位,随后进入IIR滤波器。IIR滤波器的直流增益为1倍。因此最后的实际增益为:
$$A = A_R = (2^{14}-1) = 16383$$
幅度为:
$$ A_I = \frac{2 \sqrt {S_{o1}^2+S_{o2}^2}}{16383} $$
相对相位为:
$$ \theta = \varphi - \delta = \tan^{-1} \frac{S_{o2}}{S_{o1}} $$
首先假设采样频率为40MHz,待测信号的频率为300kHz,待测信号幅度为5000。待测信号混有幅度为10000频率为310kHz的干扰信号1和幅度为15000频率为500kHz的干扰信号2。
那么需要使用I2C协议先往寄存器0x01写入40_000_000,往0x02写入300_000。之后再往0x00写入0x0001,启动锁相放大器。
下图为IIC启动的时序图,设备地址为0x1101100。
仿真的cos通道输出信号幅度为$39897101$,sin通道输出信号幅度为$-10734411$
则按照公式得知待测信号频率为$\dfrac{2 \sqrt {39897101^2+(-10734411)^2}}{16383}=5044$,
待测信号相对相位为$\theta = \varphi - \delta = \tan^{-1} \dfrac{39897101}{-10734411} = -0.42 \pi$,
与收集脚本的信息一致,预测值在$5000$上下震荡,幅度为$5000 \pm 100$。
可以添加均值滤波减小误差。可以观察到均值滤波后的值误差不超过0.3%:
需要环境:iverilog、python
打开tb文件夹的signal_generate.py,可以设置采样点数量、采样频率、待测频率等参数。
点击generate.bat运行后在本地生成txt信号文件。
双击sim文件夹的sim.bat就可以开始仿真。
可以观察到两个通道的值以及预测值
数据通路设计:
DDS为32位流水线,PSD使用基4-booth乘法器,IIR滤波器的latency为1。
$$\text{fword} = \frac{2^N\cdot f_{\text{dds}}}{f_{\text{sample}}}$$
其中$N$是相位累加器的位数,$f_{\text{dds}}$是待测频率,$f_{\text{sample}}$是采样频率。
1阶IIR滤波器,采用的传输函数形式如下:
$$H(z) = \dfrac{1}{2^{N}-(2^{N} -1 ) z^{-1}}$$
假如采样频率为40Mhz,待测信号频率为300kHZ,当$N = 16$时,锁相放大器的$Q$值大约为$6000$(带通滤波器的$Q$通常在$10^2$左右)。如果追求更高的$Q$,可以提升$N$的大小,这可能会带来更长的等待时间。
本设计取$N=16$,即
$$H(z) = \dfrac{1}{2^{16}-(2^{16} -1 ) z^{-1}}$$
可以通过移位加减进行乘除上的优化:
dout_temp <= ((dout_d1 <<< 16) - dout_d1 + din )>>> 16;
频率响应如下:
在40Mhz的采样频率下,可以达到9.7Hz的截止频率。
综合的FPGA型号为:xc7a35tfgg484-2
200M时钟频率下的建立时间阈值和保持时间阈值
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。