Calculs audio numérique pour les nuls

Discutions générales sur le DSPiy et tout ce qui s'y rattache
Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3519
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Calculs audio numérique pour les nuls

Messagepar thierryvalk » lun. 22 févr. 2016 19:59

Ça c'est la version sans complexes et qui fonctionne actuellement chez tout le monde. :langue2:
J'ai même pas de gestion des Complexes en Net2. :(
Je viens de rajouter ceci :http://codes-sources.commentcamarche.net/source/38027-complexes

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: Calculs audio numérique pour les nuls

Messagepar alka » lun. 22 févr. 2016 20:13

thierryvalk a écrit :Ça c'est la version sans complexes et qui fonctionne actuellement chez tout le monde. :langue2:
J'ai même pas de gestion des Complexes en Net2. :(

j'ai seulement dit suspect... T'as du t'arracher les yeux pour écrire un truc pareil ! ::d

toujours pas passé a une version récente de .net ?
avec ton ajout t'as tout ce qu'il faut pour les manipuler dans tous les sens. Je t'avais bien dit que ça pullule sur le net :)
acheter un DSPiy ? c'est ici

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3519
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Calculs audio numérique pour les nuls

Messagepar thierryvalk » lun. 22 févr. 2016 20:22

bon en traduisant +- ton code qui n'en est pas ...

Code : Tout sélectionner

= 2 * f / fs;
            double w = Math.PI * f;

            Complexe Zb = new Complexe(Math.Cos(w),-Math.Sin(w));
            Complexe zb2 = zb2*zb2;
            Complexe Hnum = (b0+(b1*zb2))+(b2*zb2);
            Complexe Hdenom = (1+(a1*zb2)+(a2*zb2));
            Complexe H = Hnum/hdemon;
            double  Amplitude = 20 * Math.Log(H.Module);
            double Phase = 180/Math.PI*H.Argument; 

Mais ça coince car si zb2 est un complexe il ne peut être multiplié par un double (float).
cos(w) c'est partie réelle et -sin(w) l'imaginaire de zb ?

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: Calculs audio numérique pour les nuls

Messagepar alka » lun. 22 févr. 2016 20:29

thierryvalk a écrit :Mais ça coince car si zb2 est un complexe il ne peut être multiplié par un double (float).

multiplier par un réel devrait etre autorisé. sinon tu peux déclarer n'importe que réel a comme le complexe (a,0)
un peu lourd mais bon... c'est c# :hehe:

cos(w) c'est partie réelle et -sin(w) l'imaginaire de zb ?
t'as lu ce que j'ai écrit vendredi.... :snif:
oui

et avant que tu demandes pourquoi choisir ce nom zb :
c'est z_barre le conjugué de z (qui est aussi l'inverse). z est le classique cos(w) + i sin(w)
zb^2 c'est pareil que z^-2
acheter un DSPiy ? c'est ici

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: Calculs audio numérique pour les nuls

Messagepar alka » lun. 22 févr. 2016 20:31

thierryvalk a écrit :bon en traduisant +- ton code qui n'en ait pas ...
            Complexe Hdenom = (1+(a1*zb2)+(a2*zb2));
            Complexe H = Hnum/hdemon;

:diable:
acheter un DSPiy ? c'est ici

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3519
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Calculs audio numérique pour les nuls

Messagepar thierryvalk » lun. 22 févr. 2016 20:33

t'as lu ce que j'ai écrit vendredi.... :snif:

10x même, mais je fais mon Alain par moment. :hehe:

Bon je passe les coef en complexe avec 0 en imaginaire.

Edit : Erreur 6 Le nom 'hdemon' n'existe pas dans le contexte actuel C:\Users\T440S\Documents\Visual Studio 2005\Projects\crossover mesure\loader1\_Calcul_courbe.cs 179 31 DSPiyStudio

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: Calculs audio numérique pour les nuls

Messagepar alka » lun. 22 févr. 2016 20:44

plus rapide que le compilateur ;)

t'as de la chance parce que dans ce cas la, excel dit juste "valeur non définie" et il surligne la ligne ou ca se passe, ou une a coté. Meme pas le nom de la variable non déclarée dans le message d'erreur.
acheter un DSPiy ? c'est ici

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3519
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Calculs audio numérique pour les nuls

Messagepar thierryvalk » lun. 22 févr. 2016 20:48

Bon voici le code, mais marche pas, j'ai un semblant de courbe mais sans plus.

Code : Tout sélectionner


fresponse frp 
= new fresponse();

            
Complexe a1 = new Complexe(s.a10);
            
Complexe a2 = new Complexe(s.a20);
            
Complexe b0 = new Complexe(s.b00);
            
Complexe b1 = new Complexe(s.b10);
            
Complexe b2 = new Complexe(s.b20);
            
Complexe c = new Complexe(10);
            
            
fs;
            
double w Math.PI f;

            
Complexe Zb = new Complexe(Math.Cos(w),-Math.Sin(w));
            
Complexe zb2 Zb Zb;
            
Complexe Hnum = (b0+(b1*zb2))+(b2*zb2);
            
Complexe Hdenom = (c+(a1*zb2)+(a2*zb2));
            
Complexe H Hnum Hdenom;
            
double Amplitude 20 Math.Log(H.Module);
            
double Phase 180/Math.PI*H.Argument;

            
frp.phase Phase;
            
frp.magnitude Amplitude;

            return 
frp;
 

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: Calculs audio numérique pour les nuls

Messagepar alka » lun. 22 févr. 2016 20:49

log10 ?

f c'est bien un double aussi ?

ps: la formule est fausse... c'est
Hnum = ImSum(b0, ImProduct(b1, Zb), ImProduct(b2, Zb2))
Hdenom = ImSum(1, ImProduct(a1, Zb), ImProduct(a2, Zb2))

pas toujours zb2
acheter un DSPiy ? c'est ici

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3519
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Calculs audio numérique pour les nuls

Messagepar thierryvalk » lun. 22 févr. 2016 21:02

Ah oui, avec la bonne formule c'est nettement mieux. :super:

(tes noms sont nuls, lorsque l'on écrit l'éditeur propose un nom et pas toujours le bon :rougefaché: ).

C'est tout pour aujourd'hui, grand merci.

Et le code corrigé et nettoyé :

Code : Tout sélectionner


 fresponse frp 
= new fresponse();

            
Complexe a1 = new Complexe(s.a10);
            
Complexe a2 = new Complexe(s.a20);
            
Complexe b0 = new Complexe(s.b00);
            
Complexe b1 = new Complexe(s.b10);
            
Complexe b2 = new Complexe(s.b20);
            
Complexe c = new Complexe(10);
            
            
fs;
            
double w Math.PI f;

            
Complexe z = new Complexe(Math.Cos(w),-Math.Sin(w));
            
Complexe zb z;
            
Complexe Hnum b0 b1 b2 zb;
            
Complexe Hdenom a1 a2 zb;
            
Complexe H Hnum Hdenom;
            
double Amplitude 20 Math.Log(H.Module);
            
double Phase 180/Math.PI*H.Argument;

            
frp.phase Phase;
            
frp.magnitude Amplitude;

            return 
frp;
 

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3519
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Calculs audio numérique pour les nuls

Messagepar thierryvalk » mar. 23 févr. 2016 12:27

Si j'ai bien compris la suite.
Je passe l'Impulse de la mesure par la FFT qui me retourne un tableau de de longueur de la FFT/2 en complexes.
Je crée un tableau de réponse en fréquence complexe et y met les complexes en fonction des fréquences que je désire selon la résolution voulue en appliquant x = Math.Pow(2, (double)i / 48); jusqu'à 20KHz pour x. Dans l'exemple de la formule j'aurais du 1/48 d'octave.
Pour chaque x je calcule la réponse du biquad qui me retourne H que je multiplie à la position de l'index du tableau et sauvegarde dans ce même tableau.
Je fais de même pour tous les biquads concernés.

Au final j'extrait Amplitude et Phase du tableau pour créer mes courbes.

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: Calculs audio numérique pour les nuls

Messagepar alka » mar. 23 févr. 2016 13:17

Si j'ai bien compris la suite.
Je passe l'Impulse de la mesure par la FFT qui me retourne un tableau de de longueur de la FFT/2 en complexes. oui

Je crée un tableau de réponse en fréquence complexe et y met les complexes en fonction des fréquences que je désire selon la résolution voulue en appliquant x = Math.Pow(2, (double)i / 48); jusqu'à 20KHz pour x. Dans l'exemple de la formule j'aurais du 1/48 d'octave.oui pour le principe, formule corrigée ci-dessous en (1)

Pour chaque x je calcule la réponse du biquad qui me retourne H que je multiplie à la position de l'index du tableau et sauvegarde dans ce même tableau.oui c'est une manière qui marche avec la remarque (2)

Je fais de même pour tous les biquads concernés.oui, ce qui les multiplie entre eux et applique toutes leurs corrections a la mesure source

Au final j'extrait Amplitude et Phase du tableau pour créer mes courbes.oui


(1)la formule pour la fréquence x d'indice i pour 1/48 d'octave c'est xi = f0 * 2^(i/48)
avec f0 la freq de départ. Tu partiras probablement de 10Hz ou 20Hz pas de 1Hz.

(2)cumuler les calculs dans le même tableau c'est pas forcément cool si tu veux enable/disabler ou modifier un des filtres à la volée (fréquent en simulation).
Ca peut etre intéressant de stocker la FFT de la mesure dans une table appelée Hmesure et celui de chaque filtre séparément dans une table complexe Hn.
La table Résulltat = Hmesure * H1 * H2 *... * Hn
Si un des filtres est désactivé, juste le sortir de la multiplication (ou le remplacer par 1) au lieu de devoir tout recalculer.
Ca consomme plus de mémoire : compromis habituel utilisation de la mémoire vs temps de calcul. A toi de voir selon les performances obtenues.
acheter un DSPiy ? c'est ici

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3519
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Calculs audio numérique pour les nuls

Messagepar thierryvalk » mar. 23 févr. 2016 13:38

Je sais pour f0, pas une erreur, je commence bien à 1Hz donc j'ai pas mis le 1. (c'est pour le MFB de Philby :mrgreen: )
En fait après tests c'est le plus simple et efficace.

Pour la vitesse de traitement, c'est le dessin de la courbe qui est le plus lent et le plus simple est de tout recalculer.
Je compte juste pour stocker le résultat de la FFT.
Le compromis, c'est surtout d'avoir la courbe qui correspond bien au fichier .apd des biquads, expérience des premières versions de DStudio où ce n'était pas le cas et compliqué à debugger.

Avatar de l’utilisateur
philby
Messages : 325
Enregistré le : ven. 10 juil. 2015 12:28
Localisation : Gironde France
Contact :

Re: Calculs audio numérique pour les nuls

Messagepar philby » mar. 23 févr. 2016 13:42

On me cite dans un fil où je ne comprends rien de rien...Je suis inquiet!!! :pleur4: :pleur4: :pleur4:

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: Calculs audio numérique pour les nuls

Messagepar alka » mar. 23 févr. 2016 14:33

thierryvalk a écrit :Je sais pour f0, pas une erreur, je commence bien à 1Hz donc j'ai pas mis le 1. (c'est pour le MFB de Philby :mrgreen: )
En fait après tests c'est le plus simple et efficace.
faut savoir que les calculs sont très faux quand on s'approche de 0Hz (tout comme quand on s'approche de Fs/2). Pour ce qui est <10Hz, je m'y fierai pas trop et n'afficherai pas.
acheter un DSPiy ? c'est ici

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: Calculs audio numérique pour les nuls

Messagepar alka » mar. 23 févr. 2016 14:37

thierryvalk a écrit :Le compromis, c'est surtout d'avoir la courbe qui correspond bien au fichier .apd des biquads, expérience des premières versions de DStudio où ce n'était pas le cas et compliqué à debugger.
Y a pas photo pour la maintenabilité rien qu'a voir le deuxième code face au premier. Et la phase est enfin facilement accessible :)
acheter un DSPiy ? c'est ici

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3519
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Calculs audio numérique pour les nuls

Messagepar thierryvalk » mar. 23 févr. 2016 17:43

Question.
Si je désire une réponse en fréquence de x biquads mais sans l'appliquer à une courbe d'une mesure.
J'initialise comment ma table de complexes ? (1,0) ?
Ne pas dire avec premier biquad.

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: Calculs audio numérique pour les nuls

Messagepar alka » mar. 23 févr. 2016 17:53

alka a écrit :
thierryvalk a écrit :Je sais pour f0, pas une erreur, je commence bien à 1Hz donc j'ai pas mis le 1. (c'est pour le MFB de Philby :mrgreen: )
En fait après tests c'est le plus simple et efficace.
faut savoir que les calculs sont très faux quand on s'approche de 0Hz (tout comme quand on s'approche de Fs/2). Pour ce qui est <10Hz, je m'y fierai pas trop et n'afficherait pas.
Par curiosité, je viens de regarder la différence au 1/48eme en partant de 1Hz, ou de 10Hz.

avec f0=1Hz il faut 686 valeurs pour atteindre 20k dont 159 valeurs en dessous de 10Hz. 23% de calculs pour des freq dont on se fiche c'est significatif(surtout que le calcul est sans doute très faux pour la plus grande partie) .

avec f0=10Hz, il faut 527 valeurs pour atteindre 20k.

La sélection logarithmique des freq fait qu'il y a autant de fréquences dans la table entre 1 et 10Hz qu'il y en a entre 10 et 100Hz.
Le choix de la freq de départ n'est pas si neutre.
acheter un DSPiy ? c'est ici


Retourner vers « DSPiy général »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 8 invités