thierryvalk a écrit :Bon la phase en FIR c'est OK, mais avec l'ancien système, donc après conversion en amplitude et phase.
Donc actuellement je suis incapable de mettre un délai directement sur les complexes.
c'est vrai qu'ici on tente de répondre aux questions.
Quand on comprend pas, faut reformuler.
Tout ce qu'on fait c'est toujours multliplier des complexes entre eux.
Ce sont toujours des résultats d'une fonctions de transfert, (sauf ceux issus de la FFT ou d'une mesure)
- Un biquad c'est une fonction un peu compliquée qui nécessite 6 lignes de code pour trouver sa valeur complexe
- Inverser la phase c'est aussi une fonction de transfert toute simple qui fait * -1. cad * (-1,0) partout.
ce qui est (cos(180), sin(180))- appliquer un gain c'est aussi une fonction de transfert toute simple qui fait * A. (avec A = 10^(G/20)). Ce serait * (A,0) partout.
- appliquer un délai c'est une fonction de transfert qui a pour résultat (cos(phi), -sin(phi)) avec w = 2.Pi.f.T (avec T en secondes)
Voici mon code vba pour appliquer les trois choses qui dépendent de la voie (Gain, inv phase, délai).
Je cumule les trois paramètres dans une seule fonction. Le nb complexe retourné par la fonction VH correspond dans ton cas à ce qu'il faut multiplier dans la case de la frequence Freq de ton tableau.
Dans ton tableau tu accumule HFFT * Hfiltre1 * H filtre2 * .... * HFiltreN * VH
Code : Tout sélectionner
Function VH(Freq, Fs, Sp, Gain As Double, Inv As Boolean) As String
' Ajoute l'effet des parametres sur la Voie: gain, inversion, délai
' Freq is frequency in Hz
' Fs is sampling frequency in Hz
' Sp is number of samples
' Gain is the gain in dB. on ne cumule pas avec celui du PEQ ou LowShelve ou HighShleve
' Inv is True if invert phase is checked
' returns complex
Dim Phi, A As Double
Dim PI As Double
PI = WorksheetFunction.PI()
' initialisation
VH = 1
' applique le déphasage du delai
If Sp <> 0 Then
Phi = 2 * PI * Freq / Fs * Sp
VH = WorksheetFunction.Complex(Cos(Phi), -Sin(Phi))
End If
' applique le gain
If Gain <> 0 Then
A = 10 ^ (Gain / 20)
VH = WorksheetFunction.ImProduct(LineH, A)
End If
' inverse si coché
If Inv Then
VH = WorksheetFunction.ImProduct(LineH, -1)
End If
' vba uses the dot as decimal separator on my system, where excel expects a comma
VH = Replace(LineH, ".", ",")
End Function