Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: БПФ
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Математика и Физика
AndreyVN
Всем привет!

Отлаживаю алгоритм комплексного БПФ, формально работает корректно, функцию туда-сюда гоняет без искажений, для синуса пики приблизительно на частоте N/(2*Pi), N-N/(2*Pi).
Не нравится как выглядит аргумент результата преобразования - с какими-то шумами (первый рисунок). Для сравнения второй рисунок - результат преобразования чистого синуса.

красная линия (пики слева и справа) - модуль комплексных к-ов Фурье образа;
зеленая линия - аргумент комплексных к-ов Фурье образа;
синяя линия - действительная часть обратного преобразования Фурье (мнимая часть =0).

Нажмите для просмотра прикрепленного файла Нажмите для просмотра прикрепленного файла
Fat Robot
Хорошо. Продолжайте наблюдение.
kovigor
Цитата(AndreyVN @ Mar 18 2015, 22:34) *
функцию туда-сюда гоняет без искажений.

Какую ? Что-то вроде меандра ?

Цитата(AndreyVN @ Mar 18 2015, 22:34) *
Не нравится как выглядит аргумент результата преобразования - с какими-то шумами (первый рисунок). Для сравнения второй рисунок - результат преобразования чистого синуса.

Явление Гиббса ?
Alex11
А что Вы на вход-то подаете? Может так и должно быть? Если там сигнал грязный, то первой будет страдать фаза, что не может не отразиться на аргументе. Если хотите вразумительного ответа, прикрепите файл с исходным сигналом.
kovigor
Цитата(Alex11 @ Mar 19 2015, 02:03) *
А что Вы на вход-то подаете? Может так и должно быть? Если там сигнал грязный, то первой будет страдать фаза, что не может не отразиться на аргументе. Если хотите вразумительного ответа, прикрепите файл с исходным сигналом.

Кстати, в том же МатЛаб'е можно посмотреть, работает как полагается отлаживаемый автором алгоритм или не работает ...
AndreyVN
Цитата(kovigor @ Mar 19 2015, 02:36) *
Какую ? Что-то вроде меандра ?


Я же написал, что синяя линия это результат обратного БПФ (колокольчик). На входе, соответственно, он-же.

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

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

Цитата
А что Вы на вход-то подаете? Может так и должно быть? Если там сигнал грязный, то первой будет страдать фаза, что не может не отразиться на аргументе. Если хотите вразумительного ответа, прикрепите файл с исходным сигналом.

Данные формируются внутри программы, входные данные для БПФ - это плотность заряда, Фурье нужно, чтобы решить уравнение Пуассона и получить потенциал поля. Раньше пользовался методом прогонки, теперь хочу перейти к методу Фурье. Чтобы сохранить текущее распределение плотности в виде файла нужно дописать такую возможность в коде программы.
ViKo
Аргумент - это же и есть фаза?
Думаю, проблема вылазит именно из-за кусочно-линейной интерполяции, из-за резких изломов. Амплитуда этих частот мала, незаметна, а скачки фазы - явно видны.
AndreyVN
Цитата(ViKo @ Mar 19 2015, 09:51) *
Аргумент - это же и есть фаза?
Думаю, проблема вылазит именно из-за кусочно-линейной интерполяции, из-за резких изломов. Амплитуда этих частот мала, незаметна, а скачки фазы - явно видны.


Поэксперементировал еще немного, шумы фазы от гладкости действительно зависят, но почему-то сохраняются на гладкой функции тоже. Убрал кусочно-линейную интерполяцию и скормил БПФ Лоренцеву кривую F = 1/(1+X^2). Шумы сильно уменьшились, но совсем не исчезли.

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

Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Xenia
Может быть, всё дело в шкале? Многие программы, выводя графики, стараются растянуть их до максимально возможного, т.е. увеличивают масштаб до тех пор, пока график хотя бы одной точкой не коснется рамки. В таких случаях пустые сканы оказываются растянутыми до безобразия, превращаясь в частокол, хотя на самом деле имеют микроскопически малый шум, если их изобразить в одном и том же масштабе со сканом, где присутствует полезный сигнал. Именно на этот вывод намекает то обстоятельство, что зеленая линия нигде не зашкаливает, изящно упираясь в рамку одной точкой. При таком сильном "шуме" случайное совпадение маловероятно.

Советую математически найти максимумы в числах для каждой кривой, а затем сравнить их между собой.
AndreyVN
Цитата(Xenia @ Mar 19 2015, 16:00) *
Может быть, всё дело в шкале?
Советую математиски найти максимумы в числах для каждой кривой, а затем сравнить их между собой.


Пардон, поторопился... Так и есть, посмотрел в пошаговом режиме аргумент масштабируется от 3E-10 до 5E-10.
mcheb
У меня получилось совсем другое
ViKo
У меня тоже (то же).
AndreyVN
Цитата(mcheb @ Mar 19 2015, 16:56) *
У меня получилось совсем другое

ViKo, mcheb - Спасибо!
Есть подозрение, что 1/(1+x^2) - неудачный пример. Mapple берет Фурье в аналитическом виде, получается сумма двух функций Хэвисайда, что совпадает во всех трех релизах Фурье преобразования. Модуль Фурье образа везде выглядит одинаково - две ступеньки слева и справа. К сожалению, Mapple не смогла выделить аргумент в аналитическом виде.

ViKo, а что такое anwrap(angle(Sp)) - ?

Можно немного схитрить, и заставить меняться фазу в больших пределах, если сдвинуть кривую по оси X, например, x f(x)=1/(1+(x-1)^2).
Теперь фаза меняется от -1.5 до 1.5, но все равно, шумит, собака, вблизи максимумов амплитуды.
Нажмите для просмотра прикрепленного файла
thermit
пф этой функции ест функция вещественная. фаза (аргумент) соответственно равен 0.
конечно же мнимая часть 0. опечатка. фаза ±π

что и показывает дпф. анврап разворачивает фазу по модулю в линию.
Alex11
Origin посчитал так: Нажмите для просмотра прикрепленного файла
Im часть там имеет значение порядка е-15 - е-17, скорее всего, при расчете недостаточна точность, поэтому плавности кривых не добиться. Возможно, недостаточна точность задания исходной кривой.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.