তারা দৃ strongly়ভাবে সম্পর্কিত। আপনার উদাহরণটি পুনরায় উত্পাদনযোগ্য নয় কারণ আপনি আপনার ডেটা অন্তর্ভুক্ত করেননি, সুতরাং আমি একটি নতুন তৈরি করব। প্রথমত, আসুন একটি পর্যায়ক্রমিক ফাংশন তৈরি করুন:
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)
এখন, রিগ্রেশন এর জন্য একটি ফুরিয়ার ভিত্তি তৈরি করা যাক। নোট করুন যে, দিয়ে ভিত্তিক ফাংশন, যেমন, অ ধ্রুবক সাইন এবং কোসাইনগুলি তৈরি করার পক্ষে এটি সত্যিকার অর্থে বোধগম্য নয় কারণ উচ্চতর ফ্রিকোয়েন্সি উপাদানগুলি যেমন গ্রিড উপর aliised হয়। উদাহরণস্বরূপ, ফ্রিকোয়েন্সি সাইন একটি costant (সাইন) থেকে হয় আলাদা করে চেনা: ক্ষেত্রে বিবেচনা , অর্থাৎ । যাই হোক, আপনি যদি ডবল চেক করতে চান, শুধু পরিবর্তন করতে গত দুই কলাম এ নিচের স্নিপেট এবং চেহারা দেখুন: আপনি যে তারা আসলে অনর্থক আছেন কিনা তা দেখতে হবে (এবং তারা হইয়া জন্য সমস্যা তৈরি করতে, কারণ নকশা ম্যাট্রিক্স এখন একবচন হল )।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 হয় না, এটি সাধারণ ফুরিয়ার ভিত্তিতে যেমন হয় । এটি হয় না, যেমন এটি অর্থনোমাল ফিউরিয়ার ভিত্তিতে হত, rac ।1,sinωx,cosωx,…1π√12π√,sinωxπ√,cosωxπ√,…
# FDA basis has a weird scaling
max(abs(basisMat))
plot(mybasis)
আপনি পরিষ্কারভাবে দেখতে পাবেন যে:
- সর্বাধিক মান than এর চেয়ে কম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
একটি পর্যায়ক্রমিক ক্রম, শেষ পয়েন্টটি আসলে কোনও তথ্য যুক্ত করে না (একটি ক্রমের DFT সর্বদা পর্যায়ক্রমিক)। সুতরাং আমরা এফএফটি কম্পিউটিংয়ের সময় শেষ পয়েন্টটি বাতিল করতে পারি। এছাড়াও, এফএফটি হ'ল ডিএফটি গণনা করার জন্য একটি দ্রুত সংখ্যাসূচক অ্যালগরিদম এবং বাস্তব বা জটিল সংখ্যার ক্রমের ডিএফটি জটিল । সুতরাং, আমরা সত্যিই এফএফটি সহগের মডুলাসগুলি চাই:
# FFT
fft_coef <- Mod(fft(Yper[1:(N-1)]))*2/(N-1)
সংখ্যাবৃদ্ধি দ্বারা আমরা অর্ডার ফুরিয়ার ভিত্তিতে সঙ্গে হিসাবে একই স্কেলিং আছে মধ্যে । যদি আমরা স্কেল না করি তবে আমরা এখনও সঠিক ফ্রিকোয়েন্সিগুলি পুনরুদ্ধার করতে পারব, তবে এর আগে যা আমরা পেয়েছি তার প্রতি শ্রদ্ধাগুলি একই ফ্যাক্টর দ্বারা স্কেল করা হবে। আসুন এখন fft সহগগুলি প্লট করুন: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−−−−−−√