我不明白变量“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) ;
答案 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]
的动态范围来看,数据最有可能源于某种音频文件,其中每个样本从连续(即模拟)表示转换为数字形式。