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

Дискретное преобразование Фурье, или ДПФ, является основным инструментом цифровой обработки сигналов. Основой продукта является быстрое преобразование Фурье (FFT), метод вычисления ДПФ с уменьшенным временем выполнения. Многие функции тулбокса (включая частотную характеристику Z-области, спектра и cepstrum анализ, а также некоторые создания фильтра и функции реализации) включают в себя БПФ.

Окружение MATLAB ® обеспечивает функции fft и ifft вычислить дискретное преобразование Фурье и его обратное, соответственно. Для последовательности входа x и ее преобразованной версии X (преобразование Фурье в дискретном времени на одинаково разнесенных частотах вокруг модуля круга) две функции реализуют отношения

X(k+1)=n=0N-1x(n+1)WNkn

и

x(n+1)=1Nk=0N-1X(k+1)WN-kn.

В этих уравнениях последовательные индексы начинаются с 1 вместо 0 из-за схемы индексации векторов MATLAB, и

WN=e-j2π/N.

Примечание  . Соглашением 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];

Figure contains 2 axes. Axes 1 with title Magnitude contains an object of type line. Axes 2 with title Phase contains an object of type line.

Второй аргумент для 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];

Figure contains 2 axes. Axes 1 with title Magnitude contains an object of type line. Axes 2 with title Phase contains an object of type line.

В этом случае 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)

Figure contains an axes. The axes contains an object of type line.

Этот тулбокс также включает функции для двумерного БПФ и его обратной, fft2 и ifft2. Эти функции полезны для двумерной обработки сигнала или изображения. Функция goertzel, которая является другим алгоритмом для вычисления ДПФ, также включена в тулбокс. Эта функция эффективна для вычисления ДПФ фрагмента длинного сигнала.

Иногда удобно переставлять выход fft или fft2 Поэтому ноль частотной составляющей находится в центре последовательности. Функция fftshift перемещает нулевую частотную составляющую к центру вектора или матрицы.

См. также

| | | | |