Ejemplo n.º 1
0
def test_setter_fft_norm():
    spec_power_unitary = np.atleast_2d([1, 2, 1])
    spec_power_amplitude = np.atleast_2d([1 / 4, 2 / 4, 1 / 4])

    signal = Signal(spec_power_unitary,
                    44100,
                    n_samples=4,
                    domain='freq',
                    fft_norm='unitary')

    # changing the fft_norm also changes the spectrum
    signal.fft_norm = 'amplitude'
    assert signal.fft_norm == 'amplitude'
    npt.assert_allclose(signal.freq, spec_power_amplitude, atol=1e-15)

    # changing the fft norm in the time domain does not change the time data
    signal.domain = 'time'
    time_power_amplitude = signal._data.copy()
    signal.fft_norm = 'unitary'
    npt.assert_allclose(signal.time, time_power_amplitude)
    npt.assert_allclose(signal.freq, spec_power_unitary)

    # setting an invalid fft_norm
    with pytest.raises(ValueError):
        signal.fft_norm = 'bullshit'
Ejemplo n.º 2
0
def test_get_arithmetic_data_with_signal():
    # all possible combinations of `domain`, `signal_type`, and `fft_norm`
    meta = [['time', None], ['freq', None], ['time', 'unitary'],
            ['freq', 'unitary'], ['time', 'amplitude'], ['freq', 'amplitude'],
            ['time', 'rms'], ['freq', 'rms'], ['time', 'power'],
            ['freq', 'power'], ['time', 'psd'], ['freq', 'psd']]

    # reference signal - _get_arithmetic_data should return the data without
    # any normalization regardless of the input data
    s_ref = Signal([1, 0, 0], 44100)

    for m_in in meta:
        # create input signal with current domain, type, and norm
        s_in = Signal([1, 0, 0], 44100, fft_norm=m_in[1])
        s_in.domain = m_in[0]
        for domain in ['time', 'freq']:
            print(f"Testing from {m_in[0]} ({m_in[1]}) to {domain}.")

            # get output data
            data_out = signal._get_arithmetic_data(s_in,
                                                   n_samples=3,
                                                   domain=domain)
            if domain == 'time':
                npt.assert_allclose(s_ref.time, data_out, atol=1e-15)
            elif domain == 'freq':
                npt.assert_allclose(s_ref.freq, data_out, atol=1e-15)
Ejemplo n.º 3
0
def test_iter_write():
    data = np.ones((3, 1024)) * np.atleast_2d(np.arange(3)).T
    sig = Signal(data, 1)
    sig.domain = 'time'

    for idx, s in enumerate(sig):
        sig[idx] = s
Ejemplo n.º 4
0
def test_iter_domain_change():
    data = np.ones((3, 1024)) * np.atleast_2d(np.arange(3)).T
    sig = Signal(data, 1)
    sig.domain = 'time'

    with pytest.raises(RuntimeError, match='domain changes'):
        for s in sig:
            s.freq
Ejemplo n.º 5
0
def test_domain_setter_time_when_freq(sine):
    signal = Signal(sine.freq,
                    sine.sampling_rate,
                    domain='freq',
                    fft_norm=sine.fft_norm)
    domain = 'time'
    signal.domain = domain
    assert signal.domain == domain
    npt.assert_allclose(signal._data, sine.time, atol=1e-10, rtol=1e-10)
Ejemplo n.º 6
0
def test_domain_setter_freq_when_time(sine_stub):
    signal = Signal(sine_stub.time,
                    sine_stub.sampling_rate,
                    domain='time',
                    fft_norm=sine_stub.fft_norm)
    domain = 'freq'
    signal.domain = domain
    assert signal.domain == domain
    npt.assert_allclose(signal._data, sine_stub.freq, rtol=1e-10, atol=1e-10)
Ejemplo n.º 7
0
def test_domain_setter_time_when_time():
    signal = Signal(np.array([1]), 44100)
    domain = 'time'
    signal._domain = domain
    signal.domain = domain
    assert signal.domain == domain
Ejemplo n.º 8
0
def test_domain_setter_freq_when_freq():
    signal = Signal(np.array([1]), 44100)
    domain = 'freq'
    signal._domain = domain
    signal.domain = domain
    assert signal.domain == domain
Ejemplo n.º 9
0
def test_domain_setter_error():
    signal = Signal(np.array([1]), 44100)
    with pytest.raises(ValueError, match='Incorrect domain'):
        signal.domain = 'quark'