Esempio n. 1
0
def SincBandPassNonLinear(RBTW=0.05):
    """
    Two sinthetic gaussian centered in 15/25 Hz
    example of sinc band pass-filtering
    Relative bandwidth transition desired of 20%
    more info on:
    dspguide.com or wikipedia
    """
    s1 = Filters.SampleSignals.NonLinear(200, 0.01, 15, 500)
    # inventa um gauss. centrado em 15Hz
    s2 = Filters.SampleSignals.NonLinear(200, 0.01, 35, 500)
    # inventa um gauss. centrado em 35Hz
    s = 0.6 * s1 + 0.4 * s2
    # monta um com 60% energia de s1 e 40% da energia de s2
    N = numpy.size(s)
    print "Number of samples input %d" % N
    # use the upper limit of frequency to get the number of samples needed to a relative bandwidth transition desired
    Nf = Filters.FilterSize(25.0, 0.01, RBTW)
    fir = Filters.SincBandPass(Nf, 0.01, 5, 25)
    # filtro passa banda caixa frequencias de corte de passagem de 5Hz ah 25Hz
    res = Filters.ConvFft(s, fir)
    # mostra o resultado da conv.
    # older way
    # res = Filters.ConvEnd(s, fir, 0.01, plot=True); # mostra o resultado da conv.
    Filters.Dspplot.PlotFftCompare(s, res, 0.01)
    return res
Esempio n. 2
0
def SincBoxNonStationary():
    """
    wrap around convolution from numerical recipes
    including the linear detrend for
    non stationay data
    the fft convolution also makes the things easier for working
    and also performance
    """
    sig = rand(100) + 3
    sig[0:25] = sig[0:25] + 1
    sig[75:100] = sig[75:100] - 1
    fr = Filters.SincLowPass(51, 1, 0.1)
    res = Filters.ConvFft(sig, fr)
    Filters.Dspplot.PlotFftCompare(sig, res, 0.1)
Esempio n. 3
0
def SincTrapezoidalLowPassNoise():
    """
    a experiment with the trapezoidal low pass
    that's perfectly working, filter sampling is perfect
    and also the filtering process with the result
    using NR wrapped around convolution (use FftConv3 its simpler)
    """
    s = Filters.SampleSignals.PeriodicNoise(200, 0.05)
    print " Input number of samples %d" % numpy.size(s)
    #filter depends on the sample rate and the transition bandwidth we want
    # we want 20% its a reasonable value
    Nf = Filters.FilterSize(3.0, 0.05)
    print " Filter number of samples %d" % Nf
    fr = Filters.SincTrapezoidalLowPass(Nf, 0.05, 0.5, 3)
    #res  = Filters.ConvFft(s, filter, 0.05, plot=True);
    res = Filters.ConvFft(s, fr)
    Filters.Dspplot.PlotFftCompare(s, res, 0.05)

    return res
Esempio n. 4
0
def SincTrapezoidalLowPassPureNoise(Dt=1.0,
                                    FC=0.3 * 0.5,
                                    Ramp=0.1 * 0.3 * 0.5,
                                    Signal=rand(100) * 10 + 2,
                                    RBTW=0.05):
    """
    testing with noise, rand series values
    you can choose the parameters for the filter
    Dt =sample rate (e.g 1.0)
    Fc = cut-off frequency (e.g 30% of nyquest frequency, just 30% will pass)
    Filter Ramp  = in hertz (e.g 10% of the cutt-of frequency)
    Signal ... (e.g. 100 samples betwen [12, 2])
    RBTW = Relative bandwidth desired of 20%
    Nf = filter Order = Number of samples of the filter is = Nf*2 + 1 (its a Odd number)
    """
    Nf = Filters.FilterSize(FC, Dt, RBTW)
    N = numpy.size(Signal)
    print " Input number of samples %d" % N
    #filter smaller than the signal
    fr = Filters.SincTrapezoidalLowPass(Nf, Dt, Ramp, FC)
    res = Filters.ConvFft(Signal, fr)
    Filters.Dspplot.PlotFftCompare(Signal, res, Dt)

    return res