| 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 = FALSE, from = FALSE, to = FALSE, 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,...)
wave |
data describing a time wave or a Sample
object created loading a wav file with loadSample
(package Sound). |
f |
sampling frequency of wave (in Hz) |
wl |
if at is not null, length of the window for the analysis
(even number of points). |
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 return 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 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. |
... |
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 vector of numeric data corresponding to the computed
spectrum. If peaks is TRUE, spec returns a list with
two elements:
spec |
the spectrum computed |
peaks |
the peaks value (in kHz). |
This function is based on fft.
Jérôme Sueur jerome.sueur@univ-tours.fr and
Martin Maechler maechler@stat.math.ethz.ch for peaks.
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,type="l")
spec(tico,f=22050,type="l",col="red",plot=2)
spec(tico,f=22050,type="l",dB=TRUE,col="blue")
spec(tico,f=22050,type="l",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,type="l",peak=175)
title("Note A")
spec(tico,f=22050,wl=512,at=0.7,type="l",peak=175)
title("Note B")
spec(tico,f=22050,wl=512,at=1.1,type="l",peak=175)
title("Note C")
spec(tico,f=22050,wl=512,at=1.6,type="l",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,b,c,d)
matplot(x=seq(0,11.025,length.out=nrow(all)),y=all,type="l",yaxt="n",
xlab="Frequency (kHz)",ylab="Amplitude",xaxs="i")
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,type="l",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,type="l",col="red",plot=2,flab="",yaxt="n")