वे दृढ़ता से संबंधित हैं। आपका उदाहरण प्रतिलिपि प्रस्तुत करने योग्य नहीं है क्योंकि आपने अपना डेटा शामिल नहीं किया था, इस प्रकार मैं एक नया बनाऊंगा। सबसे पहले, चलो एक आवधिक कार्य बनाएँ:
T <- 10
omega <- 2*pi/T
N <- 21
x <- seq(0, T, len = N)
sum_sines_cosines <- function(x, omega){
sin(omega*x)+2*cos(2*omega*x)+3*sin(4*omega*x)+4*cos(4*omega*x)
}
Yper <- sum_sines_cosines(x, omega)
Yper[N]-Yper[1] # numerically 0
x2 <- seq(0, T, len = 1000)
Yper2 <- sum_sines_cosines(x2, omega)
plot(x2, Yper2, col = "red", type = "l", xlab = "x", ylab = "Y")
points(x, Yper)
अब, चलो प्रतिगमन के लिए एक फूरियर का आधार बनाते हैं। ध्यान दें कि, , वास्तव में आधार फ़ंक्शंस से अधिक बनाने का कोई मतलब नहीं है , अर्थात, गैर-स्थिर साइन और कोज़ाइन, क्योंकि उच्च आवृत्ति घटक इस तरह के एक ग्रिड पर उतारा जाता है। उदाहरण के लिए, आवृत्ति ome का एक साइन एक कॉस्टेंट (साइन) से अप्रभेद्य है: , अर्थात, के मामले पर विचार करें । वैसे भी, अगर तुम दोहरी जांच करना चाहते हैं, बस बदलने के लिए अंतिम दो कॉलम में नीचे टुकड़ा और देखो में: यदि आप कि वे वास्तव में बेकार कर रहे हैं देखेंगे (और वे फिट करने के लिए मुद्दों बनाने के लिए, क्योंकि डिजाइन मैट्रिक्स अब विलक्षण है )।N=2k+1N−2N−3=2(k−1)kωN=3k=1N-2
N
# Fourier Regression with fda
library(fda)
mybasis <- create.fourier.basis(c(0,T),N-2)
basisMat <- eval.basis(x, mybasis)
FDA_regression <- lm(Yper ~ basisMat-1)
FDA_coef <-coef(FDA_regression)
barplot(FDA_coef)
ध्यान दें कि आवृत्तियाँ बिल्कुल सही हैं, लेकिन गैर-अक्षीय घटकों के आयाम (1,2,3,4) नहीं हैं। इसका कारण यह है कि fda
फूरियर के आधार कार्यों को एक अजीब तरीके से बढ़ाया जाता है: उनका अधिकतम मूल्य 1 नहीं है, क्योंकि यह सामान्य फूरियर के आधार पर होगा । यह या तो नहीं है, क्योंकि यह ऑर्थोनॉमिक फ़ॉरियर आधार के लिए होता है, ।1,sinωx,cosωx,…1π√12π√,sinωxπ√,cosωxπ√,…
# FDA basis has a weird scaling
max(abs(basisMat))
plot(mybasis)
आप स्पष्ट रूप से देखते हैं कि:
- अधिकतम मान1π√
- फूरियर बेस (पहली शर्तों के लिए छोटा ) में एक निरंतर कार्य (काली रेखा) होती है, बढ़ती आवृत्ति की सीन्स (घटता जो डोमेन सीमाओं पर 0 के बराबर होती है) और बढ़ती आवृत्ति की कोज्या (घटता जो होती हैं) डोमेन सीमाओं पर 1 के बराबर), जैसा कि यह होना चाहिएN−2
बस द्वारा दिए गए फूरियर बेस को स्केल करना fda
, ताकि सामान्य फ़ॉयर आधार प्राप्त हो, प्रतिगमन गुणांक की उम्मीद मूल्यों की ओर जाता है:
basisMat <- basisMat/max(abs(basisMat))
FDA_regression <- lm(Yper ~ basisMat-1)
FDA_coef <-coef(FDA_regression)
barplot(FDA_coef, names.arg = colnames(basisMat), main = "rescaled FDA coefficients")
आइए fft
अब कोशिश करें : ध्यान दें कि चूंकि Yper
एक आवधिक अनुक्रम है, अंतिम बिंदु वास्तव में कोई जानकारी नहीं जोड़ता है (अनुक्रम का डीएफटी हमेशा आवधिक होता है)। इस प्रकार हम FFT की गणना करते समय अंतिम बिंदु को छोड़ सकते हैं। इसके अलावा, एफएफटी डीएफटी की गणना करने के लिए सिर्फ एक तेज संख्यात्मक एल्गोरिथ्म है, और वास्तविक या जटिल संख्याओं के अनुक्रम का डीएफटी जटिल है । इस प्रकार, हम वास्तव में एफएफटी गुणांक के मोडुलस चाहते हैं:
# FFT
fft_coef <- Mod(fft(Yper[1:(N-1)]))*2/(N-1)
हम Fourier आधार के समान स्केलिंग करने के लिए से । यदि हम पैमाने पर नहीं थे, तो हम अभी भी सही आवृत्तियों को पुनर्प्राप्त करेंगे, लेकिन एम्पलीट्यूड को उसी कारक से बढ़ाया जाएगा, जो हमें पहले मिला था। आइए अब फफूंद गुणांकों की साजिश करें:2N−11,sinωx,cosωx,…
fft_coef <- fft_coef[1:((N-1)/2)]
terms <- paste0("exp",seq(0,(N-1)/2-1))
barplot(fft_coef, names.arg = terms, main = "FFT coefficients")
ठीक है: आवृत्तियाँ सही हैं, लेकिन ध्यान दें कि अब आधार फ़ंक्शंस साइन नहीं हैं और कॉशन किसी भी अधिक (वे जटिल एक्सपोनेंशियल , जहां साथ काल्पनिक इकाई को निरूपित करता हूं)। यह भी ध्यान दें कि पहले की तरह नॉनजो फ्रीक्वेंसी (1,2,3,4) के सेट के बजाय, हमें एक सेट (1,2,5) मिला। कारण यह है कि एक शब्द इस जटिल गुणांक विस्तार में (इस प्रकार दो वास्तविक रूप से मेल खाती है जटिल है) में त्रिकोणमितीय आधार विस्तार, यूलर फॉर्मूले के कारण । जटिल गुणांक का मापांक दो वास्तविक गुणांकों के चतुर्थांश के योग के बराबर है, अर्थात,expniωxixnexpniωxxnansin(nωx)+bncos(nωx)expix=cosx+isinx 5=√|xn|=a2n+b2n−−−−−−√ । तथ्य की बात के रूप में, ।5=33+42−−−−−−√