fir {seewave}R Documentation

Finite Impulse Response filter

Description

This function is a FIR filter that filters out a selected frequency section of a time wave (low-pass, high-pass, low-stop, high-stop, bandpass or bandstop frequency filter).

Usage

fir(wave, f, from = FALSE, to = FALSE, bandpass = TRUE, custom = NULL,
wl = 512, wn = "hanning", listen = FALSE, Sample= FALSE)

Arguments

wave data describing a time wave or a Sample object created generated a wav file with loadSample (package sound).
f sampling frequency of wave (in Hz). Does not need to be specified if wave is a Sample object.
from start frequency (in Hz) where to apply the filter.
to end frequency (in Hz) where to apply the filter.
bandpass if TRUE a band-pass filter is applied between from and to, if FALSE a band-stop filter is applied between from and to (by default TRUE).
custom a vector describing the frequency response of a custom filter. This can be manually generated or obtained with spec and meanspec. wl is no more required. See examples.
wl window length of the impulse filter (even number of points).
wn window name, see ftwindow (by default "hanning").
listen if TRUE the new sound is played back.
Sample if TRUE and plot is FALSE returns an object of class Sample

.

Details

This function is based on the reverse of the Fourier Transform (fft) and on a convolution (convolve) between the wave to be filtered and the impulse filter.

Value

A new wave is returned as a one-column matrix or as a Sample object if Sample is TRUE.

Author(s)

Jerome Sueur sueur@mnhn.fr

References

Stoddard, P. K. (1998). Application of filters in bioacoustics. In: Hopp, S. L., Owren, M. J. and Evans, C. S. (Eds), Animal acoustic communication. Springer, Berlin, Heidelberg,pp. 105-127.

See Also

ffilter,lfs, afilter, fir1, fir2

Examples

a<-noise(f=8000,d=1)
# low-pass
b<-fir(a,f=8000,to=1500)
spectro(b,f=8000)
# high-pass
c<-fir(a,f=8000,from=2500)
spectro(c,f=8000)
# band-pass
d<-fir(a,f=8000,from=1000,to=2000)
spectro(d,f=8000)
# band-stop
e<-fir(a,f=8000,from=1500,to=2500,bandpass=FALSE)
spectro(e,f=8000)
# custom filter manually generated
myfilter1<-rep(c(rep(0,32),rep(1,32)),4)
g<-fir(a,f=8000,custom=myfilter1)
spectro(g,f=8000)
# custom filter generated using spec()
data(tico)
myfilter2<-spec(tico,f=22050,at=0.7,wl=512,plot=FALSE)
b<-noise(d=1,f=22050)
h<-fir(b,f=22050,custom=myfilter2)
spectro(h,f=22050)

[Package seewave version 1.5.0 Index]