Неверное значение амплитуды сигнала при чтении .bin-файла (кажется ошибочным?)

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

У меня есть .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)

Похоже, какое время я выберу, имеет большое значение? Если я просто немного изменю время начала, сигнал изменится по высоте амплитуды, я не понимаю, почему? Может, кто-нибудь сможет мне помочь.

Большое спасибо! С наилучшими пожеланиями Bastian

good_signal bad_signal

0
0
21
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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)

Вот и все, спасибо! отлично работает в моем коде.

Bastian Jülich 26.10.2018 16:47

Другие вопросы по теме