Я выполняю FFT-IFFT, чтобы вывести 50 Гц и его гармоники из моего сигнала, используя Matlab. Для этого я разбиваю свой сигнал на окна с 1024 образцами и выполняю БПФ на нем. Я тоже перекрываю 50%. После завершения FFT я вынимаю эти гармоники и делаю IFFT, чтобы получить отфильтрованные данные. Мой вопрос: Как суммировать все эти окна с перекрытиями, чтобы получить сигнал?FFT-IFFT. Как подвести итоговый сигнал после IFFT?
мой код ниже. Как вы можете видеть, я выполняю FFT-IFFT в каждом окне и не знаю, как собрать все окна.
[y, Fs, nbits] = wavread([fileName]); %read the data
[noSamples, noChannels] = size(y);
N = 1024; %window length 2^10
winLength=N;
Fres = Fs/N; % resolution frequency
nofWins = floor(noSamples/winLength); % No of full windows
noWins = round((100/50)*nofWins - 1); % rounded no of windows
yPaddedLength = floor(noWins*0.5*winLength + winLength); % padding wth 0
yZeroPadded =[y zeros(1, (yPaddedLength - noSamples))]; % padded signal y
nofWinsPadded = round(yPaddedLength/winLength);
noWinsPadded = round((100/50)*nofWinsPadded - 1); % no of padded windows
odd = true;
for k = 1:(noWinsPadded-1)
j = floor(0.5*k);
at = j*winLength + 1;
overlapWinLength=floor(0.5*winLength);
range = at:(at + winLength - 1);
if odd
data = yZeroPadded(range, 1);
data_sum=sum(data); % from now on - to perform
% DC removal
data_average=data_sum/N;
data=data-data_average;
else
data = yZeroPadded(range+overlapWinLength, 1);
data_sum=sum(data);
data_average=data_sum/N;
data=data-data_average;
end;
odd=~odd;
spectrum = fft(data);
F=length(spectrum);
F=spectrum;
F(10:11)=zeros; % FFT No equals to zero removes harmonics
F(17:18)=zeros % and so on
filtered_signal=IFFT(F);
Поблагодарив вас в ожидании, Elen Че
ОК, я ожидал, что ... Удалите DC? –
@ElenChe: Это зависит от вас;) –