Я пытаюсь выяснить пиковые частоты, скрытые в моих данных, используя метод fft () в R. При подготовке данных более опытный пользователь рекомендует создать «маску» (подробнее после объяснения деталей),это дает мне точную диаграмму, которую я ищу.Проблема в том, что я не понимаю, что он делает или зачем он нужен.
Чтобы дать некоторый контекст, я работаю с файлами .txt, каждый из которых содержит около 12000 записей.Это информация о напряжении и времени, и ожидаемый результат - просто синусоидальная волна с четкой пиковой частотой, которая должна быть близка к 1-2 Гц.Вот пример того, как выглядит один из этих файлов:
Я пытался использовать метод быстрого преобразования Фурье fft (), реализованный в R, чтобы найти пикчастот и получить диаграмму, которая четко их отражала.Сначала я вычисляю некоторые вещи, которые, как я понимаю, будут полезны, такие как частота Найквиста и диапазон частот, которые я покажу на последнем графике:
n = length(variable)
dt = time[5]-time[4]
df = 1/(max(time)) #Find out the "unit" frequency
fnyquist = 1/(2*dt) #The Nyquist frequency
f = seq(-fnyquist, fnyquist-df, by=df) #These are the frequencies I'll plot
Но когда я нанесу абсолютное значениеиз того, что FFT (данные) вычисляет в зависимости от диапазона частот, я получаю это:
Пиковая частота, кажется, близка к 50 Гц, но я знаю, что это недело.Это должно быть близко к 1 Гц.Я полный новичок в R и в анализе Фурье, поэтому после небольшого исследования я обнаружил на швейцарской странице , что это можно решить, создав «маску», которая на самом деле является просто вектором сповторяющийся образец (1, -1, 1, -1 ...) той же длины, что и сам мой вектор данных:
mask=rep(c(1, -1),length.out=n)
Затем, если я умножу свой вектор данных на эту маску и нанесу результаты:
results = mask*data
plot(f,abs(fft(results)),type="h")
Я получаю то, что искал.(Это график после ограничения оси X разумным масштабом).
Итак, что же на самом деле делает маска?Я понимаю, что это изменяет мои знаки точек данных альтернативным способом, но я не понимаю, почему бы это взяло пиковые частоты выведенного сигнала от ~ 50 Гц до правильного результата ~ 1 Гц.
Заранее спасибо!