diffspec {seewave} | R Documentation |
This function estimates the surface difference between two frequency spectra.
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, ...)
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. |
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.
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.
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
).
Jerome Sueur sueur@mnhn.fr and Sandrine Pavoine pavoine@mnhn.fr.
spec
, meanspec
, corspec
,
simspec
, diffenv
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)