Я пытаюсь написать код в Matlab, который принимает один или сумму sinosudal волн, наложенных с шумом и попытаться отфильтровать его с помощью следующей Algo:Фильтрация синусоидальной волны с FFT
первого я беру входной и поместите его в векторе
затем я применить (FFT) к этому вектору и абса() к этому FFT
- пример, если «х» есть вектор, в котором волна сохраняется, то
- у = абс (FFT (х))теперь «у» я сделать все элементы меньше некоторого порогового значения 0
затем применить IFFT() функция, чтобы получить отфильтрованный сигнал позволяет говорить «x1»
но окончательные волны я получаю, даже если синусоидальная волну она находится вне фазы (см график) .о это потому, что IAM ходатайствующего абса() к FFT ??
Но material, на котором я получил этот algo, не обсуждает об этом.
Нужно ли применять любой другой фильтр, чтобы получить реальную волну?
здесь сюжет двух волн: одна я получил от описанной выше процедуры, а другая фактическая волна, которая является синусоида без шума: my graph
увидеть, как моя фильтруется волна и фактическая волна являются не в порядке, как исправить?
Если вы не можете понять вопрос или иметь что-нибудь, что вы хотите задать мне, пожалуйста, прокомментируйте, я попытаюсь это объяснить.
Результат FFT - это комплексное число, вам нужно как фазу, так и модуль инвертировать его, если вы используете абсолютное значение, которое вы теряете. Вы можете использовать абсолютное значение для его построения, но будьте осторожны, чтобы не использовать абсолютное значение для IFFT. – Niles
, но для установки ограничения для фильтра я должен использовать абсолютные значения. есть ли другой способ, которым я могу использовать fft для фильтрации без использования абсолютных значений? если да, пожалуйста, дайте мне источник. –
или я могу скомпоновать фазовый сдвиг каким-то образом (не зная оригинальной волны) –