Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB如何从.bin文件中读取和解释二进制数字?_Matlab_Binary - Fatal编程技术网

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

MATLAB如何从.bin文件中读取和解释二进制数字?,matlab,binary,Matlab,Binary,我有一个扩展名为.bin的二进制文件。该文件由数据采集软件创建。基本上,“测量计算”16位数据采集硬件接收来自传感器的信号(经放大器放大后),并通过USB将其发送至PC。然后,程序/软件根据数据aq生成与接收到的串行数据相对应的.bin文件。硬件。有几种方法可以读取这个.bin文件并在MATLAB中绘制信号 当我用hexeditor打开这个.bin文件时,我可以看到ASCII或1和0(二进制)。问题是我不知道如何解释这些知识。在16秒内获得的文件中有208000字节。我认为每个2字节对应一个样本

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

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

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


Thnx,

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

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


这样记录采集时的采样率是一个好主意,因为在不知道这些信息的情况下,您将很难对其进行任何分析,除了琐碎的分析。这类数据通常存储在.wav文件中,因此数据及其采样率(实际上还有位深度)都存储在该文件中。这样你就不需要一张单独的纸来处理你的文件(同样,在MATLAB中读取.wav文件也非常容易)。

扩展名.bin和.dat一样,没有任何意义,它几乎不告诉你内容的格式。您使用了什么软件来捕获这些数据?它的采样率是多少?还有,你获得的数据是16秒吗?如果是这样的话,那么通过采样率,您可以确定数据是否有某种格式规范,或者实际上只是一堆值。我不记得采样率了。该程序由工程师用Delphi语言编写。这不是商业性的。每次采集都花了我16秒。然后我在hexeditor中打开文件,看到bin有208000字节的数据,所以我认为这意味着104000个16位块,104000/16秒=6500个样本/秒,因为每个样本都有16位深度。我不确定我在这里的知识。我怎么知道这些二进制数字是如何被MATLAB解释的?关于这个问题,在900页的MATLAB书中只写了一两页。我找不到任何可以了解它是如何发生的教程。它不是wav。这是一个.bin文件。我提供的代码应该适用于您的.bin文件格式。关于.wav文件的内容只是一般性的建议。
fid = fopen('path_to_your_file', 'r');
nSamples = 104000;
data = fread(fid, nSamples, 'int16');
fclose(fid);