在Python中仿真Matlab定点数行为

在Python中仿真Matlab定点数行为,python,matlab,serial-port,fixed-point,code-translation,Python,Matlab,Serial Port,Fixed Point,Code Translation,我有一个陈旧的Matlab脚本,我正在尝试用Python重写它的一部分。不幸的是,我不仅不熟悉Matlab,而且脚本是大约5-6年前编写的,因此没有人完全理解它的功能或如何实现。目前我感兴趣的是: % Matlab [rawData,count,errorMsg] = fscanf(serialStream, '%f') 现在,我错误地尝试这样做: # Python rawData = [] count = 0 while True: rawData.append(struct.unp

我有一个陈旧的Matlab脚本,我正在尝试用Python重写它的一部分。不幸的是,我不仅不熟悉Matlab,而且脚本是大约5-6年前编写的,因此没有人完全理解它的功能或如何实现。目前我感兴趣的是:

% Matlab
[rawData,count,errorMsg] = fscanf(serialStream, '%f')
现在,我错误地尝试这样做:

# Python
rawData = []
count = 0
while True:
    rawData.append(struct.unpack('f', ser.read(4))[0])
    count += 1
但是,这会完全打印出垃圾值。经过进一步的研究,我了解到,在Matlab中,%f并不像在任何合理的语言中那样表示浮点,而是表示定点数。因此,我的数据看起来像垃圾是有道理的

通过反复试验,我确定应该从串行端口获取156字节的块。但是,我不确定转换为多少个值,因为我找不到解释Matlab中的固定点数有多大的文档,它们可以高达128位,但这不是很有帮助。我还找到了python库,似乎我想从组成部分(即提供符号、数字和指数)中形成它们,但我不确定这些内容如何存储在我获得的数据流中


在Python中,有没有一种从二进制流生成固定点数的好方法?或者我必须在Matlab中查找实现并重新创建它吗?也许有更好的方法来做我想做的事情?

%f是IEEE浮点,而不是定点:这很奇怪。编辑:废话,看起来我链接的是输出。我想我得弄清楚为什么我的数字看起来这么差,然后…我才意识到我链接了错误的fscanf,serial.fscanf是正确的: