Fourier transform: примеры (PYTHON)
fourier_transform(x, n, axis, norm, overwrite_x, workers): ndarrayОсновные сведения о функции fourier_transform
Функция fourier_transform обычно применяется для вычисления непрерывного преобразования Фурье в библиотеке SymPy, предназначенной для символьной математики. Она позволяет аналитически получать частотные представления сигналов и функций. Основное применение включает анализ систем, обработку сигналов и решение дифференциальных уравнений.
Синтаксис: fourier_transform(f, t, omega)
Параметры:
f– выражение (функция времени t), которое преобразуетсяt– переменная времени (исходная область)omega– частотная переменная (целевая область)
Дополнительные параметры: noconds (логический, управляет выводом условий сходимости), simplify (функция упрощения результата).
Возвращаемое значение: кортеж (F, cond), где F – преобразование Фурье, cond – условия абсолютной сходимости (если noconds=False).
Примеры использования fourier_transform
Пример 1: Преобразование прямоугольного импульса
import sympy as sp
t, omega = sp.symbols('t omega', real=True)
a = sp.symbols('a', positive=True)
f = sp.Heaviside(t + a) - sp.Heaviside(t - a)
F = sp.fourier_transform(f, t, omega)
F(2*sin(a*omega)/omega, Abs(omega) < oo)
Пример 2: Преобразование гауссовой функции с параметрами
sigma = sp.symbols('sigma', positive=True)
f = sp.exp(-t**2/(2*sigma**2))
F = sp.fourier_transform(f, t, omega, noconds=True)
sp.simplify(F)sqrt(2)*sqrt(pi)*sigma*exp(-omega**2*sigma**2/2)
Похожие функции в Python
numpy.fft.fft – реализация быстрого преобразования Фурье (БПФ) для дискретных данных. Используется для численных вычислений с массивами. Предпочтительнее в задачах обработки реальных сигналов.
scipy.fft.fft – расширенная версия БПФ из SciPy с дополнительными возможностями (нормализация, работа с многомерными массивами).
sympy.integrals.transforms.inverse_fourier_transform – обратное преобразование Фурье в SymPy для возврата к временной области.
Аналоги в других языках программирования
JavaScript (библиотека math.js):
const math = require('mathjs');
const expr = 'exp(-t^2/(2*sigma^2))';
const result = math.fourier(expr, 't', 'omega');MATLAB/Octave: встроенная функция fourier для символьных вычислений.
Java (Apache Commons Math): класс FastFourierTransformer работает с дискретными данными.
C# (MathNet.Numerics): методы Fourier.Forward и Fourier.Inverse для численного БПФ.
Типичные ошибки при использовании
Ошибка 1: Неопределенные символы без условий
t, omega = sp.symbols('t omega')
f = sp.exp(-sp.abs(t))
F = sp.fourier_transform(f, t, omega)Приводит к сложному результату с условиями, если не заданы свойства символов.
Ошибка 2: Функции без аналитического преобразования
f = sp.sin(t**2)
F = sp.fourier_transform(f, t, omega)Возвращает выражение с невычисленным интегралом, так как преобразование может не существовать в закрытой форме.
Изменения в последних версиях
В SymPy 1.12 улучшена обработка условий сходимости для преобразований. Добавлена поддержка дополнительных упрощающих функций через параметр simplify. В SymPy 1.10 исправлены ошибки с преобразованием обобщенных функций (например, дельта-функции Дирака).
Расширенные примеры применения
Пример 1: Преобразование производной функции
f = sp.sin(t)*sp.exp(-t**2)
F = sp.fourier_transform(sp.diff(f, t), t, omega, noconds=True)
sp.simplify(F)-I*omega*sqrt(pi)*exp(-omega**2/4)*sinh(omega/2)
Пример 2: Использование с обобщенными функциями
f = sp.DiracDelta(t - 3)
F = sp.fourier_transform(f, t, omega)
F(exp(-3*I*omega), Abs(omega) < oo)
Пример 3: Свертка через преобразование Фурье
f = sp.exp(-t**2)
g = sp.exp(-2*t**2)
F = sp.fourier_transform(f, t, omega, noconds=True)
G = sp.fourier_transform(g, t, omega, noconds=True)
sp.inverse_fourier_transform(F*G, omega, t, noconds=True)sqrt(6)*exp(-3*t**2/2)/3