Learn R Programming

spectral (version 2.0)

filter.fft: Filter in the frequency domain

Description

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

Usage

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

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

type

type of weightening function: "poly", "sinc", "bi-cubic","gauss", can be abbreviated

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 band pass is represented throughout a function in the form of four different types, i.e. "polynom", "sin(x)/x", "bi-cubic", "gauss". A detailed description about these types can be found in BP.

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