Преобразование Фурье - это математическая формула, которая связывает сигнал, дискретизированный во времени или пространстве, с тем же сигналом, дискретизированным по частоте. При обработке сигнала преобразование Фурье может выявить важные характеристики сигнала, а именно его частотные компоненты.
Преобразование Фурье определяется для вектора с равномерно дискретизированными точками
e-2serveri/n - один n комплексных корней единицы, i - мнимая единица. x y j k находятся в диапазоне 0 n-1.
fft функция в MATLAB ® использует алгоритм быстрого преобразования Фурье для вычисления преобразования Фурье данных. Рассмотрим синусоидальный сигналx это функция времени t с частотными составляющими 15 Гц и 20 Гц. Используйте временной вектор, дискретизированный с шагом секунд в течение периода в 10 секунд.
Ts = 1/50; t = 0:Ts:10-Ts; x = sin(2*pi*15*t) + sin(2*pi*20*t); plot(t,x) xlabel('Time (seconds)') ylabel('Amplitude')

Вычислите преобразование Фурье сигнала и создайте вектор f что соответствует выборке сигнала в частотном пространстве.
y = fft(x); fs = 1/Ts; f = (0:length(y)-1)*fs/length(y);
При построении графика величины сигнала как функции частоты пики по величине соответствуют частотным компонентам сигнала 15 Гц и 20 Гц.
plot(f,abs(y)) xlabel('Frequency (Hz)') ylabel('Magnitude') title('Magnitude')

Преобразование также создает зеркальную копию пиков, которые соответствуют отрицательным частотам сигнала. Чтобы лучше визуализировать эту периодичность, можно использовать fftshift функция, которая выполняет циклический сдвиг с нулевым центром на преобразовании.
n = length(x); fshift = (-n/2:n/2-1)*(fs/n); yshift = fftshift(y); plot(fshift,abs(yshift)) xlabel('Frequency (Hz)') ylabel('Magnitude')

В научных приложениях сигналы часто искажаются случайным шумом, маскируя их частотные составляющие. Преобразование Фурье может обрабатывать случайный шум и обнаруживать частоты. Например, создайте новый сигнал, xnoise, путем введения гауссова шума в исходный сигнал, x.
rng('default')
xnoise = x + 2.5*randn(size(t));Мощность сигнала как функция частоты является общей метрикой, используемой при обработке сигнала. Мощность - это величина в квадрате преобразования Фурье сигнала, нормированная на число выборок частоты. Вычислите и постройте график спектра мощности шумного сигнала, центрированного на нулевой частоте. Несмотря на шум, вы все еще можете разглядеть частоты сигнала из-за скачков мощности.
ynoise = fft(xnoise); ynoiseshift = fftshift(ynoise); power = abs(ynoiseshift).^2/n; plot(fshift,power) title('Power') xlabel('Frequency (Hz)') ylabel('Power')

Использование формулы преобразования Фурье непосредственно для вычисления каждого из элементов требует порядка операций с плавающей запятой. Алгоритм быстрого преобразования Фурье требует для вычисления только порядка операций nlogn. Эта вычислительная эффективность является большим преимуществом при обработке данных, имеющих миллионы точек данных. Многие специализированные реализации алгоритма быстрого преобразования Фурье еще более эффективны, когда является степенью 2.
Рассмотрим аудиоданные, собранные с подводных микрофонов у побережья Калифорнии. Эти данные можно найти в библиотеке, поддерживаемой Программой исследований биоакустики Корнеллского университета. Загрузка и форматирование подмножества данных в bluewhale.au, которая содержит тихоокеанскую вокализацию синего кита. Поскольку синие китовые звонки - низкочастотные звуки, они едва слышны для людей. Шкала времени в данных сжимается в 10 раз для повышения основного тона и обеспечения более четкого слышимости вызова. Можно использовать команду sound(x,fs) для прослушивания всего аудиофайла.
whaleFile = 'bluewhale.au'; [x,fs] = audioread(whaleFile); whaleMoan = x(2.45e4:3.10e4); t = 10*(0:1/fs:(length(whaleMoan)-1)/fs); plot(t,whaleMoan) xlabel('Time (seconds)') ylabel('Amplitude') xlim([0 t(end)])

Укажите новую длину сигнала, которая будет следующей мощностью 2, превышающей исходную длину. Затем используйте fft для вычисления преобразования Фурье с использованием новой длины сигнала. fft автоматически помещает данные с нулями для увеличения размера выборки. Это заполнение может значительно ускорить вычисление преобразования, особенно для размеров выборки с большими простыми коэффициентами.
m = length(whaleMoan); n = pow2(nextpow2(m)); y = fft(whaleMoan,n);
Постройте график спектра мощности сигнала. Сюжет указывает на то, что стон состоит из фундаментальной частоты около 17 Гц и последовательности гармоник, где подчёркивается вторая гармоника.
f = (0:n-1)*(fs/n)/10; % frequency vector power = abs(y).^2/n; % power spectrum plot(f(1:floor(n/2)),power(1:floor(n/2))) xlabel('Frequency (Hz)') ylabel('Power')

fft | fft2 | fftn | fftshift | fftw | ifft | nextpow2