spec {seewave} | R Documentation |
This function returns the frequency spectrum (i.e. the relative amplitude of the frequency content) of a time wave. Results can be obtained either as absolute or dB data.
spec(wave, f, wl = 512, wn = "hanning", PSD = FALSE, PMF = FALSE, dB = FALSE, at = NULL, from = NULL, to = NULL, peaks = FALSE, identify = FALSE, col = "black", cex = 1, colpeaks = "red", cexpeaks = 1, fontpeaks = 1, plot = 1, flab = "Frequency (kHz)", alab = "Amplitude", flim = c(0, f/2000), alim = NULL, type="l",...)
wave |
data describing a time wave or a Sample
object generated loading 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. |
wl |
if at is not null, length of the window for the analysis
(even number of points, by defaults = 512). |
wn |
window name, see ftwindow (by default "hanning" ). |
PSD |
if TRUE return Power Spectra Density,
i. e. the square of the spectra. |
PMF |
if TRUE return Probability Mass Function,
i. e. the probability distribution of frequencie. |
dB |
logical, if TRUE returns the spectrum in dB
(by default FALSE ). |
at |
position where to compute the spectrum (in s). |
from |
start mark where to compute the spectrum (in s). |
to |
end mark where to compute the spectrum (in s). |
peaks |
returns peaks value for a given span (see details ). |
identify |
to identify frequency and amplitude values on the plot with the help of a cursor. |
col |
colour of the spectrum. |
cex |
pitch size of the spectrum. |
colpeaks |
colour of peaks value plotted on the spectrum. |
cexpeaks |
character size of peaks value plotted on the spectrum. |
fontpeaks |
font of peaks value plotted on the spectrum. |
plot |
if 1 returns frequency on x-axis, if 2 returns
frequency on y-axis, (by default 1 ). |
flab |
title of the frequency axis. |
alab |
title of the amplitude axis. |
flim |
range of frequency axis. |
alim |
range of amplitude axis. |
type |
if plot is TRUE , type of plot that should be drawn.
See plot for details (by default "l" for lines). |
... |
other plot graphical parameters. |
If at
, from
or to
are FALSE
then spec
computes the spectrum of the whole signal.
peaks
setting corresponds to dimension
of embed
.
When using identify
, press ‘stop’ tools bar button to return values in the console.
This function returns a two-column matrix,
the first column corresponding to the frequency axis, the second column
corresponding to the amplitude axis.
If identify
is TRUE
, spec
returns a list with
two elements:
freq |
the frequency of the points chosen on the spectrum |
amp |
the relative amplitude of the points chosen on the spectrum |
spec |
the spectrum computed |
peaks |
the peaks value (in kHz). |
This function is based on fft
.
Jerome Sueur sueur@mnhn.fr and
Martin Maechler maechler@stat.math.ethz.ch for peaks
.
meanspec
, dynspec
,
corspec
, fft
.
data(tico) # spectrum of the whole signal, in absolute or dB amplitude, # horizontaly or vertically op<-par(mfrow=c(2,2)) spec(tico,f=22050) spec(tico,f=22050,col="red",plot=2) spec(tico,f=22050,dB=TRUE,col="blue") spec(tico,f=22050,dB=TRUE,col="green",plot=2) par(op) # spectra computed at specific locations with peak value op<-par(mfrow=c(2,2)) spec(tico,f=22050,wl=512,at=0.2,peak=175) title("Note A") spec(tico,f=22050,wl=512,at=0.7,peak=175) title("Note B") spec(tico,f=22050,wl=512,at=1.1,peak=175) title("Note C") spec(tico,f=22050,wl=512,at=1.6,peak=165) title("Note D") par(op) # an indirect way to compare spectra a<-spec(tico,f=22050,wl=512,at=0.2,plot=FALSE) b<-spec(tico,f=22050,wl=512,at=0.7,plot=FALSE) c<-spec(tico,f=22050,wl=512,at=1.1,plot=FALSE) d<-spec(tico,f=22050,wl=512,at=1.6,plot=FALSE) all<-cbind(a[,2],b[,2],c[,2],d[,2]) matplot(x=a[,1],y=all,yaxt="n", xlab="Frequency (kHz)",ylab="Amplitude",xaxs="i",type="l") legend(8,0.8,c("Note A","Note B", "Note C", "Note D"),bty="o", lty=c(1:4),col=c(1:4)) # spectrum from a particular position to another one op<-par(mfrow=c(2,1)) oscillo(tico,f=22050) abline(v=c(0.5,0.9),col="red",lty=2) text(c("from 0.5 s","to 0.7 s"), x=c(0.5,0.9),y=rep(max(tico/1.1),2),col="red",pos=4) spec(tico,f=22050,wl=512,from=0.5,to=0.9,col="red") title("Spectrum of the note B") par(op) # spectrum and spectrogram data(orni) orni1<-cutw(orni,f=22050,from=0.32,to=0.39) layout(matrix(c(1,2),nc=2),widths=c(3,1)) par(mar=c(5,4,3,0.5)) spectro(orni1,f=22050,wl=128,zp=8,ovlp=85,scale=FALSE) par(mar=c(5,1,3,0.5)) spec(orni1,f=22050,col="red",plot=2,flab="",yaxt="n")