【问题标题】:How does MATLAB read and interpret binary digits from a .bin file?MATLAB 如何从 .bin 文件中读取和解释二进制数字?
【发布时间】:2025-12-01 23:40:01
【问题描述】:

我有一个扩展名为 .bin 的二进制文件。该文件由数据采集软件创建。基本上,一个“测量计算”的 16 位数据采集硬件正在接收来自传感器的信号(经过放大器放大后)并通过 USB 将其发送到 PC。然后,程序/软件正在生成一个 .bin 文件,该文件对应于从数据 aq 接收到的串行数据。硬件。有几种方法可以读取这个 .bin 文件并在 MATLAB 中绘制信号。

当我用十六进制编辑器打开这个 .bin 文件时,我可以看到 ASCII 或 1 和 0(二进制)。问题是我不知道如何解释这些知识。 16秒得到的文件有208000字节。我在想每 2 个字节对应一个样本,因为 DAQ 设备具有 16 位分辨率。因此,我认为例如 16 位数据(例如 1000100111110010)由 MATLAB 转换为相应的电压电平。但我尝试打开两个不同的 .bin 文件,它们具有不同的电压等级,例如 1V 和 9V,但这些数字似乎与我的想法无关。

MATLAB 如何从 .bin 文件中读取和解释二进制数字?

谢谢,

【问题讨论】:

  • 扩展名 .bin 和 .dat 一样,是毫无意义的,并且几乎不会告诉您内容的格式(如果有的话)。您使用什么软件来捕获这些数据?它是在什么采样率下获得的?此外,您获取的数据是否正好 16 秒?如果是这样,那么通过采样率,您可以确定数据是否具有某种格式规范,或者实际上只是值的转储。
  • 我不记得采样率了。该程序由工程师用 Delphi 语言编写。它不是商业的。每次采集我用了 16 秒。然后我在 hexeditor 中打开文件,看到 bin 有 208000 字节的数据,所以我认为这意味着 104000 个 16 位块和 104000/16sec = 6500 个样本/秒,因为每个样本都有 16 位深度。我不确定我在这里的知识。我怎么知道 MATLAB 如何解释这些二进制数字?在 900 页的 MATLAB 书中只有 1 或 2 页关于这个问题。我找不到任何可以了解它是如何发生的教程。

标签: matlab binary


【解决方案1】:

假设您的 .bin 文件实际上只是记录值的转储,您可以使用 fread 读取数据(有关更多信息,请参阅 the documentation):

fid = fopen('path_to_your_file', 'r');
nSamples = 104000;
data = fread(fid, nSamples, 'int16');
fclose(fid);

但是,您还需要知道此数据是有符号还是无符号 - 如果它是无符号的,您可以使用 'uint16' 作为 fread 的第三个参数。你也应该看看它是big-endian还是little-endian......你应该检查原始程序的源代码。

记录您进行此类采集时的采样率是个好主意,因为在不知道此信息的情况下,您将很难在事后对其进行微不足道的分析。通常这种数据存储在 .wav 文件中,因此数据及其采样率(实际上是位深度)都存储在文件中。这样一来,您的文件就不需要单独的纸了(另外,在 MATLAB 中读取 .wav 文件非常容易)。

【讨论】:

  • 它不是 wav。它是一个 .bin 文件 BIN
  • 我提供的代码应该适用于您的 .bin 文件格式。 .wav 文件的内容只是一般建议。