## 4.5. 采集数据处理

ACQ通道采集的数据以流的形式按照先后顺序缓存，
缓存到设定数据量后或者计时器超时后数据被打包成帧上传，
上位机驱动解帧后以流模式将数据返回给调用接口。
当采集多种数据时，用户需要维护采集数据的顺序，
从而解析返回数据的含义。
建议一个实验仅仅采集一种类型数据以简化数据处理。

### 4.5.1. 采集波形数据

波形数据为模拟信号经ADC量化和符号转换后结果，
用8比特二进制补码表示，范围对应-128~127；

* ASIC平台1个时钟周期对应8个采样点(8个字节)
* FPGA平台1个时钟周期对应16个采样点（16字节）
* 数据采用大端字节序，数据遵循先采先到顺序

### 4.5.2. 采集IQ数据

解模计算公式如下：

$$
I = \sum_{i=1}^{m}{\sum_{j=1}^n{\frac{S_{i,j} * iw_{i,j} * \cos(\omega_i t+\phi_i)}{scale_i} }}
$$

$$
Q = \sum_{i=1}^{m}{\sum_{j=1}^n{\frac{S_{i,j} * qw_{i,j} * \sin(\omega_i t+\phi_i)}{scale_i} }}
$$

* $m$表示解模次数，$n$表示解模的采样点个数；
* $S_{i,j}$为输入波形的第i次解模第j个采样点，8比特有符号数
* $iw_{i,j}$、$qw_{i,j}$为i、q权重的第i次解模第j个采样点，8比特有符号数
* $\omega_i$、$\phi_i$分别为第i次解模的频率和相位
* $scale_i$为第i次解模的范围选择，可设置为1或者16

>解模频率应设置为输入波形对应频率使得解模结果频率为0，
解模结果相位等于解模设置相位设置减去输入波形相位。
若解模相位为0，则结果相位等于波形相位取反。

解模求和结果I、Q分别用32比特二进制补码表示，解模的结果存储格式如下：

* 1个完整的数据包含I,Q（8字节）
* I先到达，Q后到达
* I, Q数据采用大端字节，都占用4个字节

### 4.5.3. 采集态数据

#### 态判断计算

态判断利用解模IQ数据，通过三组直线方程将 IQ 平面划分为三个区域，判定量子比特状态。

三组直线方程定义在 DAQ_PAR 参数区（见 [§4.4.1](#441-读出参数存储)），
每组包含三个系数（a, b, c），直线方程为 $ax + by = c$，
其中 a、b 为 16 位有符号数，c 为 32 位有符号数，I、Q 为 20 位截位后的解模结果。

对于每条直线，位置判定公式为：

$$
compare[i] = (a_i \times I < c_i \times 2^4 - b_i \times Q),\quad i = 0, 1, 2
$$

得到三条直线的位置判定结果后，通过优先级电路确定态信息：

|优先级|态值|判定条件|
|:-|:-|:-|
|1|0|compare[0] = 1 且 compare[1] = 0|
|2|1|compare[1] = 1 且 compare[2] = 0|
|3|2|compare[2] = 1 且 compare[0] = 0|
|—|3（错误态）|其它情况|

```
三态判断要求三条直线交于同一点，否则 IQ 平面被划分为 4 个以上区域，
部分 IQ 点将落入未定义区域，产生错误态（3态）。
仅需两态判断时，设置 func_ctrl.TWO_STA_EN = 1，仅使用一组直线方程。
```

#### 态数据存储格式

* 1个完整数据包含16个qubit态信息（4字节）
* 每个量子比特态信息用2个比特表示
* 高位表示高序号，即32比特对应 {q15, q14, ..., q0}

### 4.5.4. 采态计数数据

* 1个完整数据包含4个计数器数据（16字节）
* 4个计数数据顺序为0态计数器、1态计数器、2态计数器、3态计数器
* 计数器采用大端字节序，为32比特无符号数
