2013-05-09 30 views
0

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

当我用hexeditor打开这个.bin文件时,我可以看到ASCII或1和0(二进制)。事情是我不知道如何解释这些知识。在16秒内获得的文件中有208000字节。由于DAQ设备具有16位分辨率,我认为每个2字节对应一个采样。所以我认为例如一个16位数据如1000100111110010被MATLAB转换成相应的电压电平。但是我试图打开两个不同电压级别的.bin文件,例如1V和9V,而且这些数字似乎与我的想法没有关系。

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

日Thnx,

+1

像.dat这样的扩展名.bin是相当无意义的,并且几乎不会告诉你有关内容格式的内容。你用什么软件来捕获这些数据?它在什么样的采样率下获得?另外,它是否恰好*您获得的16秒数据?如果是这样,那么在采样率下,您可以计算出数据是否具有某种格式规范,或者仅仅是数值的转储。 – wakjah 2013-05-09 14:45:26

+0

我不记得采样率。该程序由德尔福语言的工程师编写。这不是一个商业的。每次收购花了我16秒。然后我用hexeditor打开这个文件,看到bin有208000个字节的数据,所以我认为这意味着104000个16位块和104000/16sec = 6500个采样/秒,因为每个样本都有16位深度。我不确定我在这里的知识。我怎样才能知道MATLAB如何解释这些二进制数字?在900页的MATLAB书中只有1或2页写关于这个问题。我找不到任何tutuorial,我可以了解它是如何发生的。 – user16307 2013-05-09 14:53:43

回答

1

假设你的.bin文件是真的只是一个记录的值的转储,您可以使用fread读取数据(见the documentation更多信息):

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

你也但是,需要知道这些数据是已签名还是未签名 - 如果未签名,则可以使用'uint16'作为fread的第三个参数。您还应该了解它是大端还是小端......您应该检查原始程序的源代码。

记录您进行此类收购的采样率是一个不错的主意,因为除非您不知道这些信息,否则您将很难做任何事情,除此之外无法进行分析。通常这种数据存储在.wav文件中,因此数据及其采样率(实际上是位深度)都存储在文件中。这样你就不需要单独的纸张来跟随你的文件了(另外,读取MATLAB中的.wav文件非常简单)。

+0

它不是wav。它是一个BIN文件。BIN – user16307 2013-05-11 17:20:52

+0

我提供的代码应该适用于.bin文件格式。关于.wav文件的内容只是一般性的建议。 – wakjah 2013-05-12 08:41:22