Проектирование Оконных Функций, Которые В Сумме Составляют Блок С Заданным Уровнем Перекрытия.

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

В частности, этот подход используется для анализа сигнала с использованием оконного преобразования Фурье или наоборот во время синтеза; а также в спектральной обработке, такой как удаление шума, изменение темпа, нелинейная фильтрация, сжатие аудиоданных и другие.

Сам процесс разбиения математически представляется умножением на некоторый вес ( окно ) функция со смещением.

Для самого простого окна – прямоугольного – это может выглядеть так: Исходный сигнал:

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

Разделы:

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>



Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>



Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

Восстановить исходный сигнал можно, просто суммировав их.



Подробнее

Однако по ряду причин прямоугольная функция не является лучшей оконной функцией.

При спектральном анализе посредством (обычно быстрого) дискретного преобразования Фурье анализируемый блок данных как бы «зацикливается», что приводит к разрыву по краям и искажению спектра:

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

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

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

Для устранения этих недостатков используется перекрытие – когда каждое следующее окно захватывает часть данных из предыдущего; и окно веса, соответственно, плавно опускается к краям.



перекрытие 50%

Чаще всего для этого используется окно Ханны (также известный как приподнятый косинус) с перекрытием 50 %:

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>



Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>



Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>



Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>



Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>



Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

Ввиду симметричности косинусов при сложении они суммируются до единицы:

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

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

Например, при переворачивании одной из деталей плавность не нарушится:

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>



Обработка двойного окна

Давайте подробнее рассмотрим алгоритм обработки сигналов с помощью быстрого преобразования Фурье (БПФ):
  1. разделение сигнала на сегменты с наложением окна;
  2. прямое БПФ;
  3. обработка спектра;
  4. обратное БПФ;
  5. повторное наложение окна (поскольку после обратного БПФ границы не обязательно будут встречаться с нулем без разрыва);
  6. суммирование полученных отрезков.

При этом, если спектр не обрабатывается, выходной сигнал должен быть идентичен входному сигналу (только с неизбежной задержкой по времени).

При использовании окна Ханны перекрытия в 50% уже недостаточно, так как будут возникать сбои:

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

Поскольку двойное наложение эквивалентно возведению в квадрат, очевидным решением будет использование корня окна Ханна для компенсации возведения в квадрат:

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

Однако в этом случае окно уже не было гладким по краям — появился разрыв в первой производной.

Примечание Интересно, что в данном случае мы получили половину периода синусоиды.

Можно пойти другим путем - использовать перекрытие 75%, и тогда окна тоже будут суммироваться в константу - только не в

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

, И в

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

:

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

В данном случае нам просто повезло.

Если разложить квадрат на сумму, то можно увидеть, что он представляет собой композицию двух окон Ханны, но в разных масштабах, что позволяет выполнить нужные нам требования:

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>



Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

Этот трюк не будет работать с другими функциями окна; кроме того, не все стандартные оконные функции могут обеспечить суммирование до константы даже при перекрытии 50%.



Идея

Окно Ханна можно рассматривать не как самостоятельную функцию, а как разность двух кусочно-непрерывных функций (подробно рассмотренных в разделе отдельная статья ) со смещением.

Например, используя следующую функцию

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>



Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

можно записать

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>



Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

Рассмотрев составляющие суммы двух таких окон, становится более понятной их способность суммироваться в константу:

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

На сегменте

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

мы получили взаимную компенсацию при добавлении функций

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

И

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

, поскольку

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

Вы можете выбрать другое смещение, нажав b О большее перекрытие, например:

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>



Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

А потом, при сдвиге по шагам

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

, они также будут суммированы в константу:

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

Видно, что если переставить компоненты оконной функции, то получатся те же окна Ханны.

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



Окончательная формула

Теперь осталось только установить масштаб так, чтобы области определения и значения не зависели от степени перекрытия.

Определив окно на интервале

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

мы получаем

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

Где

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

— кусочно-непрерывная функция вида

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

А

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

— некоторая интерполирующая функция между точками

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

И

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

.

Параметр

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

определяет уровень перекрытия — делитель, определяющий шаг, на который должно сдвигаться каждое следующее окно,

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

, и должно быть больше единицы,

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

.

Процент перекрытия

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

можно рассчитать по формуле

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

и соответственно наоборот

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

Примечание При работе с реальными данными может возникнуть необходимость пересчета уровня перекрытия в зависимости от конкретного размера БПФ.

Например, при БПФ 2048 точек и уровне перекрытия 3 получим шаг 2048/3=682,666., что на практике, конечно, неосуществимо.

Итак, давайте округлим его до целого числа и

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

Пересчитаем как 2048/683=2,998535871156662… Или можно поступить наоборот — использовать размер окна, заведомо кратный 3 (скажем, 999), а остаток заполнить нулями (25-й) до необходимого размера для БПФ.

Окончательный вид окна будет зависеть как от выбора уровня перекрытия, так и от выбора ограничивающей функции.

Несколько интересных примеров Здесь мы рассмотрим несколько готовых решений, ради которых все и затевалось.

Для простоты будем просто рассматривать интерполирующую функцию

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

, без какой-либо другой привязки.



Полиномиальные окна

Они наименее затратны в вычислительном отношении.

С использованием ранее полученный формула

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

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

первые 10 полиномов

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

При перекрытии 75% окна с разными значениями n будут выглядеть так:

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

А в случае с извлечением корня это работает следующим образом (при перекрытии 75%):

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

или вот так (с перекрытием 50%):

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>



Максимально гладкое окно

Функция

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

интересен тем, что он бесконечно дифференцируем и все его производные на краях равны 0 (что можно доказать, рассматривая его производные на основе правил дифференцирования — в каждом слагаемом будет множитель, обнуляющий его).

Это позволяет строить на его основе окна, все производные которых не имеют разрывов:

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>



Окно просмотра юбки

Необходимость в таком типе окна обусловлена тем, что разрешающая способность БПФ увеличивается, но снижается влияние эффекта «частотно-временной неопределенности» на высоких частотах за счет увеличения их концентрации в центре.

Сначала определяем желаемый тип оконной функции — например, так:

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>



Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

Здесь первое слагаемое определяет вид самой функции, второе обеспечивает пересечение с осью абсцисс, третье (парабола) сбрасывает производную по краям для плавного соединения; и параметр

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

определяет «остроту» вершины.

В таком виде он пока не пригоден для использования — сначала из него нужно получить функцию ограничения путем интегрирования и масштабирования:

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

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

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

до уровня пола

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

- например, так, чтобы 4-я производная в центре окна была равна 0 - и тогда

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

будет рассматриваться как

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

:

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

Здесь для наглядности все окна показаны в одном масштабе.



Смотровое окно «Игла»

Это более «агрессивная» версия предыдущего окна.

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

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

и используя те же действия в виде интегрирования и масштабирования мы получили формулу

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

Здесь также можно привязать параметр

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

до уровня пола.

Прямое решение уравнения 4-й производной дает слишком громоздкий результат, поэтому просто сделаем это по образу и подобию из решения для предыдущего окна, определив

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

Как

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

, тем самым обеспечивая роль параметра

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

как «тонкая настройка».

В

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

окна будут выглядеть так:

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>



Асимметричное окно

Оконная функция не обязательно должна быть симметричной.

Допустим, нам нужно окно с резкой атакой и плавным затуханием.

Получить его можно по уже знакомой схеме – сначала определить искомый вид функции, а затем путем интегрирования получить функцию ограничения.

Здесь задача несколько усложняется из-за того, что из-за асимметрии центр уже не будет проходить через начало координат, поэтому добавляется дополнительный этап расчета.

Это также приводит к тому, что формулы становятся довольно громоздкими.

Для примера рассмотрим самый простой вариант — параболу, умноженную на окно полиномиального веса:

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>



Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

Здесь степень х в весовом окне (а именно 10) определяет «остроту» атаки.

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

После интеграции простого масштабирования уже недостаточно — нужно еще и выровнять края:

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

Для этого мы сначала сдвинем функцию вверх, чтобы выровнять левый край, а затем масштабируем ее до двух по правому краю и вычтем одну.

Тогда мы получим следующую формулу:

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>

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

Проектирование оконных функций, которые в сумме составляют блок с заданным уровнем перекрытия.
</p><p>



Заключение

Подобным образом можно конструировать окна из любых других колоколообразных функций — например, гауссиан; а также можно модифицировать уже обсуждавшиеся, чтобы обеспечить большую плавность или изменить форму кривой.

Спектральный состав таких оконных функций остается за пределами рассмотрения; Этому необходимо посвятить отдельные исследования.

Чуть более расширенную версию статьи (с возможностью динамического изменения параметров в рассматриваемых окнах и скрытыми формулами) можно скачать в виде документа Wolfram Mathematica. Здесь .

Теги: #Звук #математика #bpf #обработка сигналов #Wolfram Mathematica #DSP #оконные функции #fft #весовые функции

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.