Transformata Fouriera
Marcin Orchel
1 Zadania
1.1 Zadania na 3.0
Napisać skrypt w R. W skrypcie
• Dla sumy funkcji trygonometrycznych wykonać analizę częstotliwościową.
• Dodać szum do danych i powtórzyć eksperyment.
• Dokonać analizy częstotliwościowej na wybranym rzeczywistym szeregu czasowym z sezonowością.
• przetestować fft i operację odwrotną
• narysować wykres częstotliwości i amplitudy
• przetestować różne wartości fazy za pomocą atan2
• dokonać transformacji dwuwymiarowej i trójwymiarowej
• obliczyć współczynnik Fouriera wybranej funkcji
• Dodać komentarz do skryptu opisujący krótko na czym polegają użyte metody oraz wnioski z badań.
Wskazówki:
• http://www.wolframalpha.com/input/?i=sin+(x),+x+over+(0,1)
• jak wyplotować fazęhttps://www.gaussianwaves.com/2015/11/interpreting- fft-results-obtaining-magnitude-and-phase-information/
Wskazówki do R:
• https://stat.ethz.ch/R-manual/R-devel/library/stats/html/fft.html
• https://stat.ethz.ch/R-manual/R-devel/library/stats/html/filter.html
• https://www.rdocumentation.org/packages/dtt/topics/dst
1
• https://www.rdocumentation.org/packages/fftwtools/topics/fftw
• alternatywnie do fft można użyć polecenia https://stat.ethz.ch/R-manual/R- devel/library/stats/html/spectrum.html
• atan2,https://stat.ethz.ch/R-manual/R-devel/library/base/html/Trig.html
• Re, Im, Mod, https://stat.ethz.ch/R-manual/R-devel/library/base/html/
complex.html
• http://www.di.fc.ul.pt/~jpn/r/fourier/fourier.html Wskazówki do Matlaba:
• można dokonać analizy za pomocą sptool
• http://www.mathworks.com/help/matlab/ref/fft.html Przykłady w R
• plot.frequency.spectrum <- function(X.k, xlimits=c(0,length(X.k))) {
plot.data <- cbind(0:(length(X.k)-1), Mod(X.k)/length(X.k)) plot.data[2:length(X.k),2] <- 2*plot.data[2:length(X.k),2]
plot(plot.data, t="h", lwd=2, main="",
xlab="Frequency (Hz)", ylab="Strength",
xlim=xlimits, ylim=c(0,max(Mod(plot.data[,2])))) }
acq.freq <- 100 time <- 6
ts <- seq(0,time-1/acq.freq,1/acq.freq) f.0 <- 1/time
dc.component <- 1
component.freqs <- c(3,7,10) component.delay <- c(0,0,0)
component.strength <- c(1.5,.5,.75) f <- function(t,w) { dc.component +
sum( component.strength * sin(component.freqs*w*t + component.delay)) }
w <- 2*pi*f.0
trajectory <- sapply(ts, function(t) f(t,w)) head(trajectory,n=30)
X.k <- fft(trajectory)
plot.frequency.spectrum(X.k, xlimits=c(0,20))
• wyplotowanie przesunięcia
2
X2<-X.k
X2[abs(X.k) < 0.01] <- 0 phase=atan2(Im(X2),Re(X2)) plot(phase)
1.2 Zadania na 4.0
• Dokonać porównania dwóch sygnałów w Matlabie.
Wskazówki:
• http://www.mathworks.com/help/signal/examples/measuring-signal-similarities.
html?prodcode=SG&language=en
1.3 Zadania na 5.0
• Dokonać analizy częstotliwościowej wybranego sygnału rzeczywistego w Matlabie.
3