Неправильная амплитуда сигнала при чтении .bin-файла (кажется случайно неправильной?) - PullRequest
0 голосов
/ 26 октября 2018

У меня проблема, которую я на самом деле не понимаю.

У меня есть .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 голосов
/ 26 октября 2018

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)
...