DFT вычитание частоты - PullRequest
0 голосов
/ 12 мая 2011

Если максимальная величина M = A ^ 2 + B ^ 2 преобразования DFT соответствует частоте F, (A - действительная, 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: я мог бы добиться отмены путем вычитания, и результат правильный.Выше была ошибка, но это возможно сделать.Если интересно, я могу опубликовать способ сделать это.

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

1 Ответ

2 голосов
/ 12 мая 2011

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

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

...