Дискретное преобразование Фурье или ДПФ, является первичным инструментом цифровой обработки сигналов. Основа продукта является быстрым преобразованием Фурье (FFT), методом для вычисления ДПФ с уменьшаемым временем выполнения. Многие функции тулбокса (включая частотную характеристику Z-области, спектр и анализ кепстра и некоторые функции создания фильтра и реализации) включают БПФ.
Среда MATLAB® предоставляет функциям fft
и ifft
вычислить дискретное преобразование Фурье и его инверсию, соответственно. Для входной последовательности x и ее преобразованной версии X (преобразование Фурье дискретного времени на равномерно распределенных частотах вокруг модульного круга), две функции реализуют отношения
и
В этих уравнениях серийные индексы начинаются 1 вместо 0 из-за вектора MATLAB индексация схемы, и
Обратите внимание , что соглашение MATLAB состоит в том, чтобы использовать отрицательный j для fft
функция. Это - техническое соглашение; физика и чистая математика обычно используют положительный j.
fft
, с одним входным параметром, x
, вычисляет ДПФ входного вектора или матрицы. Если x
вектор, fft
вычисляет ДПФ вектора; если x
прямоугольный массив, fft
вычисляет ДПФ каждого столбца массивов.
Например, создайте временной вектор и сигнал:
t = 0:1/100:10-1/100; % Time vector x = sin(2*pi*15*t) + sin(2*pi*40*t); % Signal
Вычислите ДПФ сигнала и величины и фазы преобразованной последовательности. Уменьшите ошибку округления, когда вычисление фазы путем обнуления маленькой величины преобразовывает значения.
y = fft(x); % Compute DFT of x m = abs(y); % Magnitude y(m<1e-6) = 0; p = unwrap(angle(y)); % Phase
Чтобы построить величину и фазу в градусах, введите следующие команды:
f = (0:length(y)-1)*100/length(y); % Frequency vector subplot(2,1,1) plot(f,m) title('Magnitude') ax = gca; ax.XTick = [15 40 60 85]; subplot(2,1,2) plot(f,p*180/pi) title('Phase') ax = gca; ax.XTick = [15 40 60 85];
Второй аргумент к fft
задает ряд вопросов n
для преобразования, представляя длину ДПФ:
n = 512; y = fft(x,n); m = abs(y); p = unwrap(angle(y)); f = (0:length(y)-1)*100/length(y); subplot(2,1,1) plot(f,m) title('Magnitude') ax = gca; ax.XTick = [15 40 60 85]; subplot(2,1,2) plot(f,p*180/pi) title('Phase') ax = gca; ax.XTick = [15 40 60 85];
В этом случае, fft
заполняет входную последовательность нулями, если это короче, чем n
, или обрезает последовательность, если это более длинно, чем n
. Если n
не задан, это принимает значение по умолчанию к длине входной последовательности. Время выполнения для fft
зависит от длины, n
, из ДПФ это выполняет; смотрите fft
страница с описанием для получения дополнительной информации об алгоритме.
Обратите внимание , что получившейся амплитудой БПФ является A*n/2
, где A
исходная амплитуда и n
количество точек БПФ. Это верно, только если количество точек БПФ больше или равно количеству выборок данных. Если количество точек БПФ меньше, амплитуда БПФ ниже, чем исходная амплитуда вышеупомянутой суммой.
Обратное дискретное преобразование Фурье функционирует ifft
также принимает входную последовательность и, опционально, количество желаемых точек для преобразования. Попробуйте пример ниже; исходная последовательность x
и восстановленная последовательность идентична (в погрешности округления).
t = 0:1/255:1; x = sin(2*pi*120*t); y = real(ifft(fft(x))); figure plot(t,x-y)
Этот тулбокс также включает функции для двумерного БПФ и его инверсии, fft2
и ifft2
. Эти функции полезны для двумерной обработки сигналов или обработки изображений. Функция goertzel, которая является другим алгоритмом, чтобы вычислить ДПФ, также включена в тулбокс. Эта функция эффективна для вычисления ДПФ фрагмента длинного сигнала.
Иногда удобно перестроить выход fft
или fft2
функционируйте, таким образом, нулевая частотная составляющая находится в центре последовательности. Функциональный fftshift
перемещает нулевую частотную составляющую в центр вектора или матрицы.