Skip to content

pvscent

Calculate the spectral centroid of a signal from its discrete Fourier transform.

Syntax

kcent = pvscent(fsig)
acent = pvscent(fsig)
kcent pvscent fsig
acent pvscent fsig

Performance

kcent -- the spectral centroid, in Hz

acent -- the spectral centroid, in Hz

fsig -- an input pv stream in amplitude-frequency or amplitude-phase format

The centroid is the mean of the FFT bin centre frequencies, weighted by their magnitudes. The calculation uses bin positions, not the frequency or phase values stored in the bins. A silent frame returns zero.

For frame-based input, both outputs update when a new frame arrives and hold the result between frames. For sliding input, acent updates each sample; kcent uses the first active sample of each control block.

Examples

Here is an example of the use of the pvscent opcode. It uses the file pvscent.csd.

Example of the _pvscent_ opcode.
<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
; Audio out   Audio in
-odac    ;;;RT audio I/O
; For Non-realtime ouput leave only the line below:
; -o pvscent.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

sr = 44100
ksmps = 32
nchnls = 2
0dbfs  = 1

;; example written by joachim heintz 2009

giSine          ftgen           0, 0, 4096, 10, 1

instr 1
irefrtm     = p4; time for generating new values for the spectral centroid
ifftsize        = 1024
ioverlap        = ifftsize / 4
iwinsize        = ifftsize
iwinshape       = 1; von-Hann window
;Sfile          = "flute-C-octave0.wav"
Sfile           = "fox.wav"
ain             soundin Sfile
fftin           pvsanal ain, ifftsize, ioverlap, iwinsize, iwinshape; fft-analysis of the audio-signal
ktrig           metro   1 / irefrtm
if ktrig == 1 then
kcenter pvscent fftin; spectral center
endif
aout            oscil   .2, kcenter, giSine
outs            aout, aout
endin

</CsInstruments>
<CsScore>
i 1 0 2.757 .3
i 1 3 2.757 .05
i 1 6 2.757 .005
i 1 9 2.757 .001
e
</CsScore>
</CsoundSynthesizer>

See also

Tools for Real-time Spectral Processing (pvs opcodes)

Credits

Author: John ffitch
March 2005

New plugin in version 5

March 2005.