Преобразувайте изчислената амплитуда на сложен бин обратно в комплексната му форма

Работя с dsp алгоритъм, при който вземам FFT на сигнал във времева област, изчислявам амплитудите на всеки бин с помощта на sqrt(real * real + imaginary * imaginary) и след това променям амплитудата. Как да преобразувам модифицираната амплитуда обратно в комплексния домейн, така че да мога да стартирам IFFT и да възстановя обработения сигнал във времевата област?


person Dabloons    schedule 03.12.2013    source източник
comment
Търсите ли (x+iy)/|(x+iy)| * нова амплитуда?   -  person Andrew Morton    schedule 04.12.2013


Отговори (1)


Най-вероятно бихте искали да запазите фазата и да използвате това, за да реконструирате новата стойност на bin. Това, което правите ефективно, е да модифицирате комплексно число в полярна форма, т.е. да промените големината, но да запазите фазата:

mag = sqrt(re^2 + im^2)  ; convert re, im to polar (mag, phi)
phi = atan2(im, re)

mag = mag * scale        ; apply factor `scale` to magnitude

re = mag * cos(phi)      ; convert new mag, phi back to re, im
im = mag * sin(phi)
person Paul R    schedule 03.12.2013
comment
Точно това търсех. Продължавах да гледам точките на комплексната равнина, знаейки, че тъй като знам ъгъла, мога по някакъв начин да увелича величината и да я картографирам обратно с помощта на ъгъла. Поставянето му в полярна форма беше частта, която ми липсваше. Благодаря ти! - person Dabloons; 04.12.2013
comment
Някаква идея защо, когато стартирате кода с това приложено, има забележимо „мигане“ между моите fft прозорци? - person Dabloons; 04.12.2013
comment
Използвате ли подходящ метод за обработка на вашата честотна област, напр. припокриване-добавяне или припокриване-запазване? - person Paul R; 04.12.2013