R: Normalize formant frequency values using a variety of...

Normalize vowel formant frequencies {phonR} | R Documentation

## Normalize formant frequency values using a variety of algorithms

### Description

Functions for transforming vowel formant frequency data measured in Hertz, using one of several normalization schemes commonly used in phonetic and sociolinguistic research. `normVowels` is a convenience function wrapping to the individual `norm[Method]` functions.

### Usage

        normBark(f)
        normErb(f)
        normLog(f)
        normMel(f)
        normLobanov(f, group=NULL)
        normLogmean(f, group=NULL, exp=FALSE, ...)
        normNearey1(f, group=NULL, exp=FALSE, ...)
        normNearey2(f, group=NULL, exp=FALSE, ...)
        normSharedLogmean(f, group=NULL, exp=FALSE, ...)
        normWattFabricius(f, vowel, group=NULL)
        normVowels(method, f0=NULL, f1=NULL, f2=NULL, f3=NULL,
                   vowel=NULL, group=NULL, ...)

### Arguments

`f` | Vector or matrix of formant frequencies. For `normNearey`, `f` must be an N-by-4 matrix of frequencies, with column order “f0”, “F1”, “F2”, “F3”. For `normWattFabricius`, `f` must be an N-by-2 matrix or data frame of F1 and F2 values. If passing a matrix to `normLogmean`, formants must be grouped within columns, not rows.
`vowel` | Vector or factor of vowel symbols, with `length(vowel)==nrow(f)`. Used only in `normVowels(method="wattfabricius", ...)` or `normWattFabricius(...)`.
`group` | Vector or factor indicating rows of `f` that should be normalized together. This is useful for, e.g., calculating talker-intrinsic normalizations when `group` encodes talker identity.
`exp` | Logical; should the result of the logmeans calculation be passed through the `exp` function before being returned?
`f0,f1,f2,f3` | Separate vectors of formant or fundamental frequency values used in the convenience method `plotVowels`. `f1` and `f2` are required when `method` is `"wattfabricius"`, `"logmean"`, `"shared"`, `"nearey1"`, or `"nearey2"`.
`method` | Specification of the normalization method to use when calling the convenience method `normVowels`. Possible values are “bark”, “erb”, “lobanov”, “log”, “logmean”, “mel”, “shared”, and “wattfabricius”. “zscore” is an accepted synonym for “lobanov”; “nearey1” is an accepted synonym for “logmean”; “nearey2” is an accepted synonym for “shared”; and “scentroid”, is an accepted synonym for “wattfabricius”.
`...` | Additional arguments passed to `colMeans` by functions `normLogmean` and `normSharedLogmean` (useful for specifying the value of `na.rm`).

### Details

`normLogmean` is a synonym for `normNearey1`, which is also sometimes confusingly called “single logmean”. `normSharedLogmean` is a synonym for `normNearey2`. The argument `exp=TRUE` for these functions will yield values that are consistent with the `norm.nearey` implementation, which takes the result of Nearey's original formulae and uses it as the exponent of the base of the natural logarithm (presumably so that the function always yields positive values).

Note that `normErb` returns the “ERB-rate scale” value (i.e., the number of ERBs below the given frequency), not the ERB of the auditory filter centered at the given frequency.

The implementation of the Watt-Fabricius method varies slightly from the formula in Watt & Fabricius (2002), since `normWattFabricius` simply calculates which vowel has the highest mean F1 value and designates it as the low corner of the triangle, rather than asking the user to expressly specify the “TRAP” or “START” vowel. Similarly, `normWattFabricius` simply calculates which vowel has the highest mean F2 value and uses that to calculate the upper left corner, rather than expressly looking for the mean of the “point-vowel” /i/. The upper right corner is, as in the original method, derived from the other two. If the vowels with the highest mean F1 and highest mean F2 are not the same pair of vowels for all members of `group`, `normWattFabricius` returns an error.

### Value

Most of the functions return a vector or matrix of the same dimensions as were passed in. The exceptions are `normVowels`, which returns an n-by-m matrix of n data points by m formants with formants in ascending order with fundamental frequency first (if present), and `normWattFabricius` (or `normVowels` with `method=wattfabricius`), which only and always returns F1 and F2, regardless of whether f0 and F3 were supplied.

### Author(s)

McCloy, Daniel drmccloy@uw.edu

### References

Glasberg, B. R., & Moore, B. C. J. 1990 “Derivation of auditory filter shapes from notched-noise data.” Hearing Research, 47(1-2), 103-138. http://dx.doi.org/10.1016/0378-5955(90)90170-T

Lobanov, B. M. 1971 “Classification of Russian vowels spoken by different speakers.” The Journal of the Acoustical Society of America, 49(2), 606-608. http://dx.doi.org/10.1121/1.1912396

McCloy, D. R. 2012 “Normalizing and plotting vowels with the phonR package.” Technical Reports of the UW Linguistic Phonetics Laboratory. http://dan.mccloy.info/pubs/McCloy2012_phonR.pdf

Nearey, T. M. 1978 “Phonetic feature systems for vowels” (Doctoral dissertation, University of Alberta). Reprinted by the Indiana University Linguistics Club. http://www.ualberta.ca/~tnearey/Nearey1978_compressed.pdf

Stevens, S. S., & Volkmann, J. 1940 “The relation of pitch to frequency: A revised scale.” The American Journal of Psychology, 53(3), pp. 329-353.

Traunmuller, H. 1990 “Analytical expressions for the tonotopic sensory scale.” The Journal of the Acoustical Society of America, 88(1), 97-100. http://dx.doi.org/10.1121/1.399849

Watt, D., & Fabricius, A. H. 2002 “Evaluation of a technique for improving the mapping of multiple speakers' vowel spaces in the F1 ~ F2 plane.” Leeds Working Papers in Linguistics and Phonetics, 9, 159-173.

### Examples

        data(indoVowels)
        bark <- with(indo, normBark(cbind(f1, f2)))
        erbn <- with(indo, normErb(cbind(f1, f2)))
        mel <- with(indo, normMel(cbind(f1, f2)))
        lobanov <- with(indo, normLobanov(cbind(f1, f2), group=subj))
        lognormed <- with(indo, normLog(cbind(f1, f2)))
        # using the convenience wrapper:
        bark <- with(indo, normVowels('bark', f1=f1, f2=f2))
        wattfab <- with(indo, normVowels('wattfabricius', f1=f1, f2=f2,
                        vowel=vowel, group=subj))

[Package phonR version 1.0-7 Index]