PeriodeLytter
Hi-Fi freak
- Ble medlem
- 26.02.2013
- Innlegg
- 3.066
- Antall liker
- 2.526
Grunnlaget for denne posten er Mr. Milot's Leedh Processing Volume som enkelt velger bort prioritere nominelle decibel nivåer typsik -1dB til fordel for verdier som gir minst avrundingsfeil.
"The key idea behind the alternative approach is to minimize information loss at truncation stage. For instance, consider a signal represented in 24bits words (MSB aligned). If volume control coefficients were limited to 8 bits and the input signal had 16bits resolution, no truncation would occur and no information would be lost. This trivial example hints towards the principle governing the alternative digital domain volume control: Minimise the number of bits K used to quantize volume control coefficients so that information loss is minimized at truncation stage. In other words, it trades volume control coefficients precision against information loss minimization."
Etter først kommet over sjokket at man kan ta patent på et så enkelt men genialt prinsipp ble jeg nyskjerrig på om SoX kan lures til å treffe "sweet spot" med sitt -v [FACTOR] parameter
F.eks. følgende script vil liste alle 1-bit shift fra faktor=1 som alle resulterer i 16-bit uten avrundingsfeil.
Tester viser at sox's -v [FACTOR] faktisk har en oppløsing på 9.5 desimaler. En milliard muligheter gitt at jeg ikke med sikkerhet har funnet hvor halvdesimalen havner
Derfor ble en brute force skanner med valgfri desimaler og regel om bitdybde laget. Følgende er resultat fra denne testen med 4 desimaler og maks 24-bit:
Vi behøver kun finne treff innenfor første bit (-6.0206dB) da resten vil repetere.
Før inn -v [FACTOR] fra hvilken som helst av disse treffene i scriptet over og få at alle nomilenne dB resultatene med samme krav til bit dybde. Her vist for [FACTOR] 0.75 som behøver 18-bit:
"The key idea behind the alternative approach is to minimize information loss at truncation stage. For instance, consider a signal represented in 24bits words (MSB aligned). If volume control coefficients were limited to 8 bits and the input signal had 16bits resolution, no truncation would occur and no information would be lost. This trivial example hints towards the principle governing the alternative digital domain volume control: Minimise the number of bits K used to quantize volume control coefficients so that information loss is minimized at truncation stage. In other words, it trades volume control coefficients precision against information loss minimization."
Presentation | Leedh Processing
lossless digital volume control by signal processing White Paper
www.processing-leedh.com
Etter først kommet over sjokket at man kan ta patent på et så enkelt men genialt prinsipp ble jeg nyskjerrig på om SoX kan lures til å treffe "sweet spot" med sitt -v [FACTOR] parameter
F.eks. følgende script vil liste alle 1-bit shift fra faktor=1 som alle resulterer i 16-bit uten avrundingsfeil.
Kode:
#!/bin/bash
audio='noise.wav'
function mySoX(){
local tmp=$(sox -v $1 "$audio" -n stats 2>&1 | grep -i "Bit-depth" | sed 's/[^0-9.]*//g')
local bitd=$(head <<< "$tmp")
local bitdepth="${bitd:0:2}"
local b="${bitd:0:2}/${bitd:2:2} ${bitd:4:2}/${bitd:6:2} ${bitd:8:2}/${bitd:10:2}"
# calculate decibel: dB = 20 × log10(FACTOR)
local mydB=$(echo "scale=4;20*l($1)/l(10)" | bc -l)
echo "SoX -v [FACTOR]: $1 $mydB dB Bit-depth: $bitdepth [$b]"
}
function halfsteps(){
echo "Divide each factor by 2 in 15 steps"
echo "---------------------------------------------------------------------------"
mySoX $1 #
for i in {1..15}; do
# go down in -6dB step from start
[ -z "$newstart" ] && newstart=$1
tmp=$(echo "scale=10;$newstart/2" | bc -l)
mySoX $tmp
newstart=$tmp
done
}
halfsteps 1 # -v [FACTOR]
exit 0
Divide each factor by 2 in 15 steps
---------------------------------------------------------------------------
SoX -v [FACTOR]: 1 0 dB Bit-depth: 16 [16/16 16/16 16/16]
SoX -v [FACTOR]: .5000000000 -6.0204 dB Bit-depth: 16 [16/17 16/17 16/17]
SoX -v [FACTOR]: .2500000000 -12.0408 dB Bit-depth: 16 [16/18 16/18 16/18]
SoX -v [FACTOR]: .1250000000 -18.0621 dB Bit-depth: 16 [16/19 16/19 16/19]
SoX -v [FACTOR]: .0625000000 -24.0825 dB Bit-depth: 16 [16/20 16/20 16/20]
SoX -v [FACTOR]: .0312500000 -30.1038 dB Bit-depth: 16 [16/21 16/21 16/21]
SoX -v [FACTOR]: .0156250000 -36.1242 dB Bit-depth: 16 [16/22 16/22 16/22]
SoX -v [FACTOR]: .0078125000 -42.1454 dB Bit-depth: 16 [16/23 16/23 16/23]
SoX -v [FACTOR]: .0039062500 -48.1659 dB Bit-depth: 16 [16/24 16/24 16/24]
SoX -v [FACTOR]: .0019531250 -54.1871 dB Bit-depth: 16 [16/25 16/25 16/25]
SoX -v [FACTOR]: .0009765625 -60.2076 dB Bit-depth: 16 [16/26 16/26 16/26]
SoX -v [FACTOR]: .0004882812 -66.2288 dB Bit-depth: 16 [16/27 16/27 16/27]
SoX -v [FACTOR]: .0002441406 -72.2492 dB Bit-depth: 16 [16/28 16/28 16/28]
SoX -v [FACTOR]: .0001220703 -78.2705 dB Bit-depth: 16 [16/29 16/29 16/29]
SoX -v [FACTOR]: .0000610351 -84.2909 dB Bit-depth: 16 [16/30 16/30 16/30]
SoX -v [FACTOR]: .0000305175 -90.3122 dB Bit-depth: 16 [16/31 16/31 16/31]
Tester viser at sox's -v [FACTOR] faktisk har en oppløsing på 9.5 desimaler. En milliard muligheter gitt at jeg ikke med sikkerhet har funnet hvor halvdesimalen havner
Derfor ble en brute force skanner med valgfri desimaler og regel om bitdybde laget. Følgende er resultat fra denne testen med 4 desimaler og maks 24-bit:
SoX -v [FACTOR]: 1.0000000000 0 dB Bit-depth: 16 [16/16 16/16 16/16]
SoX -v [FACTOR]: .9375000000 -.5602 dB Bit-depth: 20 [20/20 20/20 20/20]
SoX -v [FACTOR]: .8750000000 -1.1596 dB Bit-depth: 19 [19/19 19/19 19/19]
SoX -v [FACTOR]: .8125000000 -1.8032 dB Bit-depth: 20 [20/20 20/20 20/20]
SoX -v [FACTOR]: .7500000000 -2.4981 dB Bit-depth: 18 [18/18 18/18 18/18]
SoX -v [FACTOR]: .6875000000 -3.2538 dB Bit-depth: 20 [20/20 20/20 20/20]
SoX -v [FACTOR]: .6250000000 -4.0825 dB Bit-depth: 19 [19/19 19/19 19/19]
SoX -v [FACTOR]: .5625000000 -4.9971 dB Bit-depth: 19 [19/20 19/20 19/20]
SoX -v [FACTOR]: .5000000000 -6.0204 dB Bit-depth: 16 [16/17 16/17 16/17]
Vi behøver kun finne treff innenfor første bit (-6.0206dB) da resten vil repetere.
Før inn -v [FACTOR] fra hvilken som helst av disse treffene i scriptet over og få at alle nomilenne dB resultatene med samme krav til bit dybde. Her vist for [FACTOR] 0.75 som behøver 18-bit:
Divide each factor by 2 in 15 steps
---------------------------------------------------------------------------
SoX -v [FACTOR]: .75 -2.4981 dB Bit-depth: 18 [18/18 18/18 18/18]
SoX -v [FACTOR]: .3750000000 -8.5194 dB Bit-depth: 18 [18/19 18/19 18/19]
SoX -v [FACTOR]: .1875000000 -14.5398 dB Bit-depth: 18 [18/20 18/20 18/20]
SoX -v [FACTOR]: .0937500000 -20.5611 dB Bit-depth: 18 [18/21 18/21 18/21]
SoX -v [FACTOR]: .0468750000 -26.5815 dB Bit-depth: 18 [18/22 18/22 18/22]
SoX -v [FACTOR]: .0234375000 -32.6028 dB Bit-depth: 18 [18/23 18/23 18/23]
SoX -v [FACTOR]: .0117187500 -38.6232 dB Bit-depth: 18 [18/24 18/24 18/24]
SoX -v [FACTOR]: .0058593750 -44.6445 dB Bit-depth: 18 [18/25 18/25 18/25]
SoX -v [FACTOR]: .0029296875 -50.6649 dB Bit-depth: 18 [18/26 18/26 18/26]
SoX -v [FACTOR]: .0014648437 -56.6862 dB Bit-depth: 18 [18/27 18/27 18/27]
SoX -v [FACTOR]: .0007324218 -62.7066 dB Bit-depth: 18 [18/28 18/28 18/28]
SoX -v [FACTOR]: .0003662109 -68.7279 dB Bit-depth: 18 [18/29 18/29 18/29]
SoX -v [FACTOR]: .0001831054 -74.7483 dB Bit-depth: 18 [18/30 18/30 18/30]
SoX -v [FACTOR]: .0000915527 -80.7687 dB Bit-depth: 18 [18/31 18/31 18/31]
SoX -v [FACTOR]: .0000457763 -86.7900 dB Bit-depth: 18 [18/32 18/32 18/32]
SoX -v [FACTOR]: .0000228881 -92.8104 dB Bit-depth: 17 [17/32 17/32 17/32]