diffspec {seewave}R Documentation

Difference between two frequency spectra

Description

This function estimates the surface difference between two frequency spectra.

Usage

diffspec(spec1, spec2, f = NULL, dB = FALSE, plot = FALSE, type="l", 
lty1 = 1, lty2 = 2, col1 = 2, col2 = 4, cold = 8,
flab = "Frequency (kHz)", alab = "Amplitude",
flim = NULL, alim = NULL, legend = TRUE, ...)

Arguments

spec1 a first data set resulting of a spectral analysis obtained with spec or meanspec (not in dB). This can be either a two-column matrix (col1 = frequency, col2 = amplitude) or a vector (amplitude).
spec2 a first data set resulting of a spectral analysis obtained with spec or meanspec (not in dB). This can be either a two-column matrix (col1 = frequency, col2 = amplitude) or a vector (amplitude).
f sampling frequency of waves used to obtain spec1 and spec2 (in Hz). Not necessary if spec1 and/or spec2 is a two-column matrix obtained with spec or meanspec.
dB logical, if TRUE return the spectra and their surface difference in dB (by default FALSE).
plot logical, if TRUE plots both spectra and their surface difference (by default FALSE).
type if plot is TRUE, type of plot that should be drawn. See plot for details (by default "l" for lines).
lty1 line type of spec1 if type="l".
lty2 line type of spec2 if type="l".
col1 colour of spec1.
col2 colour of spec2.
cold colour of the surface difference.
flab title of the frequency axis.
alab title of the amplitude axis.
flim the range of frequency values.
alim range of amplitude axis.
legend logical, if TRUE adds a legend to the plot.
... other plot graphical parameters.

Details

Both spectra are first transformed as probability mass functions (PMF).
Spectral difference is then computed according to:

D = sum(abs(spec1-spec2))/2, with 0 < D <1.

Value

The difference is returned. This value is without unit. If dB is TRUE, the same value is returned in dB.
When plot is TRUE, both spectra and their difference surface are plotted on the same graph.

Note

This method can be used as a relative distance estimation between different spectra.
The dB value obtained can be very different from the one visually estimated when looking at the graph (plot=TRUE).

Author(s)

Jerome Sueur sueur@mnhn.fr and Sandrine Pavoine pavoine@mnhn.fr.

See Also

spec, meanspec, corspec, simspec, diffenv

Examples

a<-noise(f=8000,d=1)
b<-synth(f=8000,d=1,cf=2000)
c<-synth(f=8000,d=1,cf=1000)
d<-noise(f=8000,d=1)
speca<-spec(a,f=8000,wl=512,at=0.5,plot=FALSE)
specb<-spec(b,f=8000,wl=512,at=0.5,plot=FALSE)
specc<-spec(c,f=8000,wl=512,at=0.5,plot=FALSE)
specd<-spec(d,f=8000,wl=512,at=0.5,plot=FALSE)
diffspec(speca,speca,f=8000)
#[1] 0 => similar spectra of course !
diffspec(speca,specb)
diffspec(speca,specc,plot=TRUE)
diffspec(specb,specc,plot=TRUE)
diffspec(speca,specd,plot=TRUE)

[Package seewave version 1.5.0 Index]