Bonjour à tous,

Je vous explique mon problème :

J'ai accès à la réponse fréquentielle d'un système.
Ce système à idéalement une réponse fréquentielle bien déterminé, cependant en pratique ce n'est pas le cas.
Afin de "corriger" cette réponse, je dois appliquer un filtre à un signal d'entrée afin d'obtenir en sortie la réponse voulue idéalement.
Pour cela il faut donc le filtre inverse de ce système.
J'ai donc tenter de résoudre ce problème, voici mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
 
%la réponse étant exprimée en dB, j'aimerais travailler en amplitude
inv_filter = 10.^(resultfft/20);
resp_system = 10 .^(sample6(:, 2)/20);
 
%j'essaye ensuite de symétriser les spectre afin de pouvoir passer dans le monde temporel
inv_sym_filter = [inv_filter conj(inv_filter(end-1:-1:2))];
inv_sym_signal = [resp_system(:)' conj(resp_system(end-1:-1:2)') ];
 
%j'applique ensuite la transformée inverse.
ifft_inv_sym_filter = ifft(inv_sym_filter);
ifft_inv_signal = ifft(inv_sym_signal);
 
%pour finir, je convolue en temporel
tpl_res = conv(real(ifft_inv_signal), real(ifft_inv_sym_filter),  'same');
Alors j'ai remarqué plusieurs problèmes :

  • mes variables ifft_inv_sym_filter et ifft_inv_signal on des parties imaginaires non nulles et même parfois non négligeable (ordre de 0.02)
    ces mêmes variables ont également parfois une valeur réelle négative
    le résultat de ma convolution en temporel m'amène des valeurs négatives (alors que je travaille en amplitude)
    La réponse temporel tourne autour du 0 avec une énorme pic au milieu de mes points.



Voilà je pense donc que soit je n'ai pas bien compris un concept théorique, ou alors que je ne réalise pas bien la transformée de fourrier inverse.

Quelqu'un voit-il donc mon problème ?
Si vous n'avez pas suffisamment d'information, ou que vous souhaitez les échantillons pour tester, ou que je me suis mal exprimé sur ce problème, n'hésitez pas à me poser des questions

D'avance je vous en remercie