Работя с dsp алгоритъм, при който вземам FFT на сигнал във времева област, изчислявам амплитудите на всеки бин с помощта на sqrt(real * real + imaginary * imaginary)
и след това променям амплитудата. Как да преобразувам модифицираната амплитуда обратно в комплексния домейн, така че да мога да стартирам IFFT и да възстановя обработения сигнал във времевата област?
Преобразувайте изчислената амплитуда на сложен бин обратно в комплексната му форма
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
Точно това търсех. Продължавах да гледам точките на комплексната равнина, знаейки, че тъй като знам ъгъла, мога по някакъв начин да увелича величината и да я картографирам обратно с помощта на ъгъла. Поставянето му в полярна форма беше частта, която ми липсваше. Благодаря ти!
- person Dabloons; 04.12.2013
Някаква идея защо, когато стартирате кода с това приложено, има забележимо „мигане“ между моите fft прозорци?
- person Dabloons; 04.12.2013
Използвате ли подходящ метод за обработка на вашата честотна област, напр. припокриване-добавяне или припокриване-запазване?
- person Paul R; 04.12.2013