library(signal) library(ggplot2) source("defines.R") source("frequency_response_functions.R") # Moving Average windowSize = 11 # usually odd for non-causal filters b <- numeric(windowSize) + 1/windowSize # freqz(b, region = 'whole') ws <- seq(-pi, pi, by=0.01) HEXP <- frequencyResponseExp(b,ws) HCS <- frequencyResponseCosSin(b,ws) HCIO <- cosInOut(b, ws = ws) HFFT <- frequencyResponseFFT_FIR(b, ws = ws) HFFT_IIR <- frequencyResponseFFT_IIR(b, 1, ws = ws) ggplot() + geom_line(aes(x=ws, y=HEXP, color="|H(w)|"), size = 6) + geom_line(aes(x=ws, y=HCIO, color="Amp(y(t))/Amp(x(t))"), size = 4) + geom_line(aes(x=ws, y=HCS, color="cos-sin-formula"), size = 3) + geom_line(aes(x=ws, y=HFFT_IIR, color="FFT"), size = 1) + scale_colour_manual(values = c("|H(w)|" = "blue", "Amp(y(t))/Amp(x(t))" = "red", "cos-sin-formula" = "black", "FFT"="yellow")) + labs(title = "Frequency Response", x = "Frequency (rad/s)", y = "Amplitude", color="Frequency Response") + plot_style + scale_x_continuous(breaks = seq(-pi, pi, by = pi/2), labels = c(expression(-pi), expression(frac(pi,2)), "0", expression(frac(pi,2)), expression(pi))) # This shows the problem within Amp(y(t))/Amp(x(t)) at the borders of the signal for nearly complete filtered frequencies samplerate = 0.01 b <- numeric(windowSize/samplerate) + 1/(windowSize/samplerate) w <- pi/2 + 0.15 t <- seq(0, 10*pi, by=0.01) x <- cos(w*t) y <- filter(b,1,x) y2 <- filterWMA(x, b) ggplot() + geom_line((aes(x=t, y=x, color="in")), size = 1) + geom_line((aes(x=t, y=y, color="out")), size = 1) + geom_line((aes(x=t, y=y2, color="out2")), size = 1) + scale_colour_manual("Signal", values = c("in" = "blue", "out" = "red", "out2"="black")) + scale_x_continuous(breaks = seq(min(t), max(t), by = windowSize)) + theme(panel.grid.major = element_line(colour="darkgrey", size=0.5), panel.grid.minor = element_line(colour="darkgrey", size=0.5)) # Butterworth- and Chebychef-Filter wsplus <- seq(0.01, pi, by=0.005) bf55 <- butter(5, c(0, 0.5)) HCIO_BW55 <- cosInOut(bf55[[1]], bf55[[2]], wsplus) HFFT_BW55 <- frequencyResponseFFT_IIR(bf55[[1]], bf55[[2]], wsplus) bf33 <- butter(3, c(0, 0.3)) HCIO_BW33 <- cosInOut(bf33[[1]], bf33[[2]], wsplus) HFFT_BW33 <- frequencyResponseFFT_IIR(bf33[[1]], bf33[[2]], wsplus) cheb435 <- cheby1(4, 3, c(0, 0.5)) HCIO_CH435 <- cosInOut(cheb435[[1]], cheb435[[2]], wsplus) HFFT_CH435 <- frequencyResponseFFT_IIR(cheb435[[1]], cheb435[[2]], wsplus) ggplot() + geom_line(aes(x=wsplus, y=HCIO_BW55, color="Butterworth (5, 0.5)"), size = 3) + geom_line(aes(x=wsplus, y=HFFT_BW55, color="FFT Butterworth (5, 0.5)"), size = 1) + geom_line(aes(x=wsplus, y=HCIO_BW33, color="Butterworth (3, 0.3)"), size = 3) + geom_line(aes(x=wsplus, y=HFFT_BW33, color="FFT Butterworth (3, 0.3)"), size = 1) + geom_line(aes(x=wsplus, y=HCIO_CH435, color="Chebyshev1 (4, 3, 0.5)"), size = 3) + geom_line(aes(x=wsplus, y=HFFT_CH435, color="FFT Chebyshev1 (4, 3, 0.5)"), size = 1) + scale_colour_manual(values = c("Butterworth (5, 0.5)" = "black", "FFT Butterworth (5, 0.5)"="yellow", "Butterworth (3, 0.3)"="blue", "FFT Butterworth (3, 0.3)"="cyan", "Chebyshev1 (4, 3, 0.5)"="red", "FFT Chebyshev1 (4, 3, 0.5)"="orange")) + labs(title = "Frequency Response", x = "Frequency (rad/s)", y = "Amplitude", color="Filter") + plot_style + scale_x_continuous(breaks = seq(0, pi, by = pi/2), labels = c("0", expression(frac(pi,2)), expression(pi)))