python学习笔记

@TOC
首先,我们应该先理解一下,补码跟原码之间是如何转换的,

  • 正数的补码等于原码
  • 负数的补码等于符号位不变,其它位取反,再加1
十制数 原码 补码
+15 0b 0000 1111 0b 0000 1111
-15 0b 1000 0000 0b 1111 0001

也就是说,给一个16位的AD补码值,首先我们可以根据首位是否为1来判断该AD值的正负,

  • 符号位等于0(正数),原码=补码
  • 符号位等于1(负数),补码符号位不变,其余位取反,再整体加1,就是该补码的原码的绝对值,注意此时还要对计算出来的原码加负号,才是最终的AD值

根据AD7606数据手册
python学习笔记

我们可以知道,AD7606B并行数据为16位,即数据范围为0b 1000 0000 0000 0000 ~ 0b 0111 1111 1111 1111,以$\pm 5V$范围为例,

import numpy as np
int_number_array = np.array([0xFFFF,0x1FFF,0X0FEE,0x15AC,0x159E,0x3C55,0x0001,0x0010])#含8个数据的数组,代表AD7606B八通道读取的补码数据
index = np.argwhere(int_number_array & 0b1000000000000000 == 0b1000000000000000)#查找数组中符号位为1(负数),返回索引数组
int_number_array[index] = -((int_number_array[index] ^ 0b1111111111111111) + 1)#进行补码转换成原码(按位异或相当于按位取反)正数不变,负数进行取反加1,最后加负号
number_array = int_number_array / 32768 * 5 #将十六进制原码数据转换电压值
print(number_array)

最后计算结果为

[-1.52587891e-04 1.24984741e+00 6.22253418e-01 8.46557617e-01 8.44421387e-01 2.35671997e+00 1.52587891e-04 2.44140625e-03]

分别代表每个通道的某个时刻的电压值,若连续处理一段时间的AD采样值,则可以绘制出8通道的波形图。

python读取matlab数据(.mat文件)

我们都知道,matlab是一个非常好用的矩阵计算分析软件,然额,matlab自带的绘图效果极为锯齿,所以,这里分享一个在python中读取matlab处理后的数据.mat文件。

1.首先,我们这里先打开matlab,随便在命令行窗输入两个变量,

matlab_x=1:0.01:10;
matlab_y=sin(matlab_x);

2.计算处理后,matlab右边的工作区会有两个变量值,分别为matlab_y、matlab_x

python学习笔记

3.然后,我们将鼠标放置在工作区空白位置右键,选择保存,也可以在工作区处于工作高亮状态时使用快捷键ctrl+s进行保存,会弹出保存文件名,这里我们保存为matlab.mat

python学习笔记

4.接下来就是用Python读取上一步中保存的matlab工作区的数据Data。Python中我们需要用到scipy库,这里我们先import进去

import scipy.io as scio

5.读取.mat文件

data=scio.loadmat('./matlab.mat')

6.查看当前data数据类型

type(data)

输出的为dict字典类型

7.读取对应我们想要的数据

这里我们假设需要将数据matlab_y读进python中(这里我们用numpy库将数据转化为数组类型)

import numpy as np #导入矩阵处理库
python_y=np.array(data['matlab_y']) #将matlab数据赋值给python变量

至此,就完成了使用python读取matlab数据。

enjoy it!

上一篇:Windows系统下飞思卡尔BDM驱动安装教程


下一篇:【学习记录】《DeepLearning.ai》第十二课:目标监测(Object detection)