Calcul puissance acoustique

Calcul puissance acoustique - VB/VBA/VBS - Programmation

Marsh Posté le 20-02-2013 à 17:57:39    

Bonjour à tous,
 
Dans le cadre de mon travail je dois calculer un niveau de puissance acoustique. Cette puissance ce calcul de la façon suivante :
 
10 x Log ( Somme de 10 ^(Li/10))
 
Ou Li est ma puissance acoustique pour une bande de fréquence donnée. (250 Hz, 500 Hz ...)
 
J'aimerais pouvoir automatiser mon calcul pour mes 8 bandes de fréquence sans avoir à taper une formule à rallonge. Je n'ai pas trouvé de solution en utilisant les formules classiques du coup je voudrais passer par les macros. Voila ce que j'ai écris pour le moment mais sans succès :
 
Sub Lw()
 
Dim i As Integer
 
For i = 2 To 10
Range("B12" ).Formula = "=10 * Log(Sum(10 ^ (cell(6,i) / 10)))"
Next i
 
End Sub
 
Quelqu'un aurai une idée ?
 
En vous remerciant, bonne fin d'aprem à tous,
 
Egel

Reply

Marsh Posté le 20-02-2013 à 17:57:39   

Reply

Marsh Posté le 20-02-2013 à 19:20:31    

 
           Bonsoir !   Normalement cela devrait pouvoir se calculer sans l'aide du VBA …
 
           Pas sûr de bien comprendre ta formule, j'aimerais bien un lien sur une page détaillée avec un exemple …
 

Reply

Marsh Posté le 21-02-2013 à 08:28:46    

Bonjour,
 
Voici un lien qui explique un peu la formule : http://www.acouphile.fr/bases.html
 
La formule se situe en bas de page (avant dernier titre : niveau sonore global en dB et dBA)
 
Si il existe en effet une solution sans passer par le VBA, je suis preneur !
 
Bonne journée à tous

Reply

Marsh Posté le 21-02-2013 à 09:21:32    

 
          Bonjour et merci pour le lien !
 
          Hélas je reste encore un peu dans le brouillard, pourriez-vous expliquer un exemple et comment vous le calculez manuellement ?
 

Reply

Marsh Posté le 21-02-2013 à 09:58:35    

Bonjour,
 
En fait pour avoir un niveau de puissance acoustique global, il faut additionner les niveaux de puissance de chaque bande de fréquences.
 
Admettons que j'ai 3 bandes de fréquences différentes : 250Hz, 500Hz et 1000Hz
Et que j'ai un niveau de puissance pour chaque bandes qui vaut respectivement 53dB, 25dB et 46dB.
 
On note Lw le niveau de puissance global qui vaut : 10 x Log (10^(53/10)+10^(25/10)+10^(46/10)) = 53,8 dB
 
Si on note Li le niveau de puissance acoustique par bande, on obtient la formule donnée sur le site, c'est à dire 10 x Log (Somme (10^(Li/10))).
 
Mon problème est que parfois je peux avoir plus de 10 bandes de fréquence, ce qui veut dire que j'ai une formule à rallonge quand je calcul le Lw. J'aimerais qu'en une seule case je puisse faire le calcul du Lw.
 
J'espère que c’est compréhensible,
 
Bonne journée

Reply

Marsh Posté le 21-02-2013 à 10:56:03    

 
           Pour la formule directe, je ne vois pas trop à cause de la variabilité du nombre de fréquences …
 
           Par contre en VBA c'est facile !   Le code exposé part sur une procédure alors qu'une fonction est nécessaire …
 
           Voici donc la fonction Lw à insérer dans un module VBA normal :

Code :
  1. Function Lw(Rg As Range)
  2.          Application.Volatile
  3.          For Each Cel In Rg:  T = T + 10 ^ (Cel / 10):  Next
  4.          Lw = Round(10 * Log(T) / Log(10), 1)
  5. End Function


           Si les 53, 25 & 46dB sont dans les cellules B6 à D6, voici la formule à entrer dans une cellule :

     =Lw(B6:D6)

Reply

Marsh Posté le 21-02-2013 à 11:15:30    

Ca marche parfaitement, merci !
 
Peux-tu m'expliquer le code ? Que je comprenne ce que j'écris...
 
Merci beaucoup

Reply

Marsh Posté le 21-02-2013 à 11:31:48    

 
          Ne pas oublier l'aide intégrée de VBA ‼
 
          Sinon il n'y a pas grand chose à expliquer :
 
          - ligne n°1 :  Rg est la plage à traiter
 
          -            3 :  Boucle pour calculer T, la somme des Li;  Cel est une cellule de la plage
 
          -            4 :  Résultat à partir d'un logarithme népérien converti en base 10 puis arrondi à une décimale …
 

Reply

Marsh Posté le 21-02-2013 à 11:39:49    

Ok,  
 
J'ai modifié le code pour que la valeur ne soit pas arrondie.
 
Tout marche impec, merci beaucoup
 
A bientôt  ;)

Reply

Marsh Posté le 21-02-2013 à 14:16:20    

 
           En fait j'ai été quelque peu induit par le résultat de l'exemple …
 
           Sinon je me demande s'il n'y a quand même pas moyen d'éviter le VBA par un produit matriciel (ou quelque chose dans le genre)
           mais pour l'instant rien ne me revient;   au cas où, je posterais ici une autre approche …
 

Reply

Marsh Posté le 21-02-2013 à 14:16:20   

Reply

Marsh Posté le 24-02-2013 à 11:32:02    

 
           Rien de nouveau côté formule …
 
           Dans la fonction Lw, la ligne  Application.Volatile  n'est pas nécessaire dans ce cas …
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed