Для практической работы с сигналами и спектрами воспользуемся возможностями языка Python. Возьмем модуль thinkdsp.py, любезно предоставленный для всеобщего пользования Алланом Дауни. Данный модуль который содержит классы и функции для работы с сигналами и спектрами.
Для представления сигналов thinkdsp предоставляет класс Signal, который является родительским классом для нескольких типов сигналов, включая Sinusoid, который представляет как синусоидальные, так и косинусоидальные сигналы.
thinkdsp предоставляет функции для создания синусоидальных и косинусоидальных сигналов

- freq — частота в Гц
- amp — амплитуда в неопределенных единицах, где 1.0 — это наибольшая амплитуда, которую мы можем записать или воспроизвести
- offset — это сдвиг фазы в радианах. Сдвиг фазы определяет, где в периоде начинается сигнал. Например, синусоидальный сигнал с offset = 0 начинается с sin(0), что равно 0. При offset = π/2 он начинается с sin(π/2), что равно 1.
У класса Signal есть метод __add__, так что вы можете использовать оператор +, чтобы суммировать их:

Результатом является SumSignal, который представляет собой сумму двух или более сигналов.
Signal — это в основном представление математической функции на языке Python. Большинство сигналов определены для всех значений t, от отрицательной бесконечности до бесконечности.
Вы не сможете многое сделать с Signal, пока не определите его. В этом контексте «определите» означает взять последовательность моментов времени ts и вычислить соответствующие значения сигнала ys. Последовательности ts и ys представляются с помощью массивов NumPy и инкапсулируются в объект, называемый Wave.
Wave представляет собой сигнал, определенный в последовательности моментов времени. Каждый момент времени называется отсчетом.
Объект типа Signal предоставляет метод make_wave, который возвращает новый объект Wave:

duration— длина волны в секундах,start— время начала, также в секундах,framerate— это (целое) количество кадров в секунду, которое также является количеством выборок в секунду.
11025 кадров в секунду — это одна из нескольких частот кадров, обычно используемых в форматах аудиофайлов, включая Waveform Audio File (WAV) и mp3.
В этом примере оценивается сигнал от t = 0 до t = 0,5 на 5 513 равномерно распределенных отсчетах (5 513 — это половина от 11 025). Время между отсчетами, или временной шаг, составляет 1/11025 секунды, примерно 91 мкс.
Wave предоставляет метод построения графика, использующий pyplot. Вы можете отобразить сигнал следующим образом:

pyplot является частью matplotlib; он включен во многие дистрибутивы Python, или вам, возможно, придется его установить.
При freq = 440 есть 220 периодов в 0,5 секунды, поэтому этот график будет выглядеть как сплошной цветной блок. Чтобы увеличить небольшое количество периодов, мы можем выбрать участок сигнала, скопировав его в новый сигнал:

period— это свойство Signal; возвращает период в секундахstartиdurationуказаны в секундах.
В этом примере из mix копируются первые три периода. В результате получился объект Wave.
Если построить отрезок, он будет похож на рисунок ниже. Этот сигнал содержит две частотные составляющие, поэтому он более сложен, чем сигнал от камертона, но менее сложен, чем сигнал скрипки.

