Learn R Programming

seewave (version 1.7.6)

spec: Frequency spectrum of a time wave

Description

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.

Usage

spec(wave, f, wl = 512, wn = "hanning", fftw = FALSE, norm = TRUE, PSD = FALSE,
PMF = FALSE, dB = NULL, dBref = NULL,
at = NULL, from = NULL, to = NULL,
identify = FALSE, col = "black", cex = 1,
plot = 1, flab = "Frequency (kHz)",
alab = "Amplitude", flim = NULL,
alim = NULL, type="l",...)

Arguments

wave
an R object.
f
sampling frequency of wave (in Hz). Does not need to be specified if embedded in wave.
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").
fftw
if TRUE calls the function FFT of the library fftw. See Notes of the spectro.
norm
if TRUE the spectrum is normalised (i. e. scaled) by its maximum.
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
a character string specifying the type dB to return: "max0" for a maximum dB value at 0, "A", "B", "C" and "D" for common dB weights.
dBref
a dB reference value when dB is not NULL. NULL by default but should be set to 2*10e-5 for a 20 microPa reference (SPL).
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).
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.
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.

Value

  • 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:
  • freqthe frequency of the points chosen on the spectrum
  • ampthe relative amplitude of the points chosen on the spectrum

Warning

The argument peaks is no more available (version > 1.5.6). See the function fpeaks for peak(s) detection.

Details

If at, from or to are FALSE then spec computes the spectrum of the whole signal.

See Also

meanspec, fpeaks, localpeaks, dynspec, corspec, fft.

Examples

Run this code
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="max0",col="blue")
spec(tico,f=22050,dB="max0",col="green",plot=2)
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)
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")

Run the code above in your browser using DataLab