Je suis en train de mettre en œuvre un 32 points FFT - Equalizer - iFFTFFT Matlab -> Egaliseur -> iFFT
Sur une étape par étape. J'ai entré un signal de domaine temporel dans un bloc FFT, puis j'ai utilisé iFFT pour récupérer les données d'origine.
Naturellement après FFT, j'obtiens 32 points de données réelles et imaginaires symétriques.
J'ai essayé,
Étape 1:
fft_sig = fft(data_processing_block); %FFT of the signal
ifft_sig = ifft(fft_sig); %iFFT of the signal
La sortie correspond à l'entrée. Fonctionne comme un charme.
Étape 2:
fft_sig = fft(data_processing_block); %FFT of the signal
after_eq_re = real(fft_sig);
after_eq_im = imag(fft_sig);
after_eq = after_eq_re + (i*after_eq_im);
ifft_sig = ifft(after_eq); %iFFT of the signal
Cela fonctionne aussi très bien.
Étape 3:
fft_sig = fft(data_processing_block); %FFT of the signal
after_eq_re = real(fft_sig).*1.0; % Multiply Real data with a constant
after_eq_im = imag(fft_sig).*1.0; % Multiply Imag data with a constant
after_eq = after_eq_re + (i*after_eq_im);
ifft_sig = ifft(after_eq); %iFFT of the signal
Cela fonctionne aussi bien.
Etape 4:
I remplacé la constante (1.0) avec une table d'égaliseur. De taille 32.
Eq_data_32 =[0.0;0.1347;0.2117;0.2956;0.4146;0.5300;0.5615;0.5195;0.4391;0.3621;0.2816;0.1977;0.1837;0.1172;0.0857;0.0577;0.0;0.0577;0.0857;0.1172;0.1837;0.1977;0.2816;0.3621;0.4391;0.5195;0.5615;0.5300;0.4146;0.2956;0.2117;0.1347];
Eq_data_32 (1) et Eq_data_32 (17) sont des zéros. Eq_data_32 (2:16) est symétrique à Eq_data_32 (18:32).
re_Eq_data_32 = Eq_data_32; % Equalizer data for real values
im_Eq_data_32 = -(re_Eq_data_32); % Equalizer data for imaginary values
fft_sig = fft(data_processing_block); %FFT of the signal
after_eq_re = real(fft_sig).*re_Eq_data_32';
after_eq_im = imag(fft_sig).*im_Eq_data_32';
after_eq = after_eq_re + (i*after_eq_im);
ifft_sig = ifft(after_eq); %iFFT of the signal
Maintenant, la sortie est déformée et ne sonne pas bien. Je pense que cela est dû à la symétrie de la table Equalizer. Je n'arrive pas à comprendre comment organiser la table Equalizer pour préserver la symétrie. Autant que je sache, ma table Equalizer réelle et imaginaire est symétrique. Alors pourquoi ne puis-je obtenir une sortie claire?
Code complet:
Fs = 16000; % sampling frequency
no_samples = 640; % no of samples
Freq1 = 1000; % Frequency 1 of the signal
Freq2 = 2500; % Frequency 2 of the signal
Freq3 = 3500; % Frequency 3 of the signal
Amp = 0.1;
t = 1/Fs*((1:no_samples)-1); % time duration, t = 1/Fs
Input_sig_16k = Amp*sin(2*pi*Freq1*t)+Amp*sin(2*pi*Freq2*t)+Amp*sin(2*pi*Freq3*t); % Multitone Input Signal
% Equlizer data
Eq_data_32 =[0.0;0.1347;0.2117;0.2956;0.4146;0.5300;0.5615;0.5195;0.4391;0.3621;0.2816;0.1977;0.1837;0.1172;0.0857;0.0577;0.0;0.0577;0.0857;0.1172;0.1837;0.1977;0.2816;0.3621;0.4391;0.5195;0.5615;0.5300;0.4146;0.2956;0.2117;0.1347];
re_Eq_data_32 = Eq_data_32; % Equalizer data for real values
im_Eq_data_32 = -(re_Eq_data_32);
window_size = 32;
for ii = 1:(length(Input_sig_16k)/window_size)-1
data_range = (((ii-1)*window_size)+1:((ii-1)*window_size)+32);
data_block = Input_sig_16k(data_range);
fft_sig = fft(data_block); %FFT of the signal
after_eq_re = real(fft_sig).*re_Eq_data_32'; % Multiply real portion of FFT with Equalizer
after_eq_im = imag(fft_sig).*im_Eq_data_32'; % Mutliply imaginary portion with Equalizer
after_eq = after_eq_re + (i*after_eq_im);
ifft_sig = ifft(fft_sig); %iFFT of the signal
data_full(data_range) = ifft_sig; % Output signal
end
plot(Input_sig_16k,'-og'), grid on; % plot and compare both the signals
hold on;
plot(data_full,'-xr')
hold off;
était le «fft» d'origine 32 de longueur? –
@AnderBiguri Oui. C'était. Le fait que le programme fonctionne bien sans l'Equalizer ou une valeur constante pour un Equalizer indique que le FFT-iFFT n'est pas le problème, mais la symétrie de l'Equalizer. Donc j'essaie de comprendre comment sont les données de l'égaliseur. C'est là que le problème est. Je pense que mes données Equalizer sont symétriques, mais ça ne marche toujours pas. d'où ma confusion et la recherche de réponses. –
Je pense que cela a besoin d'un [mcve] –