estimateVTL  R Documentation 
Estimates the length of vocal tract based on formant frequencies. If
method = 'meanFormant'
, vocal tract length (VTL) is calculated
separately for each formant, and then the resulting VTLs are averaged. The
equation used is (2 * formant_number  1) * speedSound / (4 *
formant_frequency) for a closedopen tube (mouth open) and
formant_number * speedSound / (2 * formant_frequency) for an openopen
or closedclosed tube (eg closed mouth in mmm or open mouth and open glottis
in whispering). If method = 'meanDispersion'
, formant dispersion is
calculated as the mean distance between formants, and then VTL is calculated
as speed of sound / 2 / formant dispersion. If method =
'regression'
, formant dispersion is estimated using the regression method
described in Reby et al. (2005) "Red deer stags use formants as assessment
cues during intrasexual agonistic interactions". For a review of these and
other VTLrelated summary measures of formant frequencies, refer to Pisanski
et al. (2014) "Vocal indicators of body size in men and women: a
metaanalysis". See also schwa
for VTL estimation with
additional information on formant frequencies.
estimateVTL( formants, method = c("regression", "meanDispersion", "meanFormant")[1], interceptZero = TRUE, tube = c("closedopen", "openopen")[1], speedSound = 35400, checkFormat = TRUE, output = c("simple", "detailed")[1], plot = FALSE )
formants 
formant frequencies in any format recognized by

method 
the method of estimating vocal tract length (see details) 
interceptZero 
if TRUE, forces the regression curve to pass through the origin. This reduces the influence of highly variable lower formants, but we have to commit to a particular model of the vocal tract: closedopen or openopen/closedclosed (method = "regression" only) 
tube 
the vocal tract is assumed to be a cylindrical tube that is either "closedopen" or "openopen" (same as closedclosed) 
speedSound 
speed of sound in warm air, by default 35400 cm/s. Stevens (2000) "Acoustic phonetics", p. 138 
checkFormat 
if FALSE, only a list of properly formatted formant frequencies is accepted 
output 
"simple" (default) = just the VTL; "detailed" = a list of additional stats (see Value below) 
plot 
if TRUE, plots the regression line whose slope gives formant dispersion (method = "regression" only). Label sizes show the influence of each formant, and the blue line corresponds to each formant being an integer multiple of F1 (as when harmonics are misidentified as formants); the second plot shows how VTL varies depending on the number of formants used 
If output = 'simple'
(default), returns the estimated vocal
tract length in cm. If output = 'detailed'
and method =
'regression'
, returns a list with extra stats used for plotting. Namely,
$regressionInfo$infl
gives the influence of each observation
calculated as the absolute change in VTL with vs without the observation *
10 + 1 (the size of labels on the first plot). $vtlPerFormant$vtl
gives the VTL as it would be estimated if only the first nFormants
were used.
schwa
estimateVTL(NA) estimateVTL(500) estimateVTL(c(600, 1850, 2800, 3600, 5000), plot = TRUE) estimateVTL(c(600, 1850, 2800, 3600, 5000), plot = TRUE, output = 'detailed') estimateVTL(c(1200, 2000, 2800, 3800, 5400, 6400), tube = 'openopen', interceptZero = FALSE, plot = TRUE) estimateVTL(c(1200, 2000, 2800, 3800, 5400, 6400), tube = 'openopen', interceptZero = TRUE, plot = TRUE) # Multiple measurements are OK estimateVTL( formants = list(f1 = c(540, 600, 550), f2 = 1650, f3 = c(2400, 2550)), plot = TRUE, output = 'detailed') # NB: this is better than averaging formant values. Cf.: estimateVTL( formants = list(f1 = mean(c(540, 600, 550)), f2 = 1650, f3 = mean(c(2400, 2550))), plot = TRUE) # Missing values are OK estimateVTL(c(600, 1850, 3100, NA, 5000), plot = TRUE) estimateVTL(list(f1 = 500, f2 = c(1650, NA, 1400), f3 = 2700), plot = TRUE) # Note that VTL estimates based on the commonly reported 'meanDispersion' # depend only on the first and last formants estimateVTL(c(500, 1400, 2800, 4100), method = 'meanDispersion') estimateVTL(c(500, 1100, 2300, 4100), method = 'meanDispersion') # identical # ...but this is not the case for 'meanFormant' and 'regression' methods estimateVTL(c(500, 1400, 2800, 4100), method = 'meanFormant') estimateVTL(c(500, 1100, 2300, 4100), method = 'meanFormant') # much longer ## Not run: # Compare the results produced by the three methods nIter = 1000 out = data.frame(meanFormant = rep(NA, nIter), meanDispersion = NA, regression = NA) for (i in 1:nIter) { # generate a random formant configuration f = runif(1, 300, 900) + (1:6) * rnorm(6, 1000, 200) out$meanFormant[i] = estimateVTL(f, method = 'meanFormant') out$meanDispersion[i] = estimateVTL(f, method = 'meanDispersion') out$regression[i] = estimateVTL(f, method = 'regression') } pairs(out) cor(out) # 'meanDispersion' is pretty different, while 'meanFormant' and 'regression' # give broadly comparable results ## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.