exponenta event banner

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

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

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

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

и

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

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

WN = e-j2δ/N.

Примечание  . Соглашение MATLAB предусматривает использование отрицательного j для fft функция. Это инженерная конвенция; физика и чистая математика обычно используют положительный j.

fft, с одним входным аргументом, xвычисляет DFT входного вектора или матрицы. Если x является вектором, fft вычисляет DFT вектора; если x представляет собой прямоугольный массив, fft вычисляет DFT каждого столбца массива.

Например, создайте вектор времени и сигнал:

t = 0:1/100:10-1/100;                     % Time vector
x = sin(2*pi*15*t) + sin(2*pi*40*t);      % Signal

Вычислите DFT сигнала и величину и фазу преобразованной последовательности. Уменьшите ошибку округления при вычислении фазы, установив нулевые значения преобразования малой величины.

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 для преобразования, представляющего длину DFT:

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 зависит от длины, nDFT, который он выполняет; см. 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, которая является другим алгоритмом для вычисления DFT, также включена в набор инструментов. Эта функция эффективна для вычисления ДПФ части длинного сигнала.

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

См. также

| | | | |