Подпишите результаты fft

Я пытаюсь вычислить MTF из тестовой цели. Я вычисляю функцию распространения достаточно легко, но результаты FFT не имеют для меня никакого смысла. Подводя итог, значения, похоже, чередуются, что дает мне отражение того, что я ожидаю. Чтобы проверить, я использовал простую квадратную волну и numpy:

from numpy import fft data = [] for x in range (0, 20): data.append(0) data[9] = 10 data[10] = 10 data[11] = 10 dataFFT = fft.fft(data) 

Результаты выглядят корректно, за исключением знака … В качестве примера для следующих четырех значений я вижу следующее:

30.00000000 + 0.00000000e + 00j

-29,02113033 + 7,10542736e-15j

26.18033989 -1.24344979e-14j

-21.75570505 + 1.24344979e-14j

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

Примечание. В качестве примера я ожидал следующее: Пример изображения

Это то, что я получаю: Мои результаты

  • Имейте указатель на данные. Нужен массив Numpy в порядке Fortran. Хотите использовать Cython
  • Обтекание пользовательского типа указателем C ++ в Cython
  • Как найти значения в массиве, которые удовлетворяют двум условиям, используя Python
  • Почему PyCharm дает нерешенные справочные ошибки в отношении некоторых импортных операций Numpy?
  • Как изменить стиль стрелки в matplotlib аннотировать?
  • Есть ли более быстрый способ добавить два массива 2-х numpy
  • Как построить массив в python?
  • Python Pandas - изменение некоторых типов столбцов по категориям
  • 3 Solutions collect form web for “Подпишите результаты fft”

    Ваш импульс симметричен и расположен в центре вашего окна FFT (около N / 2). Симметричные реальные данные соответствуют только косинусным или «реальным» компонентам результата БПФ. Обратите внимание, что функция косинуса чередуется между -1 и 1 в центре окна FFT, в зависимости от индекса бинарной частоты (представляющего косинусные периоды по ширине FFT). Таким образом, корреляция этих базисных функций БПФ с положительным импульсом также будет чередоваться до тех пор, пока импульс будет меньше половины косинусного периода.

    Если вы хотите, чтобы наибольшие коэффициенты БПФ были в основном положительными, попробуйте центрировать ваш узкий прямоугольный импульс вокруг времени 0 (или круговое время N), где функция косинуса всегда равна 1 для любой частоты.

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

    Я сделал быструю проверку, используя ваш код и numpy.abs для mag, numpy, angle for phase. Для меня это выглядит как функция sinc (), что и ожидалось, если временная область является квадратным импульсом. Если вы это сделаете, вы обнаружите довольно широкий характер, как это было бы потрачено на короткий импульс на так много образцов.

    1. вы забыли указать, являются ли ваши данные реальными или сложными

      не каждый код в python / numpy (включая меня), и если вы этого не знаете, вы, вероятно, обрабатываете данные в / из FFT по-другому.

      • Вход FFT может быть как реальным, так и сложным доменом
      • Вывод FFT – сложный домен

      поэтому проверьте документы для реализации FFT и укажите его, а также соответствующим образом отредактируйте обработку данных. Сложный домен обычно имеет первое значение Re и Second Im, но это зависит от реализации / конфигурации FFT .

    2. сигнал

      здесь приведен пример импульсной характеристики БПФ Импульсный отклик БПФ сначала вводится сигнал реального домена (Im = 0) одиночный конечный ненулевой импульс ширины, а второй является частью Re для выхода FFT . Третья часть – это часть FFT-выхода . Если вы немного увеличите масштаб изображения, вы увидите амплитудный диапазон оси y каждого сигнала (слева).

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

       mag=sqrt(Re*Re+Im*Im); // power ang=atanxy(Re,Im); // phase angle 

      atanxy(dx,dy) – это 4 квадранта arctan также называемый atan2 но будьте осторожны, чтобы получить порядок операндов так же, как и ваши atanxy/atan2 . Также может использовать myan-реализацию my C ++

    [Заметки]

    если ваш входной сигнал является реальным доменом, тогда выход FFT является симметричным. Оба сигнала Re и Im будут выглядеть так:

     { a0,a1,a2,a3,...,a(n-1),a(n-1)...,a3,a2,a1,a0 } 

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

    Interesting Posts

    Удалить пунктуацию из строк в формате Unicode

    izip_longest в itertools: Как работает индексирование IndexError внутри итератора?

    двойная кавычка в os.system на окнах

    Как развернуть функцию в python с ее зависимостями?

    Множественные регрессионные выходные узлы в тензорном потоке

    Атрибуты объекта Python – методология доступа

    IDLE не может импортировать Tkinter. Ваш Python не может быть настроен для Tk

    Как я могу разделить эту строку с разделителями-запятыми в Python?

    Сравнение двух словарей в Python

    Форматирование строки Python с знаком процента

    python игнорировать сертификат подтверждения urllib2

    Список имен тензоров в графе в Tensorflow

    Как бы вы создали очень «Pythonic» интерфейс пользовательского интерфейса?

    Определите, присутствуют ли все элементы в списке и в том же порядке в другом списке

    Google App Engine (python): TemplateSyntaxError: инструкции «для» с пятью словами должны заканчиваться на «reverse»

    Python - лучший язык программирования в мире.