Найти в Дзене
Властелин машин

3 гибких способа создать сигнал

В этой статье я расскажу о том, как создавать сигналы и регулировать их характеристики.
Программный высокоуровневый
Для генерации сигналов можно использовать программный пакет на Python ThinkDSP, разработанный профессором компьютерных наук в инженерном колледже Олин - Алленом Б. Дауни. Так, модуль code.thinkdsp содержит классы синусоидальных и косинусоидальных сигналов. Чтобы создать их
Оглавление

В этой статье я расскажу о том, как создавать сигналы и регулировать их характеристики.

Программный высокоуровневый

Для генерации сигналов можно использовать программный пакет на Python ThinkDSP, разработанный профессором компьютерных наук в инженерном колледже Олин - Алленом Б. Дауни. Так, модуль code.thinkdsp содержит классы синусоидальных и косинусоидальных сигналов. Чтобы создать их экземпляры требуется задать частоту, амплитуду и смещение сигнала. Из него создается объект Wave, представляющий дискретную по времени форму представления сигнала. Метод его генерации получает в качестве параметров длительность, частоту дискретизации и время начала отсчета. Для отображения используется метод plot объекта Wave:

-2
-3

Программный низкоуровневый

Данный способ сложнее предыдущего, зато одновременно позволяет осуществлять более гибкие настройки создания и отображения сигнала.

Так, потребуется задать частоту, амплитуду, смещение и длительность сигнала, а также частоту дискретизации. Из них получаются:

  • количество отсчетов = длительность/время_фиксации_одного_значения = длительность/период_дискретизации = длительность*частоту дискретизации;
  • временные интервалы - N отстоящих друг от друга на период_дискретизации точек;
  • значения сигнала = произведение амплитуды на синусоиду, учитывающую частоту сигнала, время и смещение.

Также можно задать шум и суммировать его с сигналом. Предлагаю следующий скрипт на Python для генерации сигнала:

-4

В результате наш сигнал будет иметь вид схожий с тем, что получился с использованием пакета ThinkDSP:

-5

Простой, с использованием утилиты ffmpeg

Данный способ я упоминал ранее и он заключается в запуске всего одной команды:

ffmpeg -f lavfi -i "sine=frequency=частота:sample_rate=частота_дискретизации:duration=длительность" -b:a битрейт имя_выходного_файла

Например, чтобы создать синусоидальный сигнал частотой 100 Гц, частотой дискретизации 11025 Гц, битрейтом 128 кб/с, длительностью
1 с, потребуется набрать:

ffmpeg -f lavfi -i "sine=frequency=100:sample_rate=11025:duration=1" -b:a 128k sound.wav