В этой статье я расскажу о том, как создавать сигналы и регулировать их характеристики.
Программный высокоуровневый
Для генерации сигналов можно использовать программный пакет на Python ThinkDSP, разработанный профессором компьютерных наук в инженерном колледже Олин - Алленом Б. Дауни. Так, модуль code.thinkdsp содержит классы синусоидальных и косинусоидальных сигналов. Чтобы создать их экземпляры требуется задать частоту, амплитуду и смещение сигнала. Из него создается объект Wave, представляющий дискретную по времени форму представления сигнала. Метод его генерации получает в качестве параметров длительность, частоту дискретизации и время начала отсчета. Для отображения используется метод plot объекта Wave:
Программный низкоуровневый
Данный способ сложнее предыдущего, зато одновременно позволяет осуществлять более гибкие настройки создания и отображения сигнала.
Так, потребуется задать частоту, амплитуду, смещение и длительность сигнала, а также частоту дискретизации. Из них получаются:
- количество отсчетов = длительность/время_фиксации_одного_значения = длительность/период_дискретизации = длительность*частоту дискретизации;
- временные интервалы - N отстоящих друг от друга на период_дискретизации точек;
- значения сигнала = произведение амплитуды на синусоиду, учитывающую частоту сигнала, время и смещение.
Также можно задать шум и суммировать его с сигналом. Предлагаю следующий скрипт на Python для генерации сигнала:
В результате наш сигнал будет иметь вид схожий с тем, что получился с использованием пакета ThinkDSP:
Простой, с использованием утилиты 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