Commit 5f8001c5 authored by Anika Treffehn's avatar Anika Treffehn
Browse files

added offset for jbm error pattern

parent 8223fb7c
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -139,19 +139,19 @@ input:
    # type: "JBM"
    
    ### JBM
    ### REQUIRED: either error_pattern (and errpatt_late_loss_rate or errpatt_delay and errpatt_seed for EVS) or error_profile
    ### REQUIRED: either error_pattern (and errpatt_late_loss_rate or errpatt_delay) or error_profile
    ### delay error profile file
    # error_pattern: ".../dly_error_profile.dat"
    ### Late loss rate in precent or EVS
    # errpatt_late_loss_rate: 1
    ### Constant JBM delay in milliseconds for EVS
    # errpatt_delay: 200
    ### Seed for error pattern shift in EVS JBM
    # errpatt_seed: 0
    ### Index of one of the existing delay error profile files to use (1-10)
    # error_profile: 5
    ## nFramesPerPacket parameter for the network simulator; default = 1
    # n_frames_per_packet: 2
    ### Seed for error pattern shift in JBM; default = 0 or determined by profile number
    # errpatt_seed: 0
    
    ### FER
    ### REQUIRED: either error_pattern or error_rate
+15 −3
Original line number Diff line number Diff line
@@ -39,6 +39,8 @@ from ivas_processing_scripts.audiotools.wrappers.networkSimulator import LIST_JB
from ivas_processing_scripts.constants import DEFAULT_CONFIG_BINARIES
from ivas_processing_scripts.utils import find_binary, run
from ivas_processing_scripts.audiotools.wrappers.eid_xor import eid_xor
from ivas_processing_scripts.audiotools.wrappers.random_seed import random_seed
from ivas_processing_scripts.audiotools.wrappers.networkSimulator import length_pattern


def dlyerr_2_errpat(
@@ -130,7 +132,7 @@ def dlyerr_2_errpat(
    return


def evs_jbm(bitstream, bitstream_processed, error_profile, error_pattern, errpatt_late_loss_rate, errpatt_delay, errpatt_seed, errpatt_frames_packet):
def evs_jbm(bitstream, bitstream_processed, error_profile, error_pattern, errpatt_late_loss_rate, errpatt_delay, errpatt_seed, errpatt_frames_packet, master_seed):

    # convert delay and error profile
    delay = None
@@ -139,14 +141,19 @@ def evs_jbm(bitstream, bitstream_processed, error_profile, error_pattern, errpat
    late_loss_rate = None
    length = None
    flag_word = True
    if errpatt_seed is None:
        errpatt_seed = 0

    if error_pattern is not None:
        # if error pattern and parameter are specified
        delay = errpatt_delay
        late_loss_rate = errpatt_late_loss_rate
        num_frames_packet = errpatt_frames_packet
        shift = 0   # TODO: (treffehn) compute offset with random and master seed (also for ivas jbm)
        dlyerr_pattern = error_pattern
        # compute offset of error pattern
        len_pattern = length_pattern(dlyerr_pattern)
        shift = random_seed((0, len_pattern - 1), master_seed, errpatt_seed)

    elif error_profile is not None:
        # if eror profile number is given
        if error_profile == 1 or error_profile == 2 or error_profile == 3:
@@ -168,7 +175,7 @@ def evs_jbm(bitstream, bitstream_processed, error_profile, error_pattern, errpat
            length = 8000
        else:
            raise ValueError("JBM error profile number not an integer between 1 and 10")
        shift = 0  # TODO: (treffehn) compute offset with random and master seed (also for ivas jbm)

        if error_profile in LIST_JBM_PROFILES:
            dlyerr_pattern = ERROR_PATTERNS_DIR.joinpath(
                f"dly_error_profile_{error_profile}.dat"
@@ -178,6 +185,10 @@ def evs_jbm(bitstream, bitstream_processed, error_profile, error_pattern, errpat
                f"JBM profile number {error_profile} does not exist, should be between {LIST_JBM_PROFILES[0]} and {LIST_JBM_PROFILES[-1]}"
            )

        # compute offset of error pattern
        len_pattern = length_pattern(dlyerr_pattern)
        shift = random_seed((0, len_pattern - 1), master_seed, error_profile, False)

    fer_pattern = Path(bitstream).with_suffix(".evs_jbm_fer.192")

    dlyerr_2_errpat(
@@ -261,3 +272,4 @@ def validate_evs_jbm(
            f"n_frames_per_paket is {n_frames_per_packet}. Should be 1 or 2. Please check your configuration."
        )
    return
+24 −3
Original line number Diff line number Diff line
@@ -33,9 +33,11 @@
import logging
from pathlib import Path
from typing import Optional, Union
from warnings import warn

from ivas_processing_scripts.constants import DEFAULT_CONFIG_BINARIES
from ivas_processing_scripts.utils import find_binary, run
from ivas_processing_scripts.audiotools.wrappers.random_seed import random_seed

LIST_JBM_PROFILES = range(11)
ERROR_PATTERNS_DIR = Path(__file__).parent.parent.parent.joinpath("dly_error_profiles")
@@ -82,6 +84,8 @@ def validate_network_simulator(
            raise ValueError(
                "JBM pattern and JBM profile number are specified for bitstream processing. Can't use both! Please check the configuration."
            )
        if errpatt_seed is None:
            raise warn("No error pattern seed specified for JBM offset -> use 0")
    elif error_profile is not None:
        if error_profile not in LIST_JBM_PROFILES:
            raise ValueError(
@@ -166,7 +170,8 @@ def apply_network_simulator(
    error_pattern: Optional[Union[Path, str]] = None,
    error_profile: Optional[int] = None,
    n_frames_per_packet: Optional[int] = None,
    offset: Optional[int] = 0,
    master_seed: Optional[int] = 0,
    errpatt_seed: Optional[int] = 0,
    logger: Optional[logging.Logger] = None,
) -> None:
    """
@@ -184,8 +189,10 @@ def apply_network_simulator(
        Index of existing error pattern
    n_frames_per_packet: Optional[int]
        Number of frames per paket
    offset: Optional[int]
        delay offset
    master_seed: Optional[int]
        Seed to compute delay offset
    errpatt_seed: Optional[int]
        Seed to compute delay offset
    logger: Optional[logging.Logger]
        logger
    """
@@ -215,9 +222,23 @@ def apply_network_simulator(
        if error_profile is not None and error_profile == 5:
            n_frames_per_packet = 2

    # compute offset of error pattern
    len_pattern = length_pattern(error_pattern)
    if error_profile:
        offset = random_seed((0, len_pattern - 1), master_seed, error_profile, False)
    else:
        offset = random_seed((0, len_pattern - 1), master_seed, errpatt_seed, False)

    # apply error pattern
    network_simulator(
        error_pattern, in_bitstream, out_bitstream, n_frames_per_packet, offset, logger
    )

    return


def length_pattern(path_pattern):
    with open(path_pattern, 'r') as f:
        p = f.readlines()
        length = len(p)
    return length
+3 −0
Original line number Diff line number Diff line
@@ -307,6 +307,7 @@ def get_processing_chain(
                    "errpatt_seed": tx_cfg_tmp.get("errpatt_seed", None),
                    "error_profile": tx_cfg_tmp.get("error_profile", None),
                    "n_frames_per_packet": tx_cfg_tmp.get("n_frames_per_packet", None),
                    "master_seed": cfg.master_seed,
                }
            else:
                raise ValueError(
@@ -398,6 +399,8 @@ def get_processing_chain(
                    "error_pattern": tx_cfg_tmp.get("error_rate", None),
                    "error_profile": tx_cfg_tmp.get("error_profile", None),
                    "n_frames_per_packet": tx_cfg_tmp.get("n_frames_per_packet", None),
                    "master_seed": cfg.master_seed,
                    "errpatt_seed": tx_cfg_tmp.get("errpatt_seed", None),
                }
                ivas_jbm = True
            else:
+1 −0
Original line number Diff line number Diff line
@@ -388,6 +388,7 @@ class EVS(Processing):
                    self.tx["errpatt_delay"],
                    self.tx["errpatt_seed"],
                    self.tx["n_frames_per_packet"],
                    self.tx["master_seed"],
                )
                return bitstream_processed

Loading