This function returns a two-dimension spectrographic representation of a time wave. The function corresponds to short-term Fourier transform. An amplitude contour plot can be overlaid.
spectro(wave, f, channel = 1, wl = 512, wn = "hanning", zp = 0,
ovlp = 0, noisereduction = NULL, fastdisp = FALSE,
complex = FALSE, norm = TRUE, correction="none",
fftw = FALSE, dB = "max0", dBref = NULL, plot = TRUE,
flog = FALSE, grid = TRUE, osc = FALSE, scale = TRUE, cont = FALSE,
collevels = NULL, palette = spectro.colors,
contlevels = NULL, colcont = "black",
colbg = "white", colgrid = "black",
colaxis = "black", collab="black",
cexlab = 1, cexaxis = 1,
tlab = "Time (s)",
flab = "Frequency (kHz)",
alab = "Amplitude",
scalelab = "Amplitude\n(dB)",
main = NULL,
scalefontlab = 1, scalecexlab =0.75,
axisX = TRUE, axisY = TRUE, tlim = NULL, trel = TRUE,
flim = NULL, flimd = NULL,
widths = c(6,1), heights = c(3,1),
oma = rep(0,4),
listen=FALSE,
...)
This function returns a list of three items:
a numeric vector corresponding to the time axis.
a numeric vector corresponding to the frequency axis.
a numeric or a complex matrix corresponding to the amplitude values.
Each column is a Fourier transform of length wl/2
.
an R object.
sampling frequency of wave
(in Hz). Does not need to
be specified if embedded in wave
.
channel of the R object, by default left channel (1).
window length for the analysis (even number of points) (by default = 512).
window name, see ftwindow
(by default
"hanning"
).
zero-padding (even number of points), see Details
.
overlap between two successive windows (in %).
a numeric vector of length 1, if 1
a
noise reduction is applied along the rows of the spectrogram, if
2
a noise reduction applied along the columns. See Details
.
faster graphic display for long wave
. The
spectrogram/oscillogram is displayed/saved faster in the graphic device/
graphic file when set to TRUE
, with a cost on graphical resolution.
if TRUE
the STFT will be returned as complex
numbers.
if TRUE
the STFT is normalised (i. e. scaled) by its maximum.
a character vector of length 1 to apply an
amplitude ("amplitude") or an energy ("energy") correction
to each FT window. This argument is useful only when one wish to obtain
absolute values that is when norm=FALSE
.
By default no correction is applied ("none").
if TRUE
calls the function FFT
of the
library fftw
. See Notes.
a character string specifying the type dB to return: "max0"
(default) for a maximum dB value at 0, "A", "B", "C", "D", and "ITU" for
common dB weights. If set to NULL
, then a linear scale is used.
a dB reference value. NULL
by default
but should be set to 2*10e-5 for a 20 microPa reference.
logical, if TRUE
plots the spectrogram
(by default TRUE
).
a logical to plot the frequency on a logarithmic scale.
logical, if TRUE
plots a y-axis grid
(by default TRUE
).
logical, if TRUE
plots an oscillogram beneath
the spectrogram (by default FALSE
).
logical, if TRUE
plots a dB colour scale on the right
side of the spectrogram (by default TRUE
).
logical, if TRUE
overplots contour lines on the spectrogram
(by default FALSE
).
a set of levels which are used to partition the amplitude range of the spectrogram (in dB).
a color palette function to be used to assign colors in
the plot, see Details
.
a set of levels which are used to partition the amplitude range for contour overplot (in dB).
colour for cont
plotting.
background colour.
colour for grid
plotting.
color of the axes.
color of the labels.
size of the labels.
size of the axes.
label of the time axis.
label of the frequency axis.
label of the amplitude axis.
amplitude scale label.
label of the main title.
font of the amplitude scale label.
cex of the amplitude scale label.
logical, if TRUE
plots time X-axis (by default TRUE
).
logical, if TRUE
plots frequency Y-axis (by default TRUE
).
modifications of the time X-axis limits.
time X-axis with a relative scale when tlim
is not null,
i.e. relative to wave
.
modifications of the frequency Y-axis limits (in kHz).
dynamic modifications of the frequency Y-axis limits. New wl
and ovlp
arguments are applied to increase time/frequency resolution.
a vector of length 2 to control the relative widths of columns on
the device when scale
is TRUE
.
a vector of length 2 to control the relative heights of rows on
the device when osc
is TRUE
.
a vector of length 4 to control the size of outer margins
when either scale
or osc
is TRUE
.
if TRUE
the sound is played back (by default
FALSE
).
other contour
and oscillo
graphical parameters.
Jerome Sueur and Caroline Simonis.
Following Heisenberg uncertainty principle, the short-term Fourier transform
cannot be precised in both time and frequency. The temporal and frequency
precisions of the function are actually dependent of the wl
value.
Choosing a high wl
value will increase the frequency resolution but
reduce the temporal one, and vice versa. The frequency precision is
obtained by calculating the ratio f
/wl
,
and the temporal precision is obtained by calculating the reverse ratio
wl
/f
. This problem can be reduced in some way with zp
that
adds 0 values on both sides of the analysis window. This increases frequency
resolution without altering time resolution.
Any colour palette can be used. In particular, it is possible to use other
palettes coming with seewave: temp.colors
,
reverse.gray.colors.1
,
reverse.gray.colors.2
, reverse.heat.colors
,
reverse.terrain.colors
,
reverse.topo.colors
,
reverse.cm.colors
corresponding to the reverse of heat.colors
,
terrain.colors
, topo.colors
, cm.colors
.
Use locator
to identify points.
The noise reduction using the argument noisereduction
is an
image filter, not a signal filter. The principle consists in
subtracting each spectrogram row or column by its median. Noise reduction alters
energy conservation, it should then be used for visual display only.
Hopp, S. L., Owren, M. J. and Evans, C. S. (Eds) 1998. Animal acoustic communication. Springer, Berlin, Heidelberg.
ggspectro
, spectro3D
,
lts
, dynspec
, wf
,
oscillo
, dBscale
, fft
.
if (FALSE) {
data(tico)
data(pellucens)
# simple plots
spectro(tico,f=22050)
spectro(tico,f=22050,osc=TRUE)
spectro(tico,f=22050,scale=FALSE)
spectro(tico,f=22050,osc=TRUE,scale=FALSE)
# change the dB scale by setting a different dB reference value (20microPa)
spectro(tico,f=22050, dBref=2*10e-5)
# unnormalised spectrogram with a linear amplitude scale
spectro(tico, dB=NULL, norm=FALSE, scale=FALSE)
# manipulating wl
op<-par(mfrow=c(2,2))
spectro(tico,f=22050,wl=256,scale=FALSE)
title("wl = 256")
spectro(tico,f=22050,wl=512,scale=FALSE)
title("wl = 512")
spectro(tico,f=22050,wl=1024,scale=FALSE)
title("wl = 1024")
spectro(tico,f=22050,wl=4096,scale=FALSE)
title("wl = 4096")
par(op)
# vertical zoom using flim
spectro(tico,f=22050, flim=c(2,6))
spectro(tico,f=22050, flimd=c(2,6))
# a full plot
pellu2<-cutw(pellucens,f=22050,from=1,plot=FALSE)
spectro(pellu2,f=22050,ovlp=85,zp=16,osc=TRUE,
cont=TRUE,contlevels=seq(-30,0,20),colcont="red",
lwd=1.5,lty=2,palette=reverse.terrain.colors)
# black and white spectrogram
spectro(pellu2,f=22050,ovlp=85,zp=16,
palette=reverse.gray.colors.1)
# colour modifications
data(sheep)
spectro(sheep,f=8000,palette=temp.colors,collevels=seq(-115,0,1))
spectro(pellu2,f=22050,ovlp=85,zp=16,
palette=reverse.cm.colors,osc=TRUE,colwave="orchid1")
spectro(pellu2,f=22050,ovlp=85,zp=16,osc=TRUE,palette=reverse.heat.colors,
colbg="black",colgrid="white", colwave="white",colaxis="white",collab="white")
}
Run the code above in your browser using DataLab