Введение в дискретное преобразование Фурье
В Mathcad входят два типа функций для дискретного преобразования Фурье: fft/ifft и cfft/icfft . Эти функции дискретны: они берут в качестве аргументов и возвращают векторы и матрицы. Они не могут быть использованы с другими функциями.
Используйте функции fft и ifft, если выполнены следующие два условия:
аргументы вещественны, и
вектор данных имеет 2m элементов.
Используйте функции cfft и icfft во всех других случаях. Первое условие необходимо, потому что функции fft/ifft используют тот факт, что для вещественных данных вторая половина преобразования Фурье является комплексно сопряженной с первой. Mathcad отбрасывает вторую половину вектора-результата. Это сохраняет и время и память при вычислениях.
Пара функций cfft/icfft не использует симметрию в преобразовании. По этой причине необходимо использовать их для комплексных данных. Так как вещественные числа — подмножество комплексных чисел, можно также использовать пару cfft/icfft для вещественных чисел.
Второе условие требуется, потому что пара функций fft/ifft использует высоко эффективный алгоритм быстрого преобразования Фурье. Для этого вектор аргумента, используемого с fft, должен иметь 2m элементов. В функциях сfft/icfft использован алгоритм, который допускает в качестве аргументов как матрицы, так и векторы произвольного размера. Когда эта пара функций используется с матрицей в качестве аргумента, вычисляется двумерное преобразование Фурье.
Обратите внимание, что, если использована функция fft для прямого преобразования, необходимо использовать функцию ifft для обратного. Аналогично, если для прямого преобразования использована cfft, то для обратного необходимо использовать icfft.
Различные формулировки определения преобразования Фурье используют различные нормировочные коэффициенты и соглашения о знаке перед мнимой единицей в показателе экспоненты прямого и обратного преобразований. Функции fft, ifft, cfft и icfft используют 1/ как нормировочный коэффициент и положительный показатель степени в прямом преобразовании. Функции FFT, IFFT, CFFT и ICFFT используют 1/N как нормировочный коэффициент и отрицательный показатель степени в прямом преобразовании. Необходимо использовать эти функции попарно. Например, если используется CFFT в прямом преобразовании, необходимо использовать ICFFT в обратном.
Преобразование Фурье в вещественной области
Для вещественнозначных векторов с 2m элементами можно применять пару функций fft/ifft. В алгоритме вычисления этих функций используются преимущества симметрии, существующей только для вещественных данных. Это позволяет сохранить и время, и память, необходимые для вычислений.
fft (v) | Возвращает дискретное преобразование Фурье 2m-мерного вещественнозначного вектора. Аргумент можно интерпретировать как результат измерений через равные промежутки времени некоторого сигнала. |
Вектор v должен иметь 2m элементов. Результат — комплекснозначный вектор размерности 1+2m-1. Если v имеет размерность отличную от 2m, Mathcad выдает сообщение об ошибке “неверный размер вектора”.
Элементы вектора, возвращаемого fft, вычисляются по формуле
В этой формуле n — число элементов в v, i — мнимая единица.
Элементы в векторе, возвращенном функцией fft, соответствуют различным частотам. Чтобы восстанавливать фактическую частоту, необходимо знать частоту измерения исходного сигнала. Если v есть n-мерный вектор, переданный функции fft, и частота измерения исходного сигнала — fs, то частота, соответствующая , равна
Обратите внимание, что это делает невозможным обнаружить частоты выше частоты измерения исходного сигнала. Это — ограничение налагаемое не Mathcad, а самой сутью проблемы. Чтобы правильно восстанавливать сигнал по его преобразованию Фурье, необходимо произвести измерения исходного сигнала с частотой, по крайней мере вдвое большей, чем ширина полосы частот. Полное обсуждение этого явления лежит за пределами данного руководства, но его можно найти в любом учебнике по цифровой обработке сигналов.
ifft (v) | Возвращает обратное дискретное преобразование Фурье; результат — вещественнозначный. |
Вектор v должен иметь 1+ 2m элементов, где m — целое. Результат есть комплекснозначный вектор размерности 2m+1. Если v имеет размерность, отличную от 1+ 2m, Mathcad выдает сообщение об ошибке “неверный размер вектора”.
Аргумент v — вектор, подобный созданному функцией fft. Чтобы вычислить результат, Mathcad сначала создает новый вектор w, комплексно сопряженный v, и присоединяет его к вектору v. Затем Mathcad вычисляет вектор d, чьи элементы вычисляются по формуле:
Это та же самая формула, что и для fft, кроме знака минус в функции exp. Функции fft и ifft — точные обращения. Для всх вещественнозначных v справедливо ifft(fft(v))=v.
Преобразование Фурье в комплексной области
Имеются две причины, по которым не могут быть использованы пары преобразований fft/ifft, обсужденные в предыдущем разделе:
Данные могут быть комплекснозначны. Это означает, что Mathcad не может больше использовать симметрию, имеющую место в вещественном случае.
Вектор данных может иметь размерность, отличную от 2m. Это означает, что Mathcad не может пользоваться преимуществом высокоэффективного алгоритма БПФ, используемого парой fft/ifft.
Комплексное преобразование Фурье требует следующих функций:
cfft (A) | Возвращает дискретное преобразование Фурье комплекснозначных вектора или матрицы. Возвращаемый массив имеет тот же самый размер, что и массив, используемый как аргумент. |
icfft (A) | Возвращается обращение дискретного преобразования Фурье вектора или матрицы данных. Функция icfft — обратная к функции cfft. Подобно cfft, эта функция возвращает массив того же самого размера, что и аргумент. |
Рисунок 3: Использование быстрых преобразований Фурье в Mathcad.
Пара преобразований cfft/icfft может работать с массивами любого размера. Однако они работают значительно быстрее, когда число строк и столбцов может быть представлено в виде произведения большого количества меньших сомножителей. Например, векторы с длиной 2m относятся к этому классу, так же как и векторы, имеющие длины, подобные 100 или 120. С другой стороны, вектор, чья длина — большое простое число, замедлит вычисление преобразования Фурье.
Функции cfft и icfft — обратные друг к другу. То есть icfft(cfft(v))=v. Рисунок 3 показывает примеры использования преобразования Фурье в Mathcad.
Когда в качестве аргумента cfft используется матрица, результат есть двумерное преобразование Фурье исходной матрицы.
Альтернативные формы преобразования Фурье
Определения преобразования Фурье, обсужденные выше, не являются единственно возможными. Например, следующие определения для дискретного преобразования Фурье и его обращения можно найти в книге Ronald Bracewells, The Fourier Transform and Its Applications (McGraw-Hill, 1986):
Эти определения весьма распространены в технической литературе. Чтобы использовать эти определения вместо обсужденных в предыдущем разделе, используйте функции FFT, IFFT, CFFT и ICFFT. Они отличаются следующим:
Вместо коэффициента 1/ перед обеими формулами в прямом преобразовании стоит коэффициент 1/n, и коэффициент 1 в обратном преобразовании.
Знак минус появляется в показателе экспоненты прямого преобразования и исчезает в формуле обратного.
Функции FFT, IFFT, CFFT и ICFFT используются аналогично функциям, обсужденным в предыдущем разделе.
Волновое преобразование
A Mathcad PLUS включены две функции волновых преобразований: для выполнения прямого одномерного дискретного волнового преобразования и его обращения. Преобразование выполняется с использованием четырехкоэффициентного волнового базиса Даубечи.
wave (v) | Возвращает дискретное волновое преобразование v, 2m-мерного вещественнозначного вектора. Возвращается вектор того же самого размера, что и v. |
iwave (v) | Возвращает обращение дискретного волнового преобразования v, 2m-мерного вещественнозначного вектора. Возвращается вектор того же самого размера, что и v. |
Mathcad содержит три функции, показанные на Рисунке 4, для сортировки массивов и одну для обращения порядка их элементов:
sort(v) | Возвращает элементы вектора v, отсортированные в порядке возрастания. |
csort (A, n) | Сортирует строки матрицы таким образом, чтобы расположить элементы в столбце n в порядке возрастания. Результат имеет тот же самый размер, что и A. |
rsort (A, n) | Сортирует столбцы матрицы таким образом, чтобы расположить элементы в строке n в порядке возрастания. Результат имеет тот же самый размер, что и A. |
reverse (v) reverse (A) | Обращает порядок элементов вектора v или строк матрицы A. |
Функции, описанные выше, используют в качестве аргумента комплекснозначные матрицы и векторы. Однако при их сортировке Mathcad игнорирует мнимую часть.
Для сортировки вектора или матрицы в порядке убывания сначала сортируйте их в порядке возрастания, а затем используйте функцию reverse. Например, reverse(sort(v)) возвращает элементы v, отсортированного в порядке убывания.
Если только значение ORIGIN не изменено, матрицы будут пронумерованы, начиная с нулевой строки и нулевого столбца. Забыв это, легко ошибиться при сортировке матрицы, просто определяя неправильный параметр n для rsort и csort. Чтобы сортировать по первому столбцу матрицы, например, необходимо использовать csort (A, 0).
Рисунок 4: Функции сортировки.
Кусочно-непрерывные функции полезны для управления ветвлениями и остановками вычислительных процессов. Имеются пять функций Mathcad, относящихся к этому классу. Функция if полезна для выбора одного из двух значений, определяемого условием. Ступенчатая функция Хэвисайда и символ Кронекера (m, n) во многом аналогичны функции if.
Функция until используется, чтобы управлять процессом итераций. Это единственая из функций Mathcad, специально предназначенная для работы только с дискретным аргументом, она может остановить итерации при достижении некоторого заданного условия.
В Mathcad PLUS можно использовать возможности программирования для выполнения логических ветвлений и циклов в вычислениях. См. описание возможностей программирования Mathcad в Главе "Программирование".
Последняя функция — , полностью антисимметричный тензор. Она возвращает 0, 1 или -1 в зависимости от перестановки аргументов. Хотя эта функция имеет ограниченную применимость, было бы трудно заменить её, используя комбинацию любых других функций Mathcad.
- Буквенные индексы
- Ниже приводится полный список предопределенных переменных Mathcad и их значений по умолчанию:
- Используемые числа
- Специальные операции над комплексными числами
- Многозначные функции
- Создание вектора
- Создание матрицы
- Изменение размера матрицы
- Нижние индексы и элементы вектора
- Изменение способа отображения массивов
- Графическое представление матриц
- Ограничение входных массивов
- Ограничение отображаемых массивов
- Ограничение размеров массива
- Размеры и диапазон значений массива
- Специальные типы матриц
- Специальные характеристики матрицы
- Формирование новых матриц из существующих
- Собственные значения и собственные векторы
- Разложения
- Решение линейной системы уравнений
- Определение составного массива
- Отображение составных массивов
- Операторы и функции для составных массивов
- Определение и использование дискретного аргумента
- Многократные вычисления по дискретному аргументу
- Множественные дискретные аргументы и двойные индексы
- Рекурсивные вычисления с несколькими переменными
- Рекурсивные вычисления с вектором
- Советы по набору операторов
- Переменный верхний предел суммирования
- Оператор суммирования элементов вектора
- Производные более высокого порядка
- Переменные пределы интегрирования
- Изменение точности вычисления интегралов
- Криволинейные и двойные интегралы
- Определение пользовательского оператора
- Использование пользовательского оператора
- Запись функций как операторов
- Тригонометрические функции и обратные им.
- Гиперболические функции
- Логарифмические и показательные функции
- Функции Бесселя
- Специальные функции
- Введение в дискретное преобразование Фурье
- Функция if
- Циклы “while”
- Оператор “break”
- Циклы “for”
- Подпрограммы
- Рекурсия
- Что делать, когда функция root не сходится
- Некоторые советы по использованию функции root
- Решение уравнений с параметром
- Нахождение корней полинома
- Как использовать найденное решение
- Что делать, когда Mathcad не может найти решения
- Что делать, когда имеется слишком мало ограничений
- Многократное решение уравнений
- Решение одинаковых задач относительно разных переменных
- Приближенные решения
- Использование символьного решения уравнений
- Дифференциальные уравнения первого порядка
- Дифференциальные уравнения второго порядка
- Уравнения более высокого порядка
- Системы оду первого порядка
- Системы дифференциальных уравнений более высокого порядка
- Гладкие системы
- Медленно изменяющиеся решения
- Нахождение приближенного решения только в конечной точке
- Двухточечные краевые задачи
- Дифференциальные уравнения с частными производными