Вопрос

Если максимальная величина m= a ^ 2 + b ^ 2 преобразования DFT соответствует частоте f, (A - Real, B - воображаемый выход DFT, на частоте F) Тогда правильно сделать следующее:

for (j = 0; j < size; ++j) {
    data[j] -=  (A*cos(2*PI*F*j/dfts) -
                 B*sin(2*PI*F*j/dfts)) / dfts;
}
.

Для того, чтобы отменить (вычесть) это частотное влияние от оригинальных волновых данных? Предполагается, что данные являются суммой нескольких синус и косинусов с разными частотами и умножены на разные коэффициенты.

Редактировать1: Я мог бы добиться отмены, вычитая, и результат правильный.Вверху была ошибка, но это можно сделать.Если интересно, я могу опубликовать способ сделать это.

Редактировать2: И если вы сделаете следующий преобразование DFT, вы получите очень маленькое, около нулевого значения в значениях A и B. Но вам нужно помнить, что исходные данные могут быть суммой 4 частоты (синеты и косинусы), но преобразование DFT даст вам столько, сколько размер DFT разделен на 2.

Это было полезно?

Решение

Нет - это не будет работать.Он может работать только в том случае, если компонент временного домена соответствовал частоту BIN BIN точно , и фаза компонента постоянна по всему окну образца, и даже если это было так, если бы вам все равно нужно было позаботитьсяфазы в вашем вычитании.

В идеале вам нужно удалить (то есть нулю) компонент в частотной области, а затем выполнить обратную FFT.Обратите внимание, что вы, вероятно, не хотите просто ноль интереса к нулю в домене частоты, поскольку это будет производить артефакты в момент времени после того, как вы обратно FFT - вам нужно будет применить функцию окна к мусорным ведрам интереса.мусорные баки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top