这个Matlab代码做了什么?

时间:2016-10-06 05:10:52

标签: matlab

我不明白变量“samples”的含义是什么:

filename = 'A2D.bin' ;
fid = fopen(filename) 
data = fread(fid , 'uint8') ;
num_of_bits = 8 ;
samples = data * 2 / (2^num_of_bits - 1) - 1 ;
fclose(fid) ;

1 个答案:

答案 0 :(得分:3)

代码实际上是在一个名为A2D.bin的数据文件中读取,其中元素存储在名为data的数组中。但请注意,fread调用假设每个8位块都是无符号的,并且表示数组中的一个数字。这意味着您的数据最初包含来自[0,255]的数字。 samples只是将这些数据标准化,使其在[-1,1]范围内。

逻辑地打破步骤。正在执行data / (2^num_of_bits - 1) data / 255会对您的数据进行规范化,使其范围为[0,1]。将结果乘以2,或执行data * 2 / (2^num_of_bits - 1),从而对数据进行缩放,使范围现为[0,2]。最后,当您在语句末尾减去1时,执行data * 2 / (2^num_of_bits - 1) - 1;最后会将数据向下移动-1,这会使您的数据变为[-1,1]

从文件名来看,这可能是模数转换器的输出,你想要的是8位的每个数字模块的模拟等价物。从[-1,1]的动态范围来看,数据最有可能源于某种音频文件,其中每个样本从连续(即模拟)表示转换为数字形式。