Вопрос
Если максимальная величина 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 - вам нужно будет применить функцию окна к мусорным ведрам интереса.мусорные баки.