Learn R Programming

spectral (version 1.3)

filter.fft: Filter in the frequency domain

Description

This function provides a method to bandpass filter in the frequency domain.

Usage

filter.fft(y = stop("y-value is missing"), x = NULL, fc = 0,
  BW = 0, n = 3)

Arguments

y

numeric data vector

x

optional x-coordinate

fc

center frequency of the bandpass

BW

bandwith of the bandpass

n

parameter to control the stiffness of the bandpass

Details

A signal \(y\) is meant to be equaly spaced and causal, which means it starts at \(t=0\). For times \(y < 0\) the signal is not defined. The filtering itself takes place with the analytic function of \(y\) which provides an one sided spectrum. Applying the Fourier transform, all properties of \(y\) will be preserved.

The applied bandpass filter function is a simple polynomial approach, which weights the frequencies. Setting fc = 0 one can achieve a low pass filter.

Examples

Run this code
# NOT RUN {
## noisy signal with amplitude modulation
x <- seq(0,1, length.out=500)

# original data
y_org <- (1+sin(2*2*pi*x))*sin(20*2*pi*x)

# overlay some noise
y_noise <- y_org+rnorm(length(x),sd=0.2)

# filter the noisy data
y_filt <- filter.fft(y_noise,x,fc=20,BW=4,n=50)

# plot results
plot(x,y_noise,type="l",lwd=1,col="darkgrey",lty=2,ylab="y",main="Spectral filtering")
lines(x,y_org,lwd=5,col="grey")
lines(x,y_filt)
legend("topright",c("org","noisy","filtered"),col=c("grey","darkgrey","black")
        ,lty=c(1,2,1),lwd=c(5,1,1))
# }

Run the code above in your browser using DataLab