Пример #1
0
def test_magic_setitem_wrong_norm():
    """Test the magic function __setitem__."""
    signal = Signal([1, 2, 3], 44100, fft_norm='none')
    set_signal = Signal([1, 2, 3], 44100, fft_norm='rms')
    with pytest.raises(ValueError, match='FFT norms do not match'):
        signal[0] = set_signal
Пример #2
0
def test_dtype(sine):
    """Test for the getter od dtype."""
    dtype = np.float64
    signal = Signal(sine.time, sine.sampling_rate, dtype=dtype)
    assert signal.dtype == dtype
Пример #3
0
def test_cshape(sine_two_by_two_channel):
    """Test the attribute cshape."""
    signal = Signal(sine_two_by_two_channel.time,
                    sine_two_by_two_channel.sampling_rate)
    assert signal.cshape == sine_two_by_two_channel.cshape
Пример #4
0
def test_re_setter_freq():
    """Test the warning for estimating the number of samples from n_bins."""
    signal = Signal([1, 2, 3], 44100, domain='freq', n_samples=4)
    with pytest.warns(UserWarning):
        signal.freq = [1, 2, 3, 4]
Пример #5
0
def test_setter_sampligrate(sine):
    """Test if attribute sampling rate is set correctly."""
    signal = Signal(sine.time, sine.sampling_rate)
    signal.sampling_rate = 1000
    assert signal._sampling_rate == 1000
Пример #6
0
def test_setter_time(sine, impulse):
    """Test if attribute time is set correctly."""
    signal = Signal(sine.time, sine.sampling_rate)
    signal.time = impulse.time
    assert signal._domain == 'time'
    npt.assert_allclose(signal._data, impulse.time)
Пример #7
0
def test_getter_freq(sine, impulse):
    """Test if attribute freq is accessed correctly."""
    signal = Signal(sine.time, sine.sampling_rate, fft_norm='rms')
    signal._domain = 'freq'
    signal._data = impulse.freq
    npt.assert_allclose(signal.freq, impulse.freq)
Пример #8
0
def test_domain_getter_time():
    signal = Signal(np.array([1]), 44100)
    signal._domain = 'time'
    assert signal.domain == 'time'
Пример #9
0
def test_domain_setter_error():
    signal = Signal(np.array([1]), 44100)
    with pytest.raises(ValueError, match='Incorrect domain'):
        signal.domain = 'quark'
Пример #10
0
def test_domain_getter_freq():
    signal = Signal(np.array([1]), 44100)
    signal._domain = 'freq'
    assert signal.domain == 'freq'
Пример #11
0
def test___eq___equal():
    signal = Signal([1, 2, 3], 44100)
    actual = Signal([1, 2, 3], 44100)
    assert signal == actual
Пример #12
0
def test_magic_len():
    """Test the magic function __len__."""
    signal = Signal([1, 2, 3], 44100)
    assert len(signal) == 3
Пример #13
0
def test_magic_setitem_wrong_n_samples():
    """Test the magic function __setitem__."""
    signal = Signal([1, 2, 3, 4], 44100)
    set_signal = Signal([1, 2, 3], 44100)
    with pytest.raises(ValueError, match='number of samples does not match'):
        signal[0] = set_signal
Пример #14
0
def test_signal_comment():
    signal = Signal([1, 2, 3], 44100, comment='Bla')
    assert signal.comment == 'Bla'

    signal.comment = 'Blub'
    assert signal.comment == 'Blub'
Пример #15
0
def test_times(sine):
    """Test for the time instances."""
    signal = Signal(sine.time, sine.sampling_rate, domain='time')
    npt.assert_allclose(signal.times, sine.times)
Пример #16
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
Пример #17
0
def test_getter_time(sine, impulse):
    """Test if attribute time is accessed correctly."""
    signal = Signal(sine.time, sine.sampling_rate)
    signal._domain = 'time'
    signal._data = impulse.time
    npt.assert_allclose(signal.time, impulse.time)
Пример #18
0
def test_signal_init():
    """Test to init Signal without optional parameters."""
    signal = Signal(np.array([1., 2., 3.]), 44100)
    assert isinstance(signal, Signal)
Пример #19
0
def test_signal_init_list(sine):
    signal = Signal(sine.time.tolist(), sine.sampling_rate, domain='time')
    assert isinstance(signal, Signal)
Пример #20
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
Пример #21
0
def test_setter_freq(sine, impulse):
    """Test if attribute freq is set correctly."""
    signal = Signal(sine.time, sine.sampling_rate)
    signal.freq = impulse.freq
    assert signal.domain == 'freq'
    npt.assert_allclose(signal._data, impulse.freq)
Пример #22
0
def test_signal_init_val():
    """Test to init Signal with complete parameters."""
    signal = Signal([1, 2, 3], 44100, domain='time', fft_norm='none')
    assert isinstance(signal, Signal)
Пример #23
0
def test_getter_sampling_rate(sine):
    """Test if attribute sampling rate is accessed correctly."""
    signal = Signal(sine, sine.sampling_rate)
    signal._sampling_rate = 1000
    assert signal.sampling_rate == 1000
Пример #24
0
def test_n_samples():
    """Test for number of samples."""
    signal = Signal([1, 2, 3], 44100, domain='time')
    assert signal.n_samples == 3
Пример #25
0
def test_getter_fft_norm(sine):
    signal = Signal(sine.time, sine.sampling_rate, fft_norm='psd')
    assert signal.fft_norm == 'psd'
Пример #26
0
def read_sofa(filename):
    """
    Import a SOFA file as :py:class:`~pyfar.classes.audio.Signal` object.

    Parameters
    ----------
    filename : string, Path
        Input SOFA file (cf. [#]_, [#]_).

    Returns
    -------
    signal : Signal
        :py:class:`~pyfar.classes.audio.Signal` object containing the data
        stored in `SOFA_Object.Data.IR`.
        `cshape` is equal to ``(number of measurements, number of receivers)``.
    source_coordinates : Coordinates
        Coordinates object containing the data stored in
        `SOFA_object.SourcePosition`. The domain, convention and unit are
        automatically matched.
    receiver_coordinates : Coordinates
        Coordinates object containing the data stored in
        `SOFA_object.RecevierPosition`. The domain, convention and unit are
        automatically matched.

    Notes
    -----
    * This function is based on the python-sofa [#]_.
    * Currently, only SOFA files of `DataType` ``FIR`` are supported.

    References
    ----------
    .. [#] https://www.sofaconventions.org
    .. [#] “AES69-2015: AES Standard for File Exchange-Spatial Acoustic Data
        File Format.”, 2015.
    .. [#] https://github.com/spatialaudio/python-sofa

    """
    sofafile = sofa.Database.open(filename)
    # Check for DataType
    if sofafile.Data.Type == 'FIR':
        domain = 'time'
        data = np.asarray(sofafile.Data.IR)
        sampling_rate = sofafile.Data.SamplingRate.get_values()
        # Check for units
        if sofafile.Data.SamplingRate.Units != 'hertz':
            raise ValueError(
                "SamplingRate:Units"
                "{sofafile.Data.SamplingRate.Units} is not supported.")
    else:
        raise ValueError("DataType {sofafile.Data.Type} is not supported.")
    signal = Signal(data, sampling_rate, domain=domain)

    # Source
    s_values = sofafile.Source.Position.get_values()
    s_domain, s_convention, s_unit = _sofa_pos(sofafile.Source.Position.Type)
    source_coordinates = Coordinates(
        s_values[:, 0],
        s_values[:, 1],
        s_values[:, 2],
        domain=s_domain,
        convention=s_convention,
        unit=s_unit)
    # Receiver
    r_values = sofafile.Receiver.Position.get_values()
    r_domain, r_convention, r_unit = _sofa_pos(sofafile.Receiver.Position.Type)
    receiver_coordinates = Coordinates(
        r_values[:, 0],
        r_values[:, 1],
        r_values[:, 2],
        domain=r_domain,
        convention=r_convention,
        unit=r_unit)

    return signal, source_coordinates, receiver_coordinates
Пример #27
0
def test_signal_length(sine):
    """Test for the signal length."""
    signal = Signal(sine.time, sine.sampling_rate)
    assert signal.signal_length == sine.times[-1]
Пример #28
0
def test_n_bins(sine):
    """Test for number of freq bins."""
    signal = Signal(sine.time, sine.sampling_rate, domain='time')
    assert signal.n_bins == sine.n_bins
Пример #29
0
def test_magic_getitem_slice(sine_two_by_two_channel):
    """Test slicing operations by the magic function __getitem__."""
    signal = Signal(sine_two_by_two_channel.time,
                    sine_two_by_two_channel.sampling_rate,
                    domain='time')
    npt.assert_allclose(signal[:1]._data, sine_two_by_two_channel.time[:1])
Пример #30
0
def test_magic_setitem_wrong_sr():
    """Test the magic function __setitem__."""
    signal = Signal([1, 2, 3], 44100)
    set_signal = Signal([1, 2, 3], 48000)
    with pytest.raises(ValueError, match='sampling rates do not match'):
        signal[0] = set_signal