pvsbandwidth
Calculate the spectral bandwidth of a signal from its discrete Fourier transform.
Syntax
kbnd -- the spectral bandwidth, in Hz
fsig -- an input pv stream in amplitude-frequency or amplitude-phase format
The bandwidth is the standard deviation of the FFT bin centre frequencies,
weighted by their magnitudes. It measures their spread around the spectral
centroid. The calculation uses bin positions, not the frequency or phase
values stored in the bins. A silent frame returns zero.
For frame-based input, the output updates when a new frame arrives and holds
the result between frames. For sliding input, it uses the first active sample
of each control block.
Examples
Here is an example of the use of the pvsbandwidth opcode. It uses the file pvsbandwidth.csd.
| Example of the pvsbandwidth 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 pvsbandwidth.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
kbw pvsbandwidth fftin; spectral center
printks2 "--**spectral center frequency = %f\n", kbw
endif
aout vco2 .2, 130
asig butterbp aout,kcenter,kbw
outs asig, asig
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: Victor Lazzarini
March 2020