Уравновешенное троичное БПФ от размерных величин

Aug 01, 2015 13:49

На этой неделе наконец-то стряхнул пыль с бедного УТ БПФ и модернизировал его немножко, чтобы он мог работать с любыми величинами, поддерживающими сложение и умножение друг на друга и на комплексные величины, например, с размерными, описанными в библиотеке new_phys_unit_lib (калькулятор PhysUnitCalc - простенькая графическая оболочка для этой библиотеки). Вот что получается:




Мы начали с последовательности температур, изображенной слева сверху. Сделав прямое УТ БПФ, получаем последовательность справа - она начинается с отрицательных частот, затем идет постоянная составляющая (20 °C), затем положительные частоты. Если вычесть постоянную составляющую из исходной последовательности, получим нечетную функцию (надо помнить, что ноль расположен строго посередине), поэтому комплексные амплитуды получаются чисто мнимыми.

Что меня больше всего радует - само собой получилось, что постоянная составляющая имеет величину °C (температура в градусах Цельсия), а гармоники - °C{dif} (РАЗНОСТЬ температур в градусах Цельсия), это делает корректным перевод из Цельсиев в Кельвины или в Фаренгейты уже преобразованной последовательности.

Именно так оно проделано строкой ниже: мы перевели исходную последовательность в Кельвины и только потом сделали УТ БПФ, получив результат снизу справа. Для того, чтобы эти результаты переходили друг в друга при смене единицы измерения, было необходимо сохранить дополнительный контекст - где у нас абсолютная температура, а где разность, и о чудо - он у нас есть!

Впрочем, не помешает сделать более быстрый вариант УТ БПФ для размерных величин, который "срывает" с них обертку, преобразует только числа, а потом возращает на место правильные размерности. тем самым преобразование {1;1;1;...;1} - > {0;0...0;1;0;...;0} мы проведем в уме, тогда как сейчас оно вычислялось в явном виде.

На очереди: выполнение линейной свертки сигналов с помощью УТ БПФ, оказывается, и здесь уравновешенное БПФ ложится куда более гладко!

UPD. И еще здесь не может возникнуть путаницы с масштабирующим множителем. На рисунке приведен вариант УТБПФ, когда деление на N происходит в прямом преобразовании, потому что именно тогда мы получаем постоянную составляющую, а не сумму всех чисел, которая сложнее для восприятия.

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

моделирование, математика, physunitcalc, уравновешенное троичное БПФ

Previous post Next post
Up