In [74]:
from scipy import signal
def tukeywindow(freq1, freq2, f_sample=10, width=3, sig=.1):
"Erstellt einen tukey windowed Frequenzübergang Freq1 auf Freq2 mit sig Signallänge und entsprechende FFT"
freq1, freq2, width = float(freq1), float(freq2), float(width)
f_sample = f_sample*1000.
print "Samplingfrequenz:", f_sample/1000, "kHz"
f1 = tile(concatenate((ones(f_sample/(2*freq1)), zeros(f_sample/(2*freq1))), axis=1), sig*freq1)
f2 = tile(concatenate((ones(f_sample/(2*freq2)), zeros(f_sample/(2*freq2))), axis=1), sig*freq2)
f = concatenate((f1, f2), axis=1)-0.5
window = concatenate((zeros(((width-1)/(2*width))*f.size), signal.tukey((f.size/width), sym=False)), axis=1)
window = concatenate((window, zeros(((width-1)/(2*width))*f.size)), axis=1)
window = concatenate((window, zeros(f.size-window.size)), axis=1)
f = f*window
#f = f[:502681]
xaxis = linspace(0, 2*sig, f.size)
figure()
plot(xaxis, f)
plt.xlabel('t in s')
plt.ylim(-1,1)
#plt.xlim(1,1.9)
figure()
FTdata = fft.fft(f)/f.size
FT = FTdata[:(FTdata.size/2)]
faxis = fft.fftfreq(f.size, (1./f_sample))
faxis = faxis[:(faxis.size/2)]
plot(faxis, abs(FT))
#plt.xlim(0, (freq1+freq2))
plt.xlabel('Freq in Hz')
plt.ylabel('Amplitude')
#figure()
#s, freqs = psd(f, f.size/3, f_sample)
#plt.xlim(0, (freq1+freq2))
return FTdata, xaxis, faxis, f_sample;
def bandpass_ifft(freq1, freq2, f_sample, width=1, sig=6):
flicker, x, f, fs = tukeywindow(freq1, freq2, f_sample, width, sig)
lowpass = zeros((1,flicker.size))
lowpass[0,0:(flicker.size/fs*60)] = flicker[0:(flicker.size/fs*60)]
lowpass[0,(flicker.size-(flicker.size/fs*60)):] = flicker[(flicker.size-(flicker.size/fs*60)):]
figure()
plot(x, fft.ifft(lowpass*flicker.size)[0,:])
plt.xlim(5,7)
figure()
bpsize = (60*flicker.size/fs)+(10*flicker.size/fs)
bandpass = concatenate((signal.tukey(bpsize, sym=False), zeros(flicker.size-2*bpsize)), axis=1)
bandpass = concatenate((bandpass, signal.tukey(bpsize, sym=False)), axis=1)
bandpass[0:(flicker.size/fs*60)/3.] = 1.
bandpass[(flicker.size-(flicker.size/fs*60)/3.):] = 1.
bandpass = abs(flicker)*bandpass
sig = fft.ifft(bandpass*flicker.shape)
figure()
plot(x, real(sig))
plt.title('bandpass-iFFT Flicker 200->700Hz')
plt.xlabel('t in s')
plt.xlim(5.8,6.2)
plt.ylim(-0.0000005, 0.0000005)
figure()
plot(f[:1000],abs(bandpass[:1000]))
return;
bandpass_ifft(600,700,42)
In [24]:
In [ ]: