示例#1
0
def test_extractor_without_sink():
    ex = Extractor(A())
    sc = ArraySource(list(range(10)), blocksize=1, overlap=0, samplerate=1)
    for i, res in enumerate(ex.extract(sc)):
        assert i == res['A']

    ex.reset()
    assert ex.featureset['A']._started is False
示例#2
0
def test_array_source():
    a = ArraySource(list(range(10)), blocksize=2, overlap=1, samplerate=1)
    last = 0
    for i, b in enumerate(a):
        data, index = b
        assert len(b) == 2
        assert last == data[0]
        last = data[-1]
示例#3
0
def test_extractor_with_sink():
    ex = Extractor(A(), A(name='hidden_a').hide())
    sc = ArraySource(list(range(10)), blocksize=1, overlap=0, samplerate=1)
    sk = DefaultDictSink()
    ex.extract(sc, sk)
    assert list(sk['results']['A']) == list(range(10))
    assert any(sk['hiddenfeatures'])
    assert any(sk['features'])
示例#4
0
def test_windowed_signal():
    block = np.ones(10)
    sc = ArraySource(block, samplerate=1)
    wsf = WindowedSignal(window='hanning', size=10)
    wsf.on_start(sc)
    res = wsf.process((block, 0), {})
    assert np.allclose(res, wsf.w)
    block = np.ones((10, 2))
    sc = ArraySource(block, samplerate=1, blocksize=10)
    wsf = WindowedSignal(window='blackman')
    wsf.on_start(sc)
    res = wsf.process((block, 0), {})
    assert np.allclose(res, wsf.w)
    sc = ArraySource(block, samplerate=1, blocksize=10)
    wsf = WindowedSignal(window='rect')
    wsf.on_start(sc)
    res = wsf.process((block, 0), {})
    assert np.allclose(res, wsf.w)
示例#5
0
def test_abstract_preprocess():
    with pytest.raises(TypeError):
        Preprocess()

    class P(Preprocess):
        def process(self, data):
            return data

    src = ArraySource(np.ones((10, 2)), samplerate=10)
    pp = P(src)
    list(pp)
示例#6
0
def test_spectral_features_no_window_branch():
    from sigfeat.feature.spectral import AbsRfft
    features = [
        AbsRfft(window=False),
        SpectralCentroid(),
        SpectralFlatness(),
        SpectralFlux(),
        SpectralCrestFactor(),
        SpectralRolloff(),
    ]
    etr = Extractor(*features)
    x = np.sin(1000 * 2 * np.pi * np.linspace(0, 1, 44100))
    src = ArraySource(np.tile(x, (2, 1)).T,
                      samplerate=44100,
                      blocksize=2048,
                      overlap=1024)
    etr.extract(src, DefaultDictSink())
示例#7
0
def test_delta():
    class A(Feature):
        def process(self, data, res):
            return float(data[0])
    ex = Extractor(
        Delta(A()),
        Delta(A(), order=2)
    )
    x = np.arange(0.0, 10.0, 2)
    src = ArraySource(x, samplerate=1, blocksize=1, channels=1)
    snk = ex.extract(src, DefaultDictSink())
    res = snk['results']
    assert np.allclose(np.array(res['A']).flatten(), x)
    assert np.mean(np.array(res['dA']).flatten()[1:]) == 2.0
    assert np.mean(np.array(res['ddA']).flatten()[2:]) == 0.0
    assert res['dA'][0] is None
    assert res['ddA'][0] is None
示例#8
0
def test_spectral_features():
    features = [
        SpectralCentroid(),
        SpectralFlatness(),
        SpectralFlux(),
        SpectralCrestFactor(),
        SpectralRolloff(),
        SpectralSpread(),
        SpectralSkewness(),
        SpectralKurtosis(),
        SpectralSlope(),
    ]
    etr = Extractor(*features)
    x = np.sin(1000 * 2 * np.pi * np.linspace(0, 1, 44100))
    src = ArraySource(x, samplerate=44100, blocksize=2048, overlap=1024)
    snk = etr.extract(src, DefaultDictSink())
    res = snk['results']
    assert abs(1 - np.median(res['SpectralCentroid']) / 1000) < 1e-3
    assert abs(np.median(res['SpectralFlatness'])) < 1e-3
示例#9
0
def test_temporal_features():
    features = [
        CrestFactor(),
        ZeroCrossingRate(),
        StatMoments(),
        CentroidAbsSignal(),
        FlatnessAbsSignal(),
        RootMeanSquare(),
        Peak(),
        Kurtosis(),
        Skewness(),
        StandardDeviation(),
    ]
    ex = Extractor(*features)
    x = np.sin(1000*2*np.pi*np.linspace(0, 1, 44100))
    src = ArraySource(x, samplerate=44100, blocksize=4096)
    snk = ex.extract(src, DefaultDictSink())
    res = snk['results']
    assert abs(np.median(res['CrestFactor'])-2**0.5) < 1e-3
    assert abs(1-np.median(res['ZeroCrossingRate'])/2000.0) < 1e-2
    assert abs(2**-0.5-np.median(res['RootMeanSquare'])) < 1e-3
    assert abs(1-np.median(res['Peak'])) < 1e-4
示例#10
0
from sigfeat import feature as fts


t = np.linspace(0, 2, 2*44100)
# x = np.sin(2*np.pi*1000*t)
x = chirp(
    t,
    f0=1000,
    t1=2,
    f1=4000,
    method='log'
    )

src = ArraySource(
    np.tile(x, (2, 1)).T,
    samplerate=44100,
    blocksize=2048,
    overlap=1024)

features = (
    fts.Index(),
    fts.RootMeanSquare(),
    fts.Peak(),
    fts.CrestFactor(),
    fts.ZeroCrossingRate(),
    fts.SpectralFlux(),
    fts.SpectralCentroid(),
    fts.SpectralFlatness(),
    fts.SpectralCrestFactor(),
    )
示例#11
0
def mkas():
    return ArraySource(np.random.randn(44100),
                       samplerate=44100,
                       blocksize=2048,
                       overlap=1024)
示例#12
0
def test_sum_mix():
    src = ArraySource(np.ones((10, 2)), samplerate=10, blocksize=1)
    pp = SumMix(src)
    for data in pp:
        assert data[0] == 2.0
示例#13
0
def test_mean_mix():
    src = ArraySource(np.ones((10, 2)), channels=2, samplerate=10, blocksize=1)
    pp = MeanMix(src)
    for data in pp:
        assert data[0] == 1.0