Bonjour,
Admettons que j'ai un filtre à réponse impulsionnelle infinie (coefficients "b" et "a"). Je souhaiterais filtrer un signal réel comme le fait la fonction "filter" de Matlab mais en passant par la FFT et l'IFFT. J'ai donc fait ça:
Et là le problème c'est que mon signal filtré "signalFiltre" est complexe, alors que j'aimerais un signal réel, comme mon signal de départ. La fonction "filter" me renvoie d'ailleurs un signal réel. Pourquoi ? Qu'est-ce que je fais de faux ?Code:NFFT = length(signal); TFsignal = fft(signal, NFFT); RepFreqFiltre = freqz(b,a,NFFT); TFsignalFiltre = TFsignal .* RepFreqFiltre; signalFiltre = ifft(TFsignalFiltre, NFFT);
Merci d'avance pour toute aide !
PS: Je trouve d'ailleurs "logique" que le signal soit complexe, puis la réponse fréquentielle de mon filtre "RepFreqFiltre" n'est pas symétrique par rapport à l'origine, donc je conçois bien qu'en multipliant la fft de mon signal "TFsignal" par "RepFreqFiltre" j'obtiens quelque chose de non-symétrique, et donc un signal filtré qui n'est pas réel. Mais du coup, comme se retrouver avec un signal réel quand la réponse fréq du filtre n'est pas symétrique?...
PS2: en mettant l'option "symmetric" à la dernière ligne:
j'obtiens du coup un signal réel, mais pas le même qu'avec "filter"... Et comme j'ai compris, l'option "symmetric" ignore la partie imaginaire, donc c'est pas la solution non plus....Code:signalFiltre = ifft(TFsignalFiltre, NFFT, 'symmetric');
-----