Loading examples/TEMPLATE.yml +3 −3 Original line number Diff line number Diff line Loading @@ -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 Loading ivas_processing_scripts/audiotools/wrappers/dlyerr_2_errpat.py +15 −3 Original line number Diff line number Diff line Loading @@ -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( Loading Loading @@ -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 Loading @@ -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: Loading @@ -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" Loading @@ -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( Loading Loading @@ -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 ivas_processing_scripts/audiotools/wrappers/networkSimulator.py +24 −3 Original line number Diff line number Diff line Loading @@ -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") Loading Loading @@ -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( Loading Loading @@ -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: """ Loading @@ -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 """ Loading Loading @@ -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 ivas_processing_scripts/processing/chains.py +3 −0 Original line number Diff line number Diff line Loading @@ -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( Loading Loading @@ -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: Loading ivas_processing_scripts/processing/evs.py +1 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
examples/TEMPLATE.yml +3 −3 Original line number Diff line number Diff line Loading @@ -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 Loading
ivas_processing_scripts/audiotools/wrappers/dlyerr_2_errpat.py +15 −3 Original line number Diff line number Diff line Loading @@ -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( Loading Loading @@ -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 Loading @@ -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: Loading @@ -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" Loading @@ -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( Loading Loading @@ -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
ivas_processing_scripts/audiotools/wrappers/networkSimulator.py +24 −3 Original line number Diff line number Diff line Loading @@ -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") Loading Loading @@ -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( Loading Loading @@ -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: """ Loading @@ -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 """ Loading Loading @@ -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
ivas_processing_scripts/processing/chains.py +3 −0 Original line number Diff line number Diff line Loading @@ -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( Loading Loading @@ -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: Loading
ivas_processing_scripts/processing/evs.py +1 −0 Original line number Diff line number Diff line Loading @@ -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