{% raw %}// для обновления высоты хидера function updateHeaderHeight() { const header = document.querySelector('header'); document.body.style.setProperty('--header-height', `${header.offsetHeight}px`); } window.addEventListener('load', updateHeaderHeight); window.addEventListener('resize', updateHeaderHeight); function getCurrentTab() { const sl = window.location.hash.slice(1) if (availableTabs.indexOf(sl) >= 0) { return sl } return defaultTab } function modcodToStr(modcod) { // модкоды из раздела 5.5.2.2 https://www.etsi.org/deliver/etsi_en/302300_302399/302307/01.01.02_60/en_302307v010102p.pdf // NOTE модкоды со скоростью хода 3/5 не работают const modcods = [ "DUMMY", "QPSK 1/4", "QPSK 1/3", "QPSK 2/5", "QPSK 1/2", "QPSK 3/5", // отключено "QPSK 2/3", "QPSK 3/4", "QPSK 4/5", "QPSK 5/6", "QPSK 8/9", "QPSK 9/10", "8PSK 3/5", // отключено "8PSK 2/3", "8PSK 3/4", "8PSK 5/6", "8PSK 8/9", "8PSK 9/10", "16APSK 2/3", "16APSK 3/4", "16APSK 4/5", "16APSK 5/6", "16APSK 8/9", "16APSK 9/10", "32APSK 3/4", "32APSK 4/5", "32APSK 5/6", "32APSK 8/9", "32APSK 9/10", ] if (typeof modcod != "number" || modcod < 0 || modcod >= modcod.length) { return "?"; } return modcods[modcod] } function toModcod(modulation, speed) { switch (modulation.toLowerCase()) { case 'qpsk': switch (speed) { case '1/4': return 1 case '1/3': return 2 case '2/5': return 3 case '1/2': return 4 case '3/5': return 5 // отключено case '2/3': return 6 case '3/4': return 7 case '4/5': return 8 case '5/6': return 9 case '8/9': return 10 case '9/10': return 11 default: return 1 // минимальная скорость } case '8psk': switch (speed) { case '3/5': return 12 // отключено case '2/3': return 13 case '3/4': return 14 case '5/6': return 15 case '8/9': return 16 case '9/10': return 17 default: return 13 // минимальная скорость } case '16apsk': switch (speed) { case '2/3': return 18 case '3/4': return 19 case '4/5': return 20 case '5/6': return 21 case '8/9': return 22 case '9/10': return 23 default: return 18 // минимальная скорость } case '32apsk': switch (speed) { case '3/4': return 24 case '4/5': return 25 case '5/6': return 26 case '8/9': return 27 case '9/10': return 28 default: return 24 } } } function extractModulationAndSpeedFromModcod(modcod) { switch (modcod) { case 1: return { modulation: 'qpsk', speed: '1/4' } case 2: return { modulation: 'qpsk', speed: '1/3' } case 3: return { modulation: 'qpsk', speed: '2/5' } case 4: return { modulation: 'qpsk', speed: '1/2' } case 5: return { modulation: 'qpsk', speed: '3/5' } case 6: return { modulation: 'qpsk', speed: '2/3' } case 7: return { modulation: 'qpsk', speed: '3/4' } case 8: return { modulation: 'qpsk', speed: '4/5' } case 9: return { modulation: 'qpsk', speed: '5/6' } case 10: return { modulation: 'qpsk', speed: '8/9' } case 11: return { modulation: 'qpsk', speed: '9/10' } case 12: return { modulation: '8psk', speed: '3/5' } case 13: return { modulation: '8psk', speed: '2/3' } case 14: return { modulation: '8psk', speed: '3/4' } case 15: return { modulation: '8psk', speed: '5/6' } case 16: return { modulation: '8psk', speed: '8/9' } case 17: return { modulation: '8psk', speed: '9/10' } case 18: return { modulation: '16apsk', speed: '2/3' } case 19: return { modulation: '16apsk', speed: '3/4' } case 20: return { modulation: '16apsk', speed: '4/5' } case 21: return { modulation: '16apsk', speed: '5/6' } case 22: return { modulation: '16apsk', speed: '8/9' } case 23: return { modulation: '16apsk', speed: '9/10' } case 24: return { modulation: '32apsk', speed: '3/4' } case 25: return { modulation: '32apsk', speed: '4/5' } case 26: return { modulation: '32apsk', speed: '5/6' } case 27: return { modulation: '32apsk', speed: '8/9' } case 28: return { modulation: '32apsk', speed: '9/10' } } return { modulation: 'qpsk', speed: '1/4' } } {% endraw %}