View source: R/pitchDescriptives.R
| pitchDescriptives | R Documentation |
Provides common descriptives of time series such as pitch contours, including measures of average / range / variability / slope / inflections etc. Several degrees of smoothing can be applied consecutively. The summaries are produced on the original and log-transformed scales, so this is meant to be used on frequency-related variables in Hz.
pitchDescriptives(
x,
step = NULL,
timeUnit = NULL,
smoothBW = c(NA, 10, 1),
inflThres = 0.2,
summaryFun = c("mean", "sd"),
extraSummaryFun = c(),
ref = 16.3516,
ptvStep = NULL,
ptvTime = 0.5,
ptvFreq = 1,
plot = FALSE
)
x |
input: numeric vector, a list of time stamps and values in rows, a
dataframe with one row per file and time/pitch values stored as characters
(as exported by |
step |
distance between values in s (only needed if input is a vector) |
timeUnit |
if NULL (default), guesses "ms" if step > 1 and "s" otherwise; specify "s" or "ms" explicitly to override |
smoothBW |
a vector of bandwidths (Hz) for consecutive smoothing of
input using |
inflThres |
minimum difference (in semitones) between consecutive
extrema to consider them inflections; to apply a different threshold at
each smoothing level, provide |
summaryFun |
summary function(s) to apply to the syllable descriptives (not to the pitch contours themselves) |
extraSummaryFun |
additional summary function(s) applied to pitch contours themselves (not to extracted pitch descriptives) that take a numeric vector with some NAs and return a single number, eg c('myFun1', 'myFun2') |
ref |
reference value for transforming Hz to semitones, defaults to C0 (16.3516 Hz) |
ptvStep, ptvTime, ptvFreq |
the instantaneous proportion of time vocalizing (PTV) is calculated by producing a binary (sound on/off) contour with a step of ptvStep ms and convolving it with a half-Gaussian filter with SD = ptvTime s ($ptv_conv) and by low-pass filtering it over ptvFreq Hz ($ptv_lowpass) |
plot |
if TRUE, plots the inflections for manual verification |
A list with three elements: summary (a dataframe with columns
containing summaries of one or multiple inputs, one input per row),
syllables (a dataframe or list of dataframes with syllable timings,
where a syllable is a contiguous non-NA run of the pitch contour), and
ptv (a dataframe or list of dataframes with the instantaneous PTV
contour). The descriptives in summary are as follows:
total duration, s
duration after omitting leading and trailing NAs
percentage of input with non-NA value, eg percentage of voiced frames if the input is pitch
the first and last values on the original scale and in octaves above C0 (16.3516 Hz)
average and extreme values on the original scale
same in octaves above C0
the location of minimum and maximum relative to durDefined, 0 to 1
range and standard deviation on the original scale and in semitones
coefficient of variation = sd/mean (provided for historical reasons)
mean slope in Hz/s or semitones/s (NB: does not depend on duration or missing values)
mean absolute slope (modulus, ie rising and falling sections no longer cancel out)
the steepest slope
x = c(NA, NA, 405, 441, 459, 459, 460, 462, 462, 458, 458, 445, 458, 451,
444, 444, 430, 416, 409, 403, 403, 389, 375, NA, NA, NA, NA, NA, NA, NA, NA,
NA, 183, 677, 677, 846, 883, 886, 924, 938, 883, 946, 846, 911, 826, 826,
788, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 307,
307, 368, 377, 383, 383, 383, 380, 377, 377, 377, 374, 374, 375, 375, 375,
375, 368, 371, 374, 375, 361, 375, 389, 375, 375, 375, 375, 375, 314, 169,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 238, 285, 361, 374, 375, 375,
375, 375, 375, 389, 403, 389, 389, 375, 375, 389, 375, 348, 361, 375, 348,
348, 361, 348, 342, 361, 361, 361, 365, 365, 361, 966, 966, 966, 959, 959,
946, 1021, 1021, 1026, 1086, 1131, 1131, 1146, 1130, 1172, 1240, 1172, 1117,
1103, 1026, 1026, 966, 919, 946, 882, 832, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA)
plot(x, type = 'b')
ci95 = function(x) diff(quantile(na.omit(x), probs = c(.025, .975)))
pd = pitchDescriptives(
x, step = .025,
smoothBW = c(NA, 10, 1), # original + smoothed at 10 Hz and 1 Hz
inflThres = c(NA, .2, .2), # different for each level of smoothing
extraSummaryFun = 'ci95', # user-defined, here 95% coverage interval
plot = TRUE
)
pd
## Not run:
# a single file
data(speechEx, package = 'soundgen')
a = analyze(speechEx)
pd1 = pitchDescriptives(a$detailed[, c('time', 'pitch')],
inflThres = NA, plot = TRUE)
pd2 = pitchDescriptives(a$detailed[, c('time', 'pitch')],
inflThres = c(0.1, 0.1, .5), plot = TRUE)
# multiple files returned by analyze()
an = analyze('~/Downloads/temp')
pd = pitchDescriptives(an$detailed)
pd
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.