Я пытался получить частоту и амплитуду всех значений сигнала, применяя функцию stats.:fft (). Мой реальный сигнал показан на следующем рисунке:
Сигнал измеряется каждый час.
Это код, используемый для создания индекса сигнала, Я не уверен, почему мне всегда нужно выполнять интеграцию от 0 до 1, но я читал, что это работает, поэтому я использую его здесь.
samp_freq <- 168
time_interval <- 1/samp_freq
signal_index <- seq(0, 1, by=time_interval)
plot(x = signal_index,y = dt$train.sensores_sum_entrada[1:169], type = "l")
После применения преобразования функции и оценки константы для каждой частотной составляющей при построении результатов я получаю примерно следующее:
Код для генерации этого результата выглядит следующим образом:
f_component <- stats::fft(z = dt$train.sensores_sum_entrada[1:169])
f_coef <- abs(f_component)
plot(f_coef)
main_coef <- (abs(stats::fft(dt$train.sensores_sum_entrada))/(6966/2))[1:500]
normal_f_compon <- f_coef/ (168/2)
main_coef <- normal_f_compon[1:(168/2)]
coef_table <- data.table(frequency = 1:length(main_coef),amplitude = main_coef)
model_evaluated <- lapply(X = 1:length(coef_table$frequency),FUN = function(i) coef_table$amplitude[i]*sin(2*pi*coef_table$frequency[i]*signal_index))
plot(Reduce(f = `+`,model_evaluated),type = "l")
I был бы признателен, если бы кто-нибудь знал, как я могу это исправить.
Спасибо.