Re: How to perform the 1-D signal filter? [message #58538 is a reply to message #58441] |
Mon, 04 February 2008 01:28   |
Wox
Messages: 184 Registered: August 2006
|
Senior Member |
|
|
On Sat, 2 Feb 2008 11:27:47 -0800 (PST), jdu.ustc@gmail.com wrote:
> I found that the the value of the peak in the second figure is lower
> than those in first and third figure. Why does it happen?
> And the filtered signal_1 is not equal to the real part of signal_2.
> Does it mean that the filter in time domain is not exactly equal to it
> in frequency domain?
Well, I'm not sure. If you execute the code below, you will see that
the two filters are similar. Maybe this is just the result of the
intrinsic approximation of time domain filtering?
; Time domain
freq1=2.
freq2=3.
freq3=4.
dtime=0.1
ntime=1000
time=dtime*findgen(ntime)
signal=sin(2*!pi*freq1*time)+sin(2*!pi*freq2*time)+sin(2*!pi *freq3*time)
; Frequency domain
nfreq=ntime/2+1
freq=findgen(nfreq)/(dtime*ntime)
fsignal=fft(signal)
; Time domain Filter
f_low = 0
f_high = 2.5
timefilter = DIGITAL_FILTER(f_low*2*dtime, f_high*2*dtime, 50.,40)
signal=convol(signal,timefilter)
; Time domain Filter in Frequency domain
ntime2=n_elements(timefilter)
nfreq2=ntime2/2+1
freq2=findgen(nfreq2)/(dtime*ntime2)
ftimefilter=fft(timefilter,1); == ntime2*fft(timefilter)
; Frequency domain filter (instead of time domain filter)
steep=50.
freqfilter= 1./(1.+(freq/f_high)^steep)
fsignal*=freqfilter
; Plot
window,0
plot,freq,abs(fsignal[0:nfreq-1])^2,xtitle='frequency',ytitl e='spectrum',title='Time
domain filtered'
window,1
plot,freq,abs((fft(signal))[0:nfreq-1])^2,xtitle='frequency' ,ytitle='spectrum',title='Freq
domain filtered'
window,2
plot,freq,abs(freqfilter)^2,yrange=[0,1.1],ystyle=1,xtitle=' frequency',ytitle='spectrum',title='Filters'
oplot,freq2,abs((ftimefilter)[0:nfreq2-1])^2,col=128
|
|
|