# DigitalLockInAmplifier **Repository Path**: muhmi/DigitalLockInAmplifier ## Basic Information - **Project Name**: DigitalLockInAmplifier - **Description**: Verilog实现数字锁相放大器 - **Primary Language**: Verilog - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 5 - **Created**: 2024-01-27 - **Last Updated**: 2024-01-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 锁相放大器 锁相放大器(Lock-in Amplifier)是一种用于提取微小信号的测量仪器。它的主要特点是能够通过参考信号对输入信号进行同步检测,并且具有很强的抗干扰能力。 锁相放大器的工作原理是基于相位敏感检测技术。它将输入信号与一个参考信号进行乘法运算,使得输入信号与参考信号同频率同相位。然后,通过低通滤波器对乘积信号进行滤波,从而获得输入信号的幅度和相位信息。锁相放大器可以有效地抑制输入信号中的噪声和干扰,提高信号的信噪比。 ## 接口 |Name | Description | |---------|---------| | SCL | IIC的SCL接口 | | SDA | IIC的SDA接口 | | SIGNAL[15:0] | 16位输入信号 | | CLKIN | 输入信号的同步周期信号 | | RSTN | 清零信号 | ## IIC通信 锁相放大器的设备地址为0x6C,寄存器地址为8位,寄存器有32位数据位 ![I2C通信](./image/I2C.png) ## 启动流程 1. 往meas_signal_freq寄存器(0x01)写入待测信号的频率 2. 往sample_freq寄存器(0x02)写入待测信号的采样频率 3. 往start寄存器(0x00)写入非零数据,启动锁相放大器 4. 锁相放大器启动后,SIGNAL[15:0]连接16位待测数字信号,同时CLKIN连接频率与待测数字信号采样频率相同的周期方波信号,CLKIN不需要与SIGNAL对齐 5. 从output_cos寄存器(0x03)、output_sin寄存器(0x04)取出输出值 ## 信号增益 16位输入信号与8位参考信号相乘,参考信号的幅度为$2^7-1$,相乘后的信号为24位,随后进入FIR滤波器。FIR滤波器的直流增益为1047958倍,随后经过乘法器相加得到47位信号,截取23位得到24位的输出信号。因此最后的实际增益为: $$A = (2^7-1) \times 1047958 \times 2^{-23} = 15.87$$ ## 待测信号计算 输入信号可以定义为 $$S_t = A_I \sin( \omega t + \varphi)$$ 参考信号为 $$S_{R1}(t) = A_R \sin ( \omega t + \delta)$$ $$S_{R2}(t) = A_R \cos ( \omega t + \delta)$$ 相乘后,经过FIR滤波器滤波后,两个信号的直流分量为 $$ 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} = \frac{2 \sqrt {S_{o1}^2+S_{o2}^2}}{15.87} $$ 可得相对相位为: $$ \theta = \varphi - \delta = \tan^{-1} \frac{S_{o2}}{S_{o1}} $$ ## 实际案例 首先假设采样频率为10000,待测信号的频率为3000,待测信号幅度为16384,相位为$-\pi/2$ 那么需要使用I2C协议先往寄存器0x01写入0x000BB8,往0x02写入0x002710 ![I2C通信](./image/I2CW1.png) ![I2C通信](./image/I2CW2.png) ![I2C通信](./image/I2CW3.png) 之后再往0x00写入0x0001,启动锁相放大器。 仿真的输出信号一幅度为$-3346$,输出信号二幅度为$106066$ ![I2C通信](./image/example1.png) 则按照公式得知待测信号频率为$\dfrac{2 \sqrt {-3346^2+106066^2}}{15.87}=13374$,相位误差在-20%~20%以内。 待测信号相位差为$\theta = \varphi - \delta = \varphi = \tan^{-1} \dfrac{106066}{-3346} =-0.49 \pi$,相位误差在-3%~3%以内。 ## 寄存器 |寄存器名字 | 地址 | 类型 | 描述 | |---------|---------|------|--| | start | 0x00 | 控制寄存器 | 32位任意一位为1,锁相放大器开始工作 | | meas_signal_freq | 0x01 | 控制寄存器 |待测信号的频率 | | sample_freq | 0x02 | 控制寄存器 | 待测信号的采样频率 | | output_cos | 0x03 | 只读寄存器 | 待测信号与余弦信号调制、滤波后的值 | | output_sin | 0x04 | 只读寄存器 | 待测信号与正弦信号调制、滤波后的值 | | ref_cos | 0x05 | 只读寄存器 | [7:0]为参考余弦信号 | | ref_sin | 0x06 | 只读寄存器 | [7:0]为参考正弦信号 |