07-22-2019, 03:28 PM
Не, с фазой все печально.
Беру ее из максимальных бинов, в 360-градусном виде,
p1 = 180 * atan2(im,re) / pi;
затем для каждой гармошки,
h1 = p1 - p1; //0
h2 = p2 - 2 * p1 - 1*90;
h3 = p3 - 3 * p1 - 2*90;
приходится заворачивать фазу в 0..180 для стабильного результата, иначе - если заворачивать в 0..360, то она иногда прыгает между +0 и +180 градусов на тех-же сигналах.
почему все эти манипуляции с циферками при вычитании?
- ффт на выходе всегда крутит фазу +90 градусов, так уж оно работает
- почему-то обычное вычитание фазы несущей из гармошек не работало (вернее работало в одном только случае, когда частота сигнала кратна сэмплрейту). а в таком виде - работает, почему-то, всегда :)
решить проблему с 360-градусной фазой я не осилил.
В интернетах пишут про пост-коррекцию результатов ФФТ, находя из трех максимальных бинов настоящий максимум по всяким аппроксимизациям формы оконной функции - с правильными значениями частоты и прочего. Реализовал для Ханна, частота на лишних 3-4 знака стала точней, но все всеравно криво - плюс это для каждого окна нужно придумывать коррекцию.
ну и все эти алгоритмы разваливаются, стоит добавить немножко шума ( https://indico.cern.ch/event/132526/cont...ements.pdf )
Беру ее из максимальных бинов, в 360-градусном виде,
p1 = 180 * atan2(im,re) / pi;
затем для каждой гармошки,
h1 = p1 - p1; //0
h2 = p2 - 2 * p1 - 1*90;
h3 = p3 - 3 * p1 - 2*90;
приходится заворачивать фазу в 0..180 для стабильного результата, иначе - если заворачивать в 0..360, то она иногда прыгает между +0 и +180 градусов на тех-же сигналах.
почему все эти манипуляции с циферками при вычитании?
- ффт на выходе всегда крутит фазу +90 градусов, так уж оно работает
- почему-то обычное вычитание фазы несущей из гармошек не работало (вернее работало в одном только случае, когда частота сигнала кратна сэмплрейту). а в таком виде - работает, почему-то, всегда :)
решить проблему с 360-градусной фазой я не осилил.
В интернетах пишут про пост-коррекцию результатов ФФТ, находя из трех максимальных бинов настоящий максимум по всяким аппроксимизациям формы оконной функции - с правильными значениями частоты и прочего. Реализовал для Ханна, частота на лишних 3-4 знака стала точней, но все всеравно криво - плюс это для каждого окна нужно придумывать коррекцию.
ну и все эти алгоритмы разваливаются, стоит добавить немножко шума ( https://indico.cern.ch/event/132526/cont...ements.pdf )
Аминь.