Я прикрепил пропеллер к двигателю и ударил по нему куском мягкого пластика.
Мне известна теорема о частоте Найквиста, согласно которой я могу обнаруживать только частоты ниже SAMPLE_RATE/2 Гц.
Мои вопросы следующие:
Почему не работает ускорение так сильно меняется, когда я добавляю кусок пластика?
Я хотел бы обнаружить аномальную вибрацию моего двигателя. Я использую следующие устройства: [list] [*]Raspberry PI 5 [*]Акселерометр Adafruit ISM330DHCX [/list] Мне удалось считывать показания датчика с определенной частотой (2000 Гц) и Я использую абсолютное значение (хотя оно не сильно меняется): [code]def read_sensor(): global data target_duration = 1 / SAMPLE_RATE
# Connect to sensor ...
while True: loop_start_time = time.perf_counter()
x, y, z = accelerometer.acceleration acceleration = np.sqrt(x**2 + y**2 + z**2) data = np.roll(data, -1) data[-1] = acceleration
# Try to get exactly SAMPLE_RATE per second loop_duration = time.perf_counter() - loop_start_time sleep_time = max(0, target_duration - loop_duration) end_time = time.perf_counter() + sleep_time while time.perf_counter() < end_time: pass [/code] Затем я использую numpy.fft для вычисления БПФ для приведенных выше данных и сохранения его в файл CSV: [code]n = len(data) fft = abs(np.fft.fft(data * np.blackman(n)))[:n//2] amplitudes = np.abs(fft) / n
# Generate summary result = { 'mean': round(data.mean(), 4), 'std': round(data.std(), 4), 'max': round(data.max(), 4), 'min': round(data.min(), 4), 'range': round(data.max() - data.min(), 4), 'fft_mean': round(np.mean(fft), 4), 'fft_std': round(np.std(fft), 4), 'max_freq': round(frequencies[max_index], 4), 'max_amp': round(max_amplitude, 4), 'speed': duty_cycle } [/code] Он создает такие строки: [code]mean,std,max,min,range,fft_mean,fft_std,max_freq,max_amp,speed 9.9587,0.1261,10.599,9.5467,1.0523,15.6502,308.3268,0.0,4.1798,47 9.9609,0.1287,10.599,9.5467,1.0523,16.2121,308.5345,0.0,4.1826,47 [/code] Я прикрепил пропеллер к двигателю и ударил по нему куском мягкого пластика. Мне известна теорема о частоте Найквиста, согласно которой я могу обнаруживать только частоты ниже SAMPLE_RATE/2 Гц. Мои вопросы следующие: [list] [*]Почему не работает ускорение так сильно меняется, когда я добавляю кусок пластика? [*]Почему мое БПФ всегда показывает частоту 0,0? [*]Где я допустил ошибку в своем код ? [/list]