Один более простой подход может состоять в том, чтобы просто взять БПФ и обнулить частотные компоненты, отличные от конкретного диапазона, который вас может заинтересовать, а затем инвертировать БПФ, чтобы вернуться во временную область.
Имейте в виду, что вам придется обнулять положительную частоту и отрицательную частоту, чтобы сигнал в частотной области был сопряженным симметричным относительно частоты 0. Если вы этого не сделаете Вы получите сложный сигнал при вычислении обратного БПФ.
EDIT:
Например, следующий код создает две синусоиды во временной области, соответствующий ДПФ (вычисленный с помощью БПФ), а затем один из удаленных пиков.
t = 0:0.01:0.999;
x = sin(t*2*pi*4) + cos(t*2*pi*8);
subplot(2,2,1);
plot(x)
title('time domain')
subplot(2,2,2);
xf = fft(x);
plot(abs(xf))
title('frequency domain');
subplot(2,2,3);
xf(9) = 0; xf(93) = 0; % manual removal of the higher frequency
plot(abs(xf));
title('freq. domain (higher frequency removed)');
subplot(2,2,4);
plot(ifft(xf));
title('Time domain (with one frequency removed)')
Пара вещей, на которые стоит обратить внимание. Частотная область в DFT имеет несколько различных диапазонов: смещение постоянного тока (постоянное значение), которое является частотой 0; положительный частотный диапазон, в котором (для длины N исходного сигнала) находятся записи от 1 до N / 2; отрицательный частотный диапазон, который представляет собой записи от N / 2 до N-1; Обратите внимание, что это не опечатка, самая высокая частота (та, что в N / 2) дублируется и является одинаковым значением как для положительных, так и для отрицательных частот. (Некоторые люди используют fftshift
, чтобы показать это, как это может нарисовать человек, но на самом деле это просто для взгляда / понимания.)
Что касается частоты, которую нужно удалить, вам придется выяснить это самостоятельно, но я могу дать вам подсказку. Самая высокая частота (в частотном положении N / 2) будет соответствовать самой высокой частоте, представляемой вашей системой, то есть fs / 2, где fs - ваша частота дискретизации. Вы можете масштабировать соответственно, чтобы выяснить, какие из них следует отрицать.
Если вы не отрицаете соответствующие отрицательные частоты правильно, вы получите воображаемый сигнал при обратном fft.
Последний комментарий. Этот метод будет работать только в том случае, если вы можете позволить себе весь свой сигнал раньше времени, поскольку вам нужно использовать ДПФ для всего сигнала. Если вы хотите сделать это в реальном времени, вам нужно будет создать какой-то фильтр, как вы делали ранее.