Перейти к содержанию
    

Всем привет!

 

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

Не нравится как выглядит аргумент результата преобразования - с какими-то шумами (первый рисунок). Для сравнения второй рисунок - результат преобразования чистого синуса.

 

красная линия (пики слева и справа) - модуль комплексных к-ов Фурье образа;

зеленая линия - аргумент комплексных к-ов Фурье образа;

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

 

post-18458-1426703331_thumb.jpg post-18458-1426703376_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

функцию туда-сюда гоняет без искажений.

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

 

Не нравится как выглядит аргумент результата преобразования - с какими-то шумами (первый рисунок). Для сравнения второй рисунок - результат преобразования чистого синуса.

Явление Гиббса ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Кстати, в том же МатЛаб'е можно посмотреть, работает как полагается отлаживаемый автором алгоритм или не работает ...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Аргумент - это же и есть фаза?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Аргумент - это же и есть фаза?

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

 

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

 

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

 

post-18458-1426758186_thumb.jpg

Lorents.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может быть, всё дело в шкале?

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

 

Пардон, поторопился... Так и есть, посмотрел в пошаговом режиме аргумент масштабируется от 3E-10 до 5E-10.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня получилось совсем другое

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, но все равно, шумит, собака, вблизи максимумов амплитуды.

post-18458-1426789729_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

пф этой функции ест функция вещественная. фаза (аргумент) соответственно равен 0.

конечно же мнимая часть 0. опечатка. фаза ±π

 

что и показывает дпф. анврап разворачивает фазу по модулю в линию.

Изменено пользователем thermit

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Origin посчитал так: LorentzOut.zip

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...