Thursday, 15 August 2013

reducing amplitude of fft spectrum with constant phase

reducing amplitude of fft spectrum with constant phase

I have a time series that I converted to the frequency domain using fft in
matlab. I want to reduce the amplitude at a given frequency range (remove
a peak between 1.5 and 2Hz) but keep the phase constant.
If y=fft(x,N) is my spectrum in the frequency domain, the amplitude is
given by: ampl=abs(y) and phase=angle(y); I have calculated my corrected
amplitude (amplnew), which looks reasonable when I plot frequency versus
amplnew.
But when I try to rebuild y from the new amplitude (amplnew) and original
phase (phase), I get large high frequency spikes in the frequency range of
interest when I recalculate the amplitude from amp2=abs(ynew). It seems
like I should be able to recalculate y using either:
ynew(f)=amplnew(f)*exp(j*phase(f)) or
ynew(f)=amplnew(f)*(cos(phase(f))+j*sin(phase(f))) where f is the
frequency at each point in the frequency range of interest. But
amp2=abs(ynew) looks nothing like amplnew. Can someone tell me what I am
doing wrong? I am only making changes in a small frequency range and want
the original amplitude and phase to stay the same at all other
frequencies. (I tried post images but as this is my first post I don't
have enough reputation)

No comments:

Post a Comment