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)


Samplingfrequenz: 42.0 kHz
<matplotlib.figure.Figure at 0x7f65a27eedd0>

In [24]:


In [ ]: