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

Дискретное преобразование Фурье или ДПФ, является первичным инструментом цифровой обработки сигналов. Основа продукта является быстрым преобразованием Фурье (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 перемещает нулевую частотную составляющую в центр вектора или матрицы.

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

| | | | |