Wave file volume berekenen in decibel

Pagina: 1
Acties:
  • 389 views sinds 30-01-2008

Acties:
  • 0 Henk 'm!

Anoniem: 25556

Topicstarter
Eingelijk een eenvoudige vraag, maar het antwoord laat zich maar niet vinden.

Hoe bereken je het volume van een .wav file in decibel?

Ik kom steeds twee verschillende berekeningen tegen:

volume=10log(v1/v2)

en

volume=20log(v1/v2)

Nu heb ik in verscheidene threads op deja gezien dat men beweert dat je de laatste moet hebben. Dat is diegene die ook voor voltages gebruikt wordt, en de waarde in een .wav staat min of meer voor het voltage.

Mijn baas echter zegt dat het 10log(v1/v2) moet zijn. Een echte onderbouwing had hij daar niet voor, maar het is wel iemand die er verstand van heeft.

Ik heb ook al 2 open-source pakketten kunnen vinden die iets met decibel doen, en jawel hoor, de ene gebruikt 10log(v1/v2) en de ander 20log(v1/v2).

Dus... ik open een 16 bit, 2 channel, 44100Hz PCM wave file. Ik seek naar het data chunk, lees de size uit, en ga dan de data lezen. Ik neem 2x16 bit waardes (channel1 en channel2) en neem daar het gemiddelde van. Aangezien het signed 16 bit integers zijn, loopt de mogelijke waarde van ca -32k tot +32k. Om altijd ene positieve waarde te houden, neem ik de absolute waarde.

Stel nu komt hier 16k uit. Hoeveel dB is dat dan?

De berekeningen:

volume = 10log(16000/32768) ~ -3,11 dB

of

volume = 20log(16000/32768) ~ -6,22 dB

Nu zou ik op basis van dit resultaat zelf zeggen dat het 10log moet zijn, aangezien een -3 dB ongeveer een halvering van het geluid is, en 16k ongeveer de helft is van 32k. Maar dat is louter boerenverstand, ik kan hier nergens een onderbouwing voor vinden.

Acties:
  • 0 Henk 'm!

Anoniem: 79852

Misschien heb je iets aan puur natuurkundige benadering:

http://www.circuitsonline.net/artikelen/view/3/3

Acties:
  • 0 Henk 'm!

Anoniem: 25556

Topicstarter
Als ik daar kijk, zie ik dezelfde formules voor voltages.

Volgens Goldwave heb ik gelijk en is het 20log(v1/v2).. maar ja, misschien doet die het fout.

Acties:
  • 0 Henk 'm!

  • mr_petit
  • Registratie: Oktober 2001
  • Laatst online: 21:48

mr_petit

opperprutser

Voor zowel spanning als druk heb je 20log(x/x0) nodig.
De reden dat een 'verdubbeling van het geluid' een toename van 3dB is komt doordat het niet een echte verdubbeling is, maar een RMS gemiddelde.
geluiddrukken (of spanningen) van 2 verschillende signalen tel je op de volgende manier op:
(Ptot)^2=(P1)^2+(P2)^2
Als de 2 signalen exact hetzelfde zijn heb je wel degelijk een toename van 6 dB (bijvoorbeeld op de plaats van een buik in het buiken en knopen experiment met 2 luidsprekers die een sinustoon uitzenden)

voor vermogens en intensiteiten gebruik je wel 10log(x/x0)

eigenlijk is het 2*10log(v/v0); de factor 2 komt afaik uit P=V^2/R

[ Voor 18% gewijzigd door mr_petit op 13-05-2005 00:57 ]

"man is not truly one, but truly two,"


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

Berekenen we nu de versterking in dB's, dan komen we op de volgende formule:

10 log (P1 / P2) = 10 log 600 / 6 = 10 log 100 = 20 dB

Berekenen we nu de spanningsversterking in dB's, dan komen we op:

20 log (U1 / U2) = 20 log 600 / 60 = 20 log 10 = 20 dB
Ik denk dat het verschil puur in dat ene woord zit. Wat nou dan precies het verschil is tussen versterking en spanningsversterking weet ik niet, maar ik kan me wel indenken dat zulke termen verwarrend zijn. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Anoniem: 25556

Topicstarter
mr_petit schreef op vrijdag 13 mei 2005 @ 00:50:
Voor zowel spanning als druk heb je 20log(x/x0) nodig.
voor vermogens en intensiteiten gebruik je wel 10log(x/x0)
Dan blijft dus de vraag wat er in een wav file zit.. en welke berekening ik dus moet toepassen :P

Acties:
  • 0 Henk 'm!

  • mr_petit
  • Registratie: Oktober 2001
  • Laatst online: 21:48

mr_petit

opperprutser

het lijkt mij dat de waardes in een wav naar spanning omgezet worden.

als maximaal dB bereik krijg je dan 20log((2^16)/1)=96dB

(of in jouw voorbeeld 20log(1/(2^16))=-96dB)

[ Voor 16% gewijzigd door mr_petit op 13-05-2005 01:50 ]

"man is not truly one, but truly two,"


Acties:
  • 0 Henk 'm!

  • Cuball
  • Registratie: Mei 2002
  • Laatst online: 12-06 12:16
ene formule komt uit de andere:

10 log (P1 / P2) = 10 log ( (U1²/R1) /(U2²/R2) ) = 10 log ((U1/U2)²) = 20 log (U1/U2)

"Live as if you were to die tomorrow. Learn as if you were to live forever"


Acties:
  • 0 Henk 'm!

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 03-06 09:24
Misschien hele domme opmerking, maar is het aantal dB niet meer afhankelijk van het volume van de boxen dan van het .wav bestandje?

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


Acties:
  • 0 Henk 'm!

  • mr_petit
  • Registratie: Oktober 2001
  • Laatst online: 21:48

mr_petit

opperprutser

wel als je het geluiddrukniveau of geluidintensiteitniveau ter plaatse van je oren bekijkt, maar 'meer afhankelijk' bestaat in deze zin niet. dB is gewoon iets uitdrukken in een logaritmische schaal, en dat kan met alles wat een waarde heeft.

"man is not truly one, but truly two,"


Acties:
  • 0 Henk 'm!

  • D4Skunk
  • Registratie: Juni 2003
  • Laatst online: 11-02 14:30

D4Skunk

Kind of Blue

Anoniem: 25556 schreef op donderdag 12 mei 2005 @ 20:44:
Ik kom steeds twee verschillende berekeningen tegen:

volume=10log(v1/v2)

en

volume=20log(v1/v2)

Dus... ik open een 16 bit, 2 channel, 44100Hz PCM wave file. Ik seek naar het data chunk, lees de size uit, en ga dan de data lezen. Ik neem 2x16 bit waardes (channel1 en channel2) en neem daar het gemiddelde van. Aangezien het signed 16 bit integers zijn, loopt de mogelijke waarde van ca -32k tot +32k. Om altijd ene positieve waarde te houden, neem ik de absolute waarde.

Stel nu komt hier 16k uit. Hoeveel dB is dat dan?

De berekeningen:

volume = 10log(16000/32768) ~ -3,11 dB

of

volume = 20log(16000/32768) ~ -6,22 dB

Nu zou ik op basis van dit resultaat zelf zeggen dat het 10log moet zijn, aangezien een -3 dB ongeveer een halvering van het geluid is, en 16k ongeveer de helft is van 32k. Maar dat is louter boerenverstand, ik kan hier nergens een onderbouwing voor vinden.
Ik ben totaal niet op de hoogte v/d materie, ik spreek hier mijn gezond boerenverstand aan :
10log - > mono
20log - > stereo

Volgens mij mag je trouwens niet zomaar het gemiddelde v/d twee kanalen (links en rechts) nemen, want
10log((a+b)/2) <> (10log(a)+10log(b))/2
omg die schoolwiskunde zit ver...
is dit trouwens ook niet waar ?:
10log(a)/2 = 20log(a)


Wat mij het meest logische lijkt (again, boerenverstand :) ):
C#:
1
2
3
4
5
dbsum=0;
// sample.left en sample.right moeten genormaliseerd zijn ( max(sample)=1) )
foreach (Sample sample in samples)
   dbsum+=20log(abs(sample.Left))+20log(abs(sample.Right)))
dbsum/=samples.count;


'k heb der echter absoluut geen idee van :P

[ Voor 10% gewijzigd door D4Skunk op 13-05-2005 11:38 . Reden: en nog iets duidelijker ... ]


Acties:
  • 0 Henk 'm!

Anoniem: 25556

Topicstarter
D4Skunk schreef op vrijdag 13 mei 2005 @ 11:21:
Ik ben totaal niet op de hoogte v/d materie, ik spreek hier mijn gezond boerenverstand aan :
10log - > mono
20log - > stereo
Dit klopt iig niet, zo ver ben ik wel al :P
Volgens mij mag je trouwens niet zomaar het gemiddelde v/d twee kanalen (links en rechts) nemen, want
10log((a+b)/2) <> (10log(a)+10log(b))/2
Daar heb je dan weer wel gelijk in.. per kanaal dus, en dan middelen.

Ik ben er overigens nog steeds niet uit. Mij persoonlijk lijkt de 20log(v1/v2) functie goed. Dit baseer ik op het feit dat dit overeenkomt met Goldwave qua getallen en dat een 16 bit 44100 PCM wav idd een bereik heeft van 96dB. Verder klopt het ook met de hier geposte logica.

Ik heb echter nog geen vast argument. Zoals ik al aangaf is mijn baas wel iemand die er verstand van heeft, dus wil ik hem er van overtuigen dat het 20* moet zijn ipv 10*, moet ik wel met argumenten komen.

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 16:32

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 vindt het allemaal vrij natuurkundig enzo worden.

* gorgi_19 geeft het een klein duwtje richting Wetenschap & Levensbeschouwing

>> Wetenschap & Levensbeschouwing

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • D4Skunk
  • Registratie: Juni 2003
  • Laatst online: 11-02 14:30

D4Skunk

Kind of Blue

Anoniem: 25556 schreef op vrijdag 13 mei 2005 @ 11:35:
[...]

Ik heb echter nog geen vast argument. Zoals ik al aangaf is mijn baas wel iemand die er verstand van heeft, dus wil ik hem er van overtuigen dat het 20* moet zijn ipv 10*, moet ik wel met argumenten komen.
als 10log(a)/2=20log(a)
dan is (10log(a) + 10log(b))/2 = 20log(a)+20log(b)
en stereo geeft 2 samples ipv 1
En je argument is er 8)

Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Ik weet me van middelbare school natuurkunde te herinneren dat er twee mogelijkheden waren om de geluidsdruk door een speaker uit te rekenen, doordat je met het toegeleverde vermogen of met de toegeleverde spanning kon rekenen.
Aangezien log(x2) = 2 log(x), was de ene manier om het volume uit te rekenen 10*log(V/Vref) en de andere 20*log(P/Pref), omdat het vermogen kwadratisch in de spanning is. Waarschijnlijk vind hier iets soortgelijks plaats: het ligt eraan of de waarde in een spanning of een vermogen resulteert.

Edit: zoals overigens al door een aantal mensen gezegd, maar door de laatste paar replies leek het alsof het antwoord nog niet bekend was.

[ Voor 12% gewijzigd door Confusion op 13-05-2005 15:53 ]

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 06-06 08:54
riezebosch schreef op vrijdag 13 mei 2005 @ 09:16:
Misschien hele domme opmerking, maar is het aantal dB niet meer afhankelijk van het volume van de boxen dan van het .wav bestandje?
Nee. Het gaat hier om dynamisch bereik. Als je de boxen 10dB harder zet dan wordne ook de zachtste geluiden harder.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • caipirinha
  • Registratie: Mei 2004
  • Niet online

caipirinha

The boy from brazil

Als je over dBs praat begin je te definieren wat de verhouding is waar je over praat een dB is niets meer dan een verhouding van twee waarden.

spanning = dBV (of andere eenheden zoals dBµV)
vermogen = dBW (of andere eenheden zoals dBmW)
Audio gebruikt dBa wat in feite een rms (=effectieve) vermogensverhouding is.
(het verschil tussen die twee is een kwadraat vermogen is evenredig met spanning^2)

Een spanningsverhouding bereken je d.m.v. 20*log10(verhouding)
Een vermogensverhoudig bereken je d.m.v. 10*log10(verhouding)

Een wav file bevat (spannings) samples van bijvoorbeeld 16 bit, ergens moet gedefinieerd zijn wat het 0 dB niveau is, dat is de waarde ten opzichte waarvan je de overige waarden in de wav file in dBs gaat uitrekenen. Ik ken het WAV formaat niet maar het 0 dB niveau zal ongetwijfeld ergens vast liggen.

Het dynamisch bereik wordt bepaald door het aantal beschikbare bits, bij spanningsverhoudingen is dat 6,03dB per bit, een 16 bits geluidskaart of ad/converter heeft dus een theoretisch dynamisch bereik van 16*6.03 = ongeveer 96dB.

No self-respecting engineer should have to close a game to run a circuit simulation.


Acties:
  • 0 Henk 'm!

Anoniem: 25556

Topicstarter
caipirinha schreef op vrijdag 13 mei 2005 @ 18:26:
Een wav file bevat (spannings) samples van bijvoorbeeld 16 bit, ergens moet gedefinieerd zijn wat het 0 dB niveau is, dat is de waarde ten opzichte waarvan je de overige waarden in de wav file in dBs gaat uitrekenen.
Bij een 16 bit wav file wordt er gebruik gemaakt van een 16 bits signed integer. Die loopt van -32768 tot 32768, waarbij 0 dus de 0 waarde is.

Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 06-06 08:54
Anoniem: 25556 schreef op vrijdag 13 mei 2005 @ 19:57:
[...]
Bij een 16 bit wav file wordt er gebruik gemaakt van een 16 bits signed integer. Die loopt van -32768 tot 32768, waarbij 0 dus de 0 waarde is.
En? Hoe verschilt dat van de vorige post? Je hebt ook >twee samples per cyclus (Nyquist grens frequentie). De verhouding bits-naar-dB is nu eenmaal ~6 ( 10 * 10log(2) )

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

Anoniem: 25556

Topicstarter
Ik kan je even niet volgen MSalters.. mijn post was niet bedoeld als argument voor of tegen iets, louter ter invulling waarvan iemand zei dat hij het niet wist. Hij gaf aan niet te weten waar het nul-niveau ligt, dus geef ik dat aan. Niet meer en niets minder.

Wat bedoel je met 2 samples per cyclus en de Nyquist grens frequentie?

Ik heb 44100 samples per seconde. In een sample zitten alle kanalen, voor elk kanaal één waarde, in dit geval een 16 bit signed integer.

Om eerlijk te zijn, heb ik nog steeds geen zekerheid. Mijn baas is niet gek en als hij zegt 10log(v1/v2) moet er echt een argument komen waarom het 20log(v1/v2) moet zijn. Iemand postte hierboven een redenatie in de trant van 'stereo heeft 2 kanalen'; dit is geen bewijs. Stel ik wil voor één sample op één kanaal het volume in decibel weten.

Verder hoorde ik m'n baas wel iets zegen over het 'niet willen van RMS vermogen'.

[ Voor 32% gewijzigd door Anoniem: 25556 op 15-05-2005 00:36 ]


Acties:
  • 0 Henk 'm!

  • Henk007
  • Registratie: December 2003
  • Laatst online: 06-04 00:29
Zelf ben ik geen developer, maar ik denk dat het nuttig is om de sources van WaveGain te bestuderen, vooral gain_analysis.c
Daar zie je dat het niet helemaal zo simpel is, als je het in de startpost voorstelt.
Je kunt het vinden op RareWares
Stel ik wil voor één sample op één kanaal het volume in decibel weten.
Dat is dus ongedefinieerd.
Verder hoorde ik m'n baas wel iets zegen over het 'niet willen van RMS vermogen
Waarvoor moet het worden gebruikt? Waarvoor wil je die dB waarden gaan gebruiken ?
Immers dB waarden hebben geen directe relatie met de waargenomen geluidsdruk, daarvoor heb je nog een sensitivity curve ofwel equal loudness filter van het menselijk gehoor nodig.
Zie ook audio definities , decibel scales , ReplayGain

Onder de links vind je ook de oplossing voor het probleem:
We can understand the origin of the factor of 2 difference in the multipliers for the definitions of SPL and SIL using the square relation between pressure amplitude and intensity and our rules for logarithms. Lets begin with the SPL definition but lets write 20 = 10 x 2.
Afbeeldingslocatie: http://physics.mtsu.edu/~wmr/log3eq6.gif
Het addertje zit hem dus in het kwadratisch verband tussen amplitude en druk, precies wat Confusion al eerder opmerkte ;)
De verschillende factoren voor mono en stereo zijn dus volstrekte larie. Veel interessanter wordt het trouwens als je de totale waargenomen geluidsdruk van zowel het linker- als het rechterkanaal wil berekenen...

[ Voor 99% gewijzigd door Henk007 op 15-05-2005 01:20 ]


Acties:
  • 0 Henk 'm!

  • mr_petit
  • Registratie: Oktober 2001
  • Laatst online: 21:48

mr_petit

opperprutser

Henk007 schreef op zondag 15 mei 2005 @ 00:46:
Het addertje zit hem dus in het kwadratisch verband tussen amplitude en druk, precies wat Confusion al eerder opmerkte ;)
De verschillende factoren voor mono en stereo zijn dus volstrekte larie. Veel interessanter wordt het trouwens als je de totale waargenomen geluidsdruk van zowel het linker- als het rechterkanaal wil berekenen...
niet het kwadratisch verband tussen amplitude en druk, maar tussen intensiteit en druk (eveneens vermogen en spanning)

de totaal waargenomen geluiddruk wordt berekend volgens Ptot^2=P1^2 + P2^2. (en dan dus 20log(Ptot/Pref)
het zijn ongecorroleerde bronnen. (hiervoor wordt dus vaak 10log(Ptot/Pref) gebruikt en Ptot=P1+P2. zelfde uitkomst (niet absoluut natuurlijk, maar wel in dB), en is dus eigenlijk fout (er wordt een herleiding overgeslagen). Zolang je het alleen in dB's houdt is er niets aan het handje, maar als er werkelijke (concrete) waardes in het spel komen (zoals hier het geval is) ga je het schip in.)

ik denk dat hezik eerst maar eens moet aangeven wat hij precies wil berekenen (wat de dB waarde moet vertellen.
het totale volume van een .wav is voor meerdere interpretaties vatbaar.(wil je de resultante van het signaal (zijn dus ook negatieve waardes; het blijft een digitalisatie van een trilling), of bijvoorbeeld het totale vermogensniveau wat een versterker uitvoert)

[ Voor 17% gewijzigd door mr_petit op 15-05-2005 02:57 ]

"man is not truly one, but truly two,"


Acties:
  • 0 Henk 'm!

  • Sgrovert
  • Registratie: Mei 2004
  • Laatst online: 14:21
Zoals al vaker gezegd is in dit topic:
de 10*log(p1/p2) gebruik je als je twee vermogens met elkaar vergelijkt.
de 20*log(v1/v2) gebruik je als je twee spanningen met elkaar vergelijkt.

Aangezien in een Wav dus alleen de spanning op elk moment geregistreerd staat gebruik je bij het vergelijken van twee waarden dus de 20*log.
Dat het niet de 10 log moet zijn is omdat je niks van vermogen weet. Je hebt een signaal, maar weet niks van stroomsterkte. Hierdoor kun je op geen enkel moment een zinnige waarde voor het vermogen geven.


Om even terug op je vraag uit de startpost te komen:
Dus... ik open een 16 bit, 2 channel, 44100Hz PCM wave file. Ik seek naar het data chunk, lees de size uit, en ga dan de data lezen. Ik neem 2x16 bit waardes (channel1 en channel2) en neem daar het gemiddelde van. Aangezien het signed 16 bit integers zijn, loopt de mogelijke waarde van ca -32k tot +32k. Om altijd ene positieve waarde te houden, neem ik de absolute waarde.

Stel nu komt hier 16k uit. Hoeveel dB is dat dan?

De berekeningen:

volume = 10log(16000/32768) ~ -3,11 dB

of

volume = 20log(16000/32768) ~ -6,22 dB

Nu zou ik op basis van dit resultaat zelf zeggen dat het 10log moet zijn, aangezien een -3 dB ongeveer een halvering van het geluid is, en 16k ongeveer de helft is van 32k. Maar dat is louter boerenverstand, ik kan hier nergens een onderbouwing voor vinden.
Wat jij hier probeerd te doen gaat niet. Je gaat V1 met V2 vergelijken terwijl V2 = 0.
Wat je wel kan doen is om het signaal te vergelijken met de Spanning die de least significant bit voorsteld.
Als je dan op waarde 16k kijkt, hier is de gerepresenteerde spanning 16000x groter dan de spanning die de LSB representeerd.
Hierbij kan je dan zeggen dat hij 20*log(16000)= 84 db is. Op het moment schiet me helaas de precieze naam even niet te binnen. (is het ook een beejt elaat voor)


Wat dus belangrijk is, is dat je bij wave-forms 2 waarden met elkaar vergelijkt. Deze waarden representeren in principe spanningen, en daarom gebruik je de 20log.

Lost In Music


Acties:
  • 0 Henk 'm!

  • caipirinha
  • Registratie: Mei 2004
  • Niet online

caipirinha

The boy from brazil

Anoniem: 25556 schreef op vrijdag 13 mei 2005 @ 19:57:
[...]Bij een 16 bit wav file wordt er gebruik gemaakt van een 16 bits signed integer. Die loopt van -32768 tot 32768, waarbij 0 dus de 0 waarde is.
Die 0 is geen 0dB maar ongedefinieerd (log iets/0 of log 0/iets kan niet).
Er moet ergens een afgesproken referentiewaarde zijn. Sgrovert geeft aan het lsb te gebruiken, dat kan maar in principe kun je elke willekeurige bitcombinatie (behalve alles 0) gebruiken.

Verder is het piek en rms vermogen van één sample gelijk, rms wordt pas zinnig als je meerdere samples hebt of meerdere bronnen zoals een linker en rechter kanaal.kanaal.
Sgrovert schreef op zondag 15 mei 2005 @ 03:19:
Dat het niet de 10 log moet zijn is omdat je niks van vermogen weet. Je hebt een signaal, maar weet niks van stroomsterkte. Hierdoor kun je op geen enkel moment een zinnige waarde voor het vermogen geven.
Om een vermogensverhouding te berekenen heb je de absolute vermogens niet nodig dus ik kan best de rms waarde in dBW van een blok samples t.o.v. een ander blok berekenen (P blijft evenredig met E^2).

No self-respecting engineer should have to close a game to run a circuit simulation.


Acties:
  • 0 Henk 'm!

Anoniem: 25556

Topicstarter
caipirinha schreef op dinsdag 17 mei 2005 @ 00:10:
Die 0 is geen 0dB maar ongedefinieerd (log iets/0 of log 0/iets kan niet).
Dat weet ik, dat zeg ik ook nergens? Ik definieer 32k (de maximum waarde) als 0db, en geef alles daaronder als negatief op.

Wat ik nu doe is het volgende:

ik bereken hoeveel samples er in een wave zitten
ik stap hier met een stapgrootte van 1% doorheen. Bij elke stap neem ik de waardes van 10 samples, voor alle kanalen. Eventuele 0 waardes sluit ik hierbij uit, dan lees ik het eerstvolgende sample in.

over deze waardes bereken ik het gemiddelde en de standaarddeviatie.

Wat ik wil weergeven is een goede vraag waar ik zelf ook al op was gekomen :P.. in feite gewoon de VU meters op een mengtafel. De beoogde output is gewoon een line-out.

Acties:
  • 0 Henk 'm!

  • Sgrovert
  • Registratie: Mei 2004
  • Laatst online: 14:21
caipirinha schreef op dinsdag 17 mei 2005 @ 00:10:
Om een vermogensverhouding te berekenen heb je de absolute vermogens niet nodig dus ik kan best de rms waarde in dBW van een blok samples t.o.v. een ander blok berekenen (P blijft evenredig met E^2).
Dit snap ik niet helemaal.
Ik zie niet in hoe je een vermogen kan bepalen van een aantal elkaar opvolgende punten.
Je kan wel een "RMS-waarde" van een aantal opeenvolgende punten bepalen, en deze vergelijken (in dB), maar hoe bedoel jij nu dat deze een vermogen hebben?


@hezik

Je wilt dus op je pc de Vu meter van je menpaneel nabootsen. Daarbij wil je de waarde 32k als maximum ( 0dB ) definieren. Aannemende dat je wilt weergeven hoe hard je speakers spelen, kunnen de volgende dingen vastgesteld worden.
Als het vermogen dat je speakers te verwerken krijgen de helft is van het maximale vermogen, spelen ze 3 DB onder hun maximale vermogen.
Aangezien U=I*R geld, en P=U*I geldt ook P=U^2/R
Hierbij is R dus een constante voor het gemak 1 ohm te stellen.

Als we nu stellen dat waarde 32k binair overeenkomt met U=1V --> P=1
Komt 16k binair overeen met 0.5V --> P=0.25
Dit betekend dat je speaker nu 1/4 van zijn maximale vermogen toegevoerd krijgt, en dus op -6 dB zal spelen.

Hierom zul je in dit geval dus 20*log(binaire waarde/32k) moeten gebruiken. Daarbij komt dus -3 dB op je "vu-meter" overeen met een vermindering van 3 dB muziek volume.

Lost In Music


Acties:
  • 0 Henk 'm!

  • Henk007
  • Registratie: December 2003
  • Laatst online: 06-04 00:29
Anoniem: 25556 schreef op dinsdag 17 mei 2005 @ 00:37:
[...]
Wat ik nu doe is het volgende:

ik bereken hoeveel samples er in een wave zitten
ik stap hier met een stapgrootte van 1% doorheen. Bij elke stap neem ik de waardes van 10 samples, voor alle kanalen. Eventuele 0 waardes sluit ik hierbij uit, dan lees ik het eerstvolgende sample in.
over deze waardes bereken ik het gemiddelde en de standaarddeviatie
Ik wil je toch van harte aanraden om je wat verder in deze materie (lees digitale signaalverwerking) te verdiepen om zinnige resultaten te bereiken. Bovenstaande algoritme zal je niet verder helpen. Eenvoudig voorbeeld is een (fictieve) pcm stream van louter ffh waarden. Volgens jouw werkwijze hoort daar maximaal geluidsnivieau bij. In werkelijkheid zal het hoorbaar zijn als perfecte digitale stilte, (OK met een fikse DC component dan :P )
Bovendien zal je algoritme fors last hebben van aliasing effecten, met name voor frequenties die een veelvoud van je bemonsteringfrequentie zijn.

Acties:
  • 0 Henk 'm!

Anoniem: 25556

Topicstarter
Henk007 schreef op dinsdag 17 mei 2005 @ 15:25:
Ik wil je toch van harte aanraden om je wat verder in deze materie (lees digitale signaalverwerking) te verdiepen om zinnige resultaten te bereiken.
Dat was ik ook zeker van plan. Het probleem is een beetje dat hier lastig eenduidige info over te vinden is op inet, althans, ik kon het niet makkelijk vinden.
Bovenstaande algoritme zal je niet verder helpen. Eenvoudig voorbeeld is een (fictieve) pcm stream van louter ffh waarden. Volgens jouw werkwijze hoort daar maximaal geluidsnivieau bij. In werkelijkheid zal het hoorbaar zijn als perfecte digitale stilte, (OK met een fikse DC component dan :P )
Het hoeft niet 100% nauwkeurig te zijn. Streams van alleen ff waarden komen in deze situatie niet voor. Het gaat om een gemiddelde van een volume, en dat benader je vrij redelijk op deze manier, voor zover ik kan zien. De software die van dit algoritme gebruik maakt, doet momenteel ook precies wat de bedoeling is.

Acties:
  • 0 Henk 'm!

  • caipirinha
  • Registratie: Mei 2004
  • Niet online

caipirinha

The boy from brazil

Sgrovert schreef op dinsdag 17 mei 2005 @ 01:30:
[...]Dit snap ik niet helemaal.
Ik zie niet in hoe je een vermogen kan bepalen van een aantal elkaar opvolgende punten.
Je kan wel een "RMS-waarde" van een aantal opeenvolgende punten bepalen, en deze vergelijken (in dB), maar hoe bedoel jij nu dat deze een vermogen hebben?
Het vermogen kun je niet bepalen wel de vermogensverhoudingen rms-blok1 / rms-blok2, je moet voor de volledigheid wel aannemen dat de samples op dezelfde wijze in vermogen worden omgezet.
Volgens mij bedoelen we gewoon hetzelfde :)

No self-respecting engineer should have to close a game to run a circuit simulation.


Acties:
  • 0 Henk 'm!

  • Sgrovert
  • Registratie: Mei 2004
  • Laatst online: 14:21
Ik denk dat voor ,mij de "pijn" ligt in de manier waarop jij het woord vermogen gebruikt dan. Aannemende dat de rij waardes die in de wav opgeslagen liggen een spanning representeren, kun je daar wel een RMS-spanning van berekenen, maar weet je niks over vermogen. Vermogen is immers Effort * Flow. En aangezien een wav geen info over de flow bevat, kan je ook met geen zinnig woord over het vermogen van een wav spreken.

Lost In Music


Acties:
  • 0 Henk 'm!

  • Gertjan
  • Registratie: Oktober 2001
  • Laatst online: 09-06 20:05

Gertjan

mmmm, beer...

Interessant topic. Wij zijn met een project bezig waarin een Sony Aibo robot hond mee gaat doen aan een hardloop wedstrijd. Nou moet de aibo gaan rennen als hij een harde handklap hoord (aan de handvan een dbA meter kwamen we er achter dat dat +- 70dbA is).

Nou zijn we echter bezig met het maken van het bovenstaande en zitten met een probleem.
Het geluid dat we binnen krijgen is 16Khz PCM 16 bits signed (-32768 - 32768).

Nu willen we dus met de formule 20log(sample/32768) het aantal dbA uitrekenen en aan de hand daarvan bepalen of er een geluid is geweest met 70+ dbA.

Nou krijgen we echter van alle rare getallen van -0 tot -120dbA terwijl het erg rustig is en daarnaast werkt een log niet bij een negatief getal.

We beginnen uberhaupt te twijfelen of dbA wel de manier van meten en berekenen is of er een harde handklap is geweest.

We hebben al van alles geprobeerd inc googlen enz maar komen er dus echt niet uit. :(

Iemand een idee hoe we dat dan wel moeten oplossen of wat we fout doen?

Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 06-06 08:54
dbA is wel degelijk de goede maat. Probeer eens te bedenken hoe een zuivere 440Hz toon op 70dbA er uitziet.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

Anoniem: 150816

dB (deci-Bell) is een logaritmische (vermogens)verhouding:
10 * log(P1/P2), waarbij de "10" slaat op "deci", net als decimeter; puur schaling dus.

P1/P2 is een dimensieloos getal. P2 is een gekozen referentie. Bijvoorbeeld 1 mW.

De "20" is het gevolg van kwadrateren.

Immers elektrisch vermogen:
P = U * I (U = spanning, I = stroom) en U = I * R (R = weerstand), wet van Ohm.

Je kunt (ohms)vermogen dus uitdrukken in (meetbare)termen van stroom (I) of spanning (U):

P = I2 * R
P = U2 / R

Ga je uit van spanning, dan volgt uit de verhouding P1/P2 = U12 / U22 =(U1/U2)2.

ofwel: 10*log(P1/P2) = 10*log( (U1/U2)2 ) = 2 * 10*log(U1/U2) = 20*log(U1/U2).

Let wel, dat vermogen (energie) is alle fysische domeinen "aanwezig" is en niet alleen in het elektrische.

Het punt bij dB's is altijd de referentiewaarde, omdat er sprake is van een verhouding.

Er is een groot aantal achtervoegsels in zwang dat refereert naar de referentie:
dBm (1 mW) in 600 Ohm -> 775 mV
dBV (1 V)
dBFS (full-scale, digitaal)
dBA ...

Hoe nu in het digitale domein?
Hier heb je alleen maar "getallen" en is er geen sprake van vermogen, spanning, stroom, geluidsdruk ...
Het "nul"-niveau zou je als bij dBFS op de maximale waarde kunnen leggen (b.v. 215 bij twos-complement 16 bit). In de telefonie wordt vaak 0dBm0 gekozen (-3.14 dBFS) als referentie. Verder is het waarschijnlijker om met "20" te werken dan met "10" omdat de digitale representatie via D/A-conversie doorgaans correspondeert met een spanning en niet met vermogen. Een DAC geeft immers een gebufferde spanning af en het afgegeven vermogen wordt uiteindelijk bepaald door de belasting die eraan hangt (8 Ohm, 4 Ohm speaker).

Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Je kickt na twee maanden een draad met een verhaal dat niets toevoegt aan wat er al in de draad staat.

Wie trösten wir uns, die Mörder aller Mörder?

Pagina: 1

Dit topic is gesloten.