Вычитание частоты ДПФ

Если максимальная величина M = A ^ 2 + B ^ 2 преобразования ДПФ соответствует частоте F (A - реальный, B - мнимый выход ДПФ на частоте 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: И если вы выполните следующее преобразование ДПФ, вы получите очень маленькое, близкое к нулю значение при значениях A и B. Но вы должны помнить, что исходные данные могут быть суммой 4-х частот (синусов и косинусов), но преобразование ДПФ даст вам столько, сколько размер ДПФ делится на 2.


dft
person maximus    schedule 12.05.2011    source источник


Ответы (1)


Нет - это не сработает. Это могло бы работать только в том случае, если компонент временной области точно соответствовал частоте бина БПФ, а фаза компонента постоянна во всем окне выборки, и даже если бы это было так, вам все равно нужно было бы позаботиться фазы в вашем вычитании.

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

person Paul R    schedule 12.05.2011
comment
Могу ли я удалить его, сделав этот компонент равным нулю? Что можно сказать о пиках, которые находятся вблизи частоты F на графике магнитуды? - person maximus; 12.05.2011
comment
Я думаю, что я уже рассмотрел это в своем ответе - я все еще редактировал, когда вы прокомментировали. - person Paul R; 12.05.2011
comment
@maximus: обнуление бункера удалит всю энергию в диапазоне частот этого бункера. - person Paul R; 12.05.2011
comment
Например, если данные состоят из некоторых точно подходящих (точно соответствующих бину БПФ) частот и некоторых других неточно подходящих частот. Будет ли метод по-прежнему правильным для точно подходящей частоты? Или неточные частоты все испортят? - person maximus; 12.05.2011
comment
Что касается обнуления, как мы знаем, существуют ложные пики, идущие от самого большого пика, который, в свою очередь, является правильной (почти) частотой, включенной в данные. Обнуление самого большого пика, как вы сказали, удалит всю энергию в пределах диапазона этого бина, но ближайшие бины по-прежнему имеют значения (энергию) рядом с самым большим пиком, и другие пики также оказывают влияние. Так что, может быть, не так эффективно обнулять единственный бункер. - person maximus; 12.05.2011
comment
@maximum: на практике вы примените оконную метку к спектру - она ​​будет равна нулю в интересующем частотном интервале и будет иметь сглаженные значения по обе стороны от этого интервала, чтобы уменьшить артефакты во временной области (как я описал в ответе выше ). Вы должны понимать, что STFT дает только оценку спектра мощности — результаты будут зависеть от того, насколько стационарен ваш сигнал. - person Paul R; 12.05.2011
comment
Спасибо за ваши ответы! Очень полезно! - person maximus; 12.05.2011