Tag Archives: сигнал

Гладкая интерполяция между синусоидой и прямоугольной волной

Представим, что есть задача получить нечто среднее между синусоидой

\mathrm{Sin}\,(t) \triangleq \sin{2\pi t}

и прямоугольной волной

\mathrm{Rect}\,(t) \triangleq \mathrm{sgn}\,\mathrm{Sin}\,(t).

Очевидно, что банальная поточечная линейная интерполяция с параметром \alpha \in [0, 1]:

(1-\alpha)\,\mathrm{Sin}\,t + \alpha\,\mathrm{Rect}\,t

не является функцией, всюду дифференцируемой по t. Впрочем, оказывается, легко получить гладкую «промежуточную» функцию, использовав арктангенс:

R_\alpha\,(t) \triangleq \dfrac{\mathrm{arctg}\,(\alpha\,\mathrm{Sin}\,(t))}{\mathrm{arctg}\,\alpha}.

Здесь уже \alpha \in (0, +\infty).
Легко видеть, что

\lim\limits_{\alpha\to 0} R_\alpha\,(t) = \mathrm{Sin}\,(t),\quad \lim\limits_{\alpha\to +\infty} R_\alpha\,(t) = \mathrm{Rect}\,(t).

Графики R_\alpha\,(t), t \in [0, 2], \alpha \in \{\,1, 10, 1000\,\}:

Реклама

Кубический сплайн перестройки частоты

Предположим, требуется сгенерировать «синусоиду» с плавной перестройкой частоты. Частота зависит от времени? Пожалуйста:

S(t) \triangleq \sin(2\pi f(t) t),

где f(t) — функция, управляющая частотой (в том, что это ещё не есть частота per se убедимся на примере).

Итак, пусть заданы два числа f_1 и f_2 — начальная и конечная частоты. Ну что же, ничтоже сумняшеся строим f(t) как кубический сплайн с условиями f(0) = f_1, f(1) = f_2, f'(0) = f'(1) = 0. Из этих условий легко получить, что

f(t) = f_1 + (f_2 - f_1)(3t^2 - 2t^3).

Результаты аналитических манипуляций надобно проверять практикой. Подставим в синус и построим перестройку с 110Гц на 330Гц и обратно (1с 110Гц, 1с перестройка, 1с 330Гц, 1с перестройка обратно, 1с 110Гц): звук 1. (Звук внедрён в pdf, поскольку бесплатный план WordPress.com не позволяет размещать звуковые файлы.)

Мда, что-то тут не так… Если построить график f(t), то он вроде бы выглядит идеально. Очевидно, считать эту функцию частотой (высотой звука в данном контексте) ошибочно. Я не хочу лезть глубже элементарного анализа (никаких преобразований Фурье и иже с ними), поэтому рассмотрю задачу с другой стороны. Если частота k постоянна, то имеем:

(\sin(2\pi k t))' = 2\pi k \cos(2\pi k t)).

Что если частоту определять через производную функции S(t)?

S'(t) = 2\pi (f'(t) t + f(t)) \cos(2\pi f(t) t)).

Определим новую функцию

F(t) \triangleq (f'(t) t + f(t)) = 4at^3 + 3bt^2 + 2ct + d.

Опять будем искать f(t) в форме кубического четырёхчлена f(t) \triangleq at^3 + bt^2 + ct + d, но условия изменим. Пусть теперь F(0) = f_1, F(1) = f_2, F'(0) = F'(1) = 0. Получим:

f(t) = f_1 + (f_2 - f_1)(t^2 - \frac{1}{2} t^3).

Подставим в синус и построим такую же перестройку с 110Гц на 330Гц и обратно: звук 2. Ну что же, теперь всё в порядке!