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

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

Среда 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];

Второй аргумент к 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 перемещает нулевую частотную составляющую в центр вектора или матрицы.

Смотрите также

| | | | |