मैं रेफ्रिजरेटर से तापमान डेटा एकत्र कर रहा हूं। डेटा एक लहर की तरह दिखता है। मैं लहर की अवधि और आवृत्ति को निर्धारित करना चाहूंगा (ताकि मैं माप सकता हूं कि क्या रेफ्रिजरेटर में कोई प्रभाव पड़ता है)।
मैं आर का उपयोग कर रहा हूं, और मुझे लगता है कि मुझे डेटा पर एफएफटी का उपयोग करने की आवश्यकता है, लेकिन मुझे यकीन नहीं है कि वहां से कहां जाना है। मैं आर और सिग्नल विश्लेषण के लिए बहुत नया हूं, इसलिए किसी भी मदद की बहुत सराहना की जाएगी!
यहां वह लहर है जिसका मैं निर्माण कर रहा हूं:
यहाँ मेरा आर कोड अब तक है:
require(graphics)
library(DBI)
library(RSQLite)
drv <- dbDriver("SQLite")
conn <- dbConnect(drv, dbname = "s.sqlite3")
query <- function(con, query) {
rs <- dbSendQuery(con, query)
data <- fetch(rs, n = -1)
dbClearResult(rs)
data
}
box <- query(conn, "
SELECT id,
humidity / 10.0 as humidity,
temp / 10.0 as temp,
ambient_temp / 10.0 as ambient_temp,
ambient_humidity / 10.0 as ambient_humidity,
created_at
FROM measurements ORDER BY id DESC LIMIT 3600
")
box$x <- as.POSIXct(box$created_at, tz = "UTC")
box$x_n <- box$temp - mean(box$temp)
png(filename = "normalized.png", height = 750, width = 1000, bg = "white")
plot(box$x, box$x_n, type="l")
# Pad the de-meaned signal so the length is 10 * 3600
N_fft <- 3600 * 10
padded <- c(box$x_n, seq(0, 0, length= (N_fft - length(box$x_n))))
X_f <- fft(padded)
PSD <- 10 * log10(abs(X_f) ** 2)
png(filename = "PSD.png", height = 750, width = 1000, bg = "white")
plot(PSD, type="line")
zoom <- PSD[1:300]
png(filename = "zoom.png", height = 750, width = 1000, bg = "white")
plot(zoom, type="l")
# Find the index with the highest point on the left half
index <- which(PSD == max(PSD[1:length(PSD) / 2]))
# Mark it in green on the zoomed in graph
abline(v = index, col="green")
f_s <- 0.5 # sample rate in Hz
wave_hz <- index * (f_s / N_fft)
print(1 / (wave_hz * 60))
मैंने यहाँ SQLite डेटाबेस के साथ R कोड पोस्ट किया है ।
यहाँ सामान्यीकृत ग्राफ का एक प्लॉट है (निकाले गए माध्य के साथ):
अब तक सब ठीक है। यहाँ वर्णक्रमीय घनत्व प्लॉट है:
फिर हम प्लॉट के बाईं ओर ज़ूम करते हैं और हरे रंग की रेखा के साथ उच्चतम सूचकांक (जो कि 70 है) को चिह्नित करते हैं:
अंत में हम तरंग की आवृत्ति की गणना करते हैं। यह लहर बहुत धीमी है, इसलिए हम इसे प्रति मिनट मिनट में बदल देते हैं, और उस मूल्य को प्रिंट करते हैं जो 17.14286 है।
यदि कोई और प्रयास करना चाहता है तो यहां मेरा डेटा टैब सीमांकित प्रारूप में है ।
सहायता के लिए धन्यवाद! यह समस्या कठिन थी (मेरे लिए) लेकिन मेरे पास एक महान समय था!