Skip to content

Utils

crusade.utils

Functions

download_dataset(name='rfcx/frugalai', streaming=False, token=None, split='train')

Downloads the RFCx FrugalAI dataset using the Hugging Face datasets library. to login:

$ huggingface-cli login

Returns:

Name Type Description
DatasetDict

The downloaded dataset containing training, validation, and test splits.

Source code in crusade/utils.py
def download_dataset(name="rfcx/frugalai", streaming=False, token=None, split="train"):
    """Downloads the RFCx FrugalAI dataset using the Hugging Face datasets library.
    to login:

    ```bash
    $ huggingface-cli login
    ```

    Returns:
        DatasetDict: The downloaded dataset containing training, validation, and test splits.
    """
    if token is not None:
        dataset = load_dataset(name, streaming=streaming, token=token, split=split)
    else:
        dataset = load_dataset(name, streaming=streaming, split=split)

    return dataset

low_pass_filter(modulated_signal, window_size=301, gain=4.65415)

Applies a low-pass filter to the modulated signal using a Hann window.

Parameters:

Name Type Description Default
modulated_signal float

Input modulated signal (e.g., spike train).

required
window_size int

Size of the Hann window for filtering.

301
gain float

Gain factor to scale the filtered signal.

4.65415

Returns:

Name Type Description
float

The filtered signal.

Source code in crusade/utils.py
def low_pass_filter(modulated_signal, window_size=301, gain=4.65415):
    """Applies a low-pass filter to the modulated signal using a Hann window.

    Args:
        modulated_signal (float): Input modulated signal (e.g., spike train).
        window_size (int): Size of the Hann window for filtering.
        gain (float): Gain factor to scale the filtered signal.

    Returns:
        float: The filtered signal.
    """
    kernel = windows.flattop(window_size) / window_size  # Create a Hann window kernel
    filtered_signal = jax.scipy.signal.convolve(
        modulated_signal * gain, kernel, mode="same"
    )

    return filtered_signal

audio_resampling_and_scaling(audio: Float[Array, '#time'], original_frequency: float, target_frequency: float, scaling_factor=1.0) -> Float[Array, '#time']

Resamples and scales the input audio signal.

Parameters:

Name Type Description Default
audio Array

Input audio signal.

required
original_frequency float

Original sampling frequency of the audio signal.

required
target_frequency float

Target sampling frequency for resampling.

required
scaling_factor float or str

Scaling factor or method ('normalize') for scaling the audio signal.

1.0

Returns:

Name Type Description
Array Float[Array, '#time']

Resampled and scaled audio signal.

Source code in crusade/utils.py
def audio_resampling_and_scaling(
    audio: Float[Array, "#time"],
    original_frequency: float,
    target_frequency: float,
    scaling_factor=1.0,
) -> Float[Array, "#time"]:
    """Resamples and scales the input audio signal.

    Args:
        audio (Array): Input audio signal.
        original_frequency (float): Original sampling frequency of the audio signal.
        target_frequency (float): Target sampling frequency for resampling.
        scaling_factor (float or str): Scaling factor or method ('normalize') for scaling the audio signal.

    Returns:
        Array: Resampled and scaled audio signal.
    """
    if isinstance(scaling_factor, float):
        if scaling_factor != 1.0:
            audio = audio * scaling_factor
    elif isinstance(scaling_factor, str):
        if scaling_factor == "normalize":
            audio = audio / jnp.max(jnp.abs(audio))

        elif scaling_factor == "mulaw":
            audio = audio / jnp.max(jnp.abs(audio))
            audio = mu_encoding(audio, mu=255)

    if original_frequency != target_frequency:
        number_of_points = len(audio)
        audio = jnp.asarray(
            resample(
                audio, int(number_of_points * (target_frequency // original_frequency))
            )
        )

    return audio

mu_encoding(signal, mu=255)

Applies mu-law encoding to the input signal (it should be pronounced mi).

Parameters:

Name Type Description Default
signal float

Input audio signal.

required
mu int

Mu parameter for mu-law encoding.

255

Returns:

Name Type Description
float

Mu-law encoded signal.

Source code in crusade/utils.py
def mu_encoding(signal, mu=255):
    """Applies mu-law encoding to the input signal (it should be pronounced mi).

    Args:
        signal (float): Input audio signal.
        mu (int): Mu parameter for mu-law encoding.

    Returns:
        float: Mu-law encoded signal.
    """
    signal = jnp.clip(signal, -1.0, 1.0)
    encoded_signal = jnp.sign(signal) * jnp.log1p(mu * jnp.abs(signal)) / jnp.log1p(mu)
    return encoded_signal