exponenta event banner

Преобразования Фурье

Преобразование Фурье - это математическая формула, которая связывает сигнал, дискретизированный во времени или пространстве, с тем же сигналом, дискретизированным по частоте. При обработке сигнала преобразование Фурье может выявить важные характеристики сигнала, а именно его частотные компоненты.

Преобразование Фурье определяется для вектора x с n равномерно дискретизированными точками

yk+1=∑j=0n-1ωjkxj+1.

λ = e-2serveri/n - один из n комплексных корней единицы, где i - мнимая единица. Для x и y индексы j и k находятся в диапазоне от 0 до n-1.

fft функция в MATLAB ® использует алгоритм быстрого преобразования Фурье для вычисления преобразования Фурье данных. Рассмотрим синусоидальный сигналx это функция времени t с частотными составляющими 15 Гц и 20 Гц. Используйте временной вектор, дискретизированный с шагом 150 секунд в течение периода в 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')

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

Вычислите преобразование Фурье сигнала и создайте вектор 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')

Figure contains an axes. The axes with title Magnitude contains an object of type line.

Преобразование также создает зеркальную копию пиков, которые соответствуют отрицательным частотам сигнала. Чтобы лучше визуализировать эту периодичность, можно использовать fftshift функция, которая выполняет циклический сдвиг с нулевым центром на преобразовании.

n = length(x);                         
fshift = (-n/2:n/2-1)*(fs/n);
yshift = fftshift(y);
plot(fshift,abs(yshift))
xlabel('Frequency (Hz)')
ylabel('Magnitude')

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

Шумные сигналы

В научных приложениях сигналы часто искажаются случайным шумом, маскируя их частотные составляющие. Преобразование Фурье может обрабатывать случайный шум и обнаруживать частоты. Например, создайте новый сигнал, 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')

Figure contains an axes. The axes with title Power contains an object of type line.

Вычислительная эффективность

Использование формулы преобразования Фурье непосредственно для вычисления каждого из n элементов y требует порядка n2 операций с плавающей запятой. Алгоритм быстрого преобразования Фурье требует для вычисления только порядка операций nlogn. Эта вычислительная эффективность является большим преимуществом при обработке данных, имеющих миллионы точек данных. Многие специализированные реализации алгоритма быстрого преобразования Фурье еще более эффективны, когда n является степенью 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)])

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

Укажите новую длину сигнала, которая будет следующей мощностью 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')

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

См. также

| | | | | |

Связанные темы