.bin-file读取的信号幅度错误(似乎随机错误?)

时间:2018-10-26 06:31:13

标签: python numpy binary seek fromfile

我遇到了一个我不太了解的问题。

我有一个.bin文件,其中包含信号和噪声的时间序列。我有准确的时间数据,只切出有趣的部分。

我的问题是,振幅有时会很高,有时会像预期的那样。我认为我将问题分解为以下原因:

sampling_rate = 2e6  
dt = np.dtype(np.int32) 
# get Timedata
start_raw_L1 = 261.2    # good_signal
count_raw_L1 = 1.315

# start_raw_L1 = 261.4  bad_signal
# count_raw_L1 = 1.315


start_L1 = np.int64(start_raw_L1*sampling_rate*4)
count_L1 = np.int64(count_raw_L1 * sampling_rate)

# L1
bin_data = open(bin_file, "rb")
bin_data.seek(start_L1, os.SEEK_SET)
data_L1 = np.fromfile(bin_data, dtype=dt, count=count_L1, sep='')
bin_data.close()

# Plot
plt.plot(data_L1)

因此,我选择哪个时间似乎很重要?如果我只是稍微改变开始时间,信号的幅度高度就会改变,我不明白为什么?也许有人可以帮助我。

非常感谢! 最好的祝福 巴斯蒂安

good_signal bad_signal

1 个答案:

答案 0 :(得分:0)

int(261.4*2e6*4)给出2091199999。这不是4的倍数。问题是261.4 * 2e6给出了522799999.99999994,而不是您预期的522800000。

在转换之外将乘数4移至整数:4*int(261.4*2e6)得到2091199996。您可能更喜欢4*round(261.4*2e6),得到2091200000。在您的代码中,这意味着使用例如

start_L1 = 4*np.int64(start_raw_L1*sampling_rate)