logo search
Лабы

Дискретное преобразование Фурье

Для выполнения дискретного преобразования Фурье функции нужно задать набор ее значений в равноотстоящих узлах. Этот набор задается в МС как вектор. Чтобы создать такой вектор, нужно выбрать отрезок, на котором производится разложение функции в ряд Фурье. Если функция периодическая, то длина отрезка берется равной периоду. В противном случае берется отрезок, на котором сосредоточены важные для пользователя значения функции. Если отрезок будет небольшим, то частоты гармоник будут разделены большими интервалами и дискретное преобразование Фурье будет плохо соответствовать непрерывному преобразованию.

После того как выбран отрезок, нужно выбрать число узлов на отрезке. Это число также должно быть большим, чтобы коэффициенты ряда Фурье были вычислены достаточно точно.

В качестве примера возьмем функцию

Отрезок возьмем [−10;], чтобы ненулевой график был в середине отрезка. Тогда. Так как формулы (9) применялись к отрезку [0; T], то нам придется функцию продолжить периодически на всю ось с периодомT и взять ее описание на этом промежутке. График функции приведен на рис. 47.

Всоответствии с графиком функцию на отрезке [0;T] можно записать в виде

При выборе числа узлов нужно учитывать следующий аспект. Система МС при выполнении дискретного преобразования Фурье использует так называемое быстрое преобразование Фурье. Это особый способ вычисления коэффициентов в формуле (9), требующий меньшего числа арифметических операций, чем непосредственный счет по формуле (9).

Наиболее экономичным счет получается, если число узлов N является степенью двойки: . Поэтому возьмем. Тогда расстояние между соседними узлами будет равно. Положим. Запишем в системе МС функцию. Заметим, что эта формула верна только на отрезке [0; T]. Установим нумерацию индексов с 0. Создадим вектор значений функции, для набора двоеточия потребуется нажать клавишу «;»:

Для выполнения быстрого преобразования Фурье в МС существуют четыре функции: fft, cfft, FFT, CFFT. Эти функции можно найти, щелкнув на панели инструментов на кнопке , в раскрывшемся окне слева нужно выбрать разделFourier Transform. Функции, написанные малыми буквами, отличаются на числовой множитель от функций, записанных большими буквами и сменой знака у индекса.Они соответствуют симметричной записи преобразования Фурье. Функции FFT, CFFT соответствуют формулам (9). Функция FFT применяется, если значения функции вещественны и . В противном случае применяется функцияCFFT. Если значения функции вещественны, то получается изкомплексным сопряжением:. Поэтому функцияFFT возвращает вектор половинной длины только для неотрицательных значенийq. Функция CFFT возвращает вектор такой же длины, как и ее аргумент. Итак, . Векторw имеет лишь компонент.

Посмотрим, как распределена амплитуда по частотам. Для этого построим график модуля компонент вектораw. Создадим список узлов и построим график, в качестве аргумента указавk, а в качестве функции . График приведен на рис. 48.

График может показаться странным. Это потому, что заметные амплитуды есть только при небольших значениях k и график слился с вертикальной осью. Уменьшим число узлов , рис. 49. Теперь на графике явно видно, что наибольшие амплитуды соответствуют значениям от 0 до 10, а дальше амплитуды быстро убывают.

Для выполнения обратного дискретного преобразования Фурье используются функции:ifft, icfft, IFFT, ICFFT. По обозначениям легко догадаться, какая из них обращает действия какой функции прямого преобразования. Значение функции прямого преобразования является аргументом функции обратного преобразования. Применим IFFT к вектору w: . Посмотрим, насколько различаются векторv исходных значений функции и вектор z значений, полученных после прямого и обратного преобразований Фурье: . Видим, что отличие очень мало, т.е. обратное преобразование достаточно точно восстанавливает исходную функцию.