Код

**Код** (франц. *code*) — үзілісті ақпарды сигналға айналдырғанда қолданылатын белгілер жиынтығы.

Коммуникацияда код дегеніміз ақпарды өзгертудің қағидалы жүйесі болып, ол әдетте әріп, сөз, дыбыс, сурет, ым-ишара секілділер арқылы мәлім ақпаратты басқа бір формада айту не сақтау. Ең бір ежелгі мысал, тілдің пайда болуы, ол алғашында көргенін, естігенін, сезінгенін, ойлағанын сөйлеу арқылы жеткізу болды. Яғни, оқиға, ақпарат сөйлеген сөзде кодталды. Бірақ сөйлеудің өз шектемесі бар, ол дыбыс таралуының жылдамдығы мен өнімділігі жағынан шектеуге ұшырайды, жаңатехнологиялық аспаптар шыққанға дейін оны тек белгілі бір қашықтық көлеміндегі адамдар ғана тыңдап қабылдай алды. Сөйлеудің көруге болатын кодтарға көшірілуі (жазылуы) ақпарат жеткізуді уақыт-кеңістік тұрғысынан кеңейтті. Кодтарды екі мағынада түсіну керек, бірі таңбалар, бұл беткі, көрінеу, сыртқы материалды нұсқасы, енді бірі оның ішкі мағынасы. Ол таңбаның өзімен шектелмейтін ақпарат (білім) жүктеген болады.

Код атаулы кодтау （encoding） мен декодтаудың （Decoding） бірлігі. Кодтау - мәлім ақпараттың коммуникациялық және сақтауға болатын таңбаларға айналуы. Ал, декодтау дегеніміз кері бағыт, яғни, кодталған таңбаның қайтадан қабылдаушы түсінетін ақпаратқа айналуы, түсіндірілуі.

## Кодтардың түрлері
Қолданылатын орнына және көзделетін мақсатына байланысты кодалар бірнеше түрге бөлінеді. 

*Мақсатына қарай* кодалар үш түрге бөлінеді:
* бөгеуілге орнықты бірінші кода 
* қарапайым кода 
* түзетуші кода.

*Кодалаушы белгілер* жүйесіне қарай: 
* екілік, 
* үштік, 
* төрттік және одан да көп болады.

*Хабардың бір бөлігіндегі белгілер санына байланысты*: 
* бірдей, 
* бірдей емес
болып бөлінеді.

Хабардың бір бөлігін белгілейтін символдар саны онда I қолданылатын жүйенің негізіне байланысты болады. 

Мысалы, екілік жүйедегі символдар саны көп болып, ал ондық немесе одан да көп жүйедегі символдар саны аз болады.

### Бірінші ретті кодалар

*Бірінші ретті кодалар* . Бірінші ретті кодалар хабар көзінен берілетін ақпаратты байланыс арнасымен таратуға дайындап және хабар көзіндегі артық ақпараттан тазартып, ондағы сигналдың берілу жылдамдығын арттыруға арналған.

#### Морзе Әліппесі

Бірінші ретті коданың тарихы алғашқы қарапайым телеграфтық кодадан басталады.

Бірінші телеграфтық кода деп XIX ғасырдың бірінші жартысында ондық сандарды белгілеуге қолданылған Морзе кодасын айтуға болады.

Морзе кодасының кейінгі жетілдірілген түрінде нүктелер мен сызықшалардан тұратын символдар құрамы қолданылды. Жиі кездесетін әріптерге қысқа, аз символдар, ал сирек кездестін әріптерге ұзын, көп символдар беріліп, жалпы сигнал өткізу жылдамдығын арттырды.

Морзе кодасының қарапайымдылығы, жадта оңай сақталуы оның жетістігі болып табылады. 
*Морзе кодасының кемшілігі* - әріптердегі символдар санының бірдей болмауы, кодалап және кодадан шығару үшін қосымша, күрделірек құрылғыны талап етуі.

#### Бодо кодасы

Құрамы бірдей болғандықтан, бірінші ретті кодалардың ішінде Бодо кодасының құрылуы ыңғайлы және кодадан шығару оңай, Бодо барлық әріпті *төрт топқа* (жолга) бөліп, әр топқа (жолға) жеті әріптен орналастырып, әр әріпке бес разрядты символдан берген (алғашқы екі разряд жолды, кейінгі үш разряд қатарды көрсетеді).

Кейінгі халықаралық стандарттарда және есептеу машиналарында осы Бодо кодасының негізінде жеті және сегіз разрядты кодалар жасалған.

### Тиімді кодалар

*Тиімді кодалар*. Хабар көзінің статистикалық қасиетін пайдаланып, хабардағы әр түрлі әріпке келетін символдар санының орташа мәнін тауып, байланыс каналымен берілетін ақпараттың жылдамдығын арттыруға және коданы сақтау құрылғысының көлемін азайтуға болатын кодалау әдісін тиімді кодалау деп атайды.

Әріптер альфавитінен құрылған хабарды әрбір әріпке келетін символдардың орташа санын азайтып кодалауға болатынын ағылшын ғалымы Шеннон дәлелдеген.
Өзара статистикалық байланысы жоқ өріптерден құрылған хабарды тиімді кодалау әдісін ең алғаш рет Шеннон және Фэно көрсеткен, сондықтан мұндай кода Шэннон - Фэно кодасы деп те аталады.

*Кода былайша құрылады: хабар жазылған алфавит әріптері өздерінің сол хабарда пайда болу ықтималдығының ретіне сәйкес, алдымен, ықтималдығы көп әріптер, содан кейін сол ықтималдық кему ретімен кестеге жазылады. Одан кейін оларды екі топқа бөліп (әр топтағы ықтималдықтар қосындысы мүмкіндігінше бірдей немесе жақын), оның жоғарғы тобындағы әріптердің бірінші символын *"0"* деп, төмендегілердің бірінші символын *"1"* деп алады. Содан кейін әр топ тағы екі топқа бөлініп, ондағы әріптерге екінші символ белгіленеді. Сөйтіп ең соңғы топтарда бір-бір әріп қалғанша бөлініп ең соңғы символ беріледі. Сонда хабардағы жиі кездесетін, яғни ықтималдығы жоғары әріптерге берілетін символ саны аз, ал сирек кездесетін, яғни ықтималдығы аз өріптерге берілетін символдар саны көп болады.*

### Префиксті кодалар

Сөйтіп тиімділік әр түрлі ықтималдықпен кездесетін әріптерге саны әр түрлі символ беру арқылы пайда болды. Бірақ мұндай кодалардан кейін шығару қиыңдап кетеді.

*Префиксті кодалар* - кодадан шығарғанда қателікті азайту үшін, ұзын кодалық құрамдар қысқа кодалық құрамнан басталмайтын болуы керек.

*Тиімді коданың кемшіліктері де бар*: 
* кодалық құрамның ұзындығы әр түрлі; 
* ақпарат берілетін жердегі кодалаудағы кідіріс; 
* бөгеуілдер салдарынан болатын қателер берілетін кодалық құрамды басқа құрамға ауыстырады. 
Сондықтан кодадан шығару кезінде біріне-бірі жалғасқан қателердің алынуы мүмкін.

### Бөгеуілге орнықты кодалар

*Бөгеуілге орнықты кодалар* . Байланыс арналарында қосымша элементтерді пайдалану арқылы берілетін ақпараттың дәлдігін жоғарылату үшін қолданылатын коданы богеуілге орнықты кодалар немесе түзетуші кодалар деп атайды.

Бөгеуілге орнықты (түзетуші) кодалар бірінші ретті кодаларға қосымша разрядтар косу арқылы жасалады. Қосымша разрядтар байланыс арналарындағы бөгеуілдердің пайда болу зандылығына байланысты қосылып, сол бөгеуілдердің әсерінен пайда болатын қателерді жою үшін пайдаланылады. Қосымша разрядтар кодаларды күрделендіреді. Дәлдікті жоғарылату дәрежесі түзетуші коданың күрделілігіне байланысты. Дәлдікті неғұрлым жоғары дөрежеге көтеру үшін түзетуші кода соғұрлым күрделі болу керек. Сөйтіп акпаратты тарату дәлдігін жоғарылату әдістерінің әсері байланыс арналарындағы қателердің жалпы саны мен олардың таратылу заңдылығына байланысты болады.

Егер байланыс арналарындағы қателер біріне-бірі байланыссыз, яғни корреляцияланбаған болса және бір элемент қатесінің ықтималдығы берілсе, онда қалған қателер мәліметтерін анықтау қиын емес.
Тәжірибеде кездесетін байланыс арналарында кателер корреляцияланған болады. 
Қателердің бір түрі — *қателердің топталып келуі*. Мұндай топталып келетін қателерді "*пакеттеліп келеді*" деп те айтады. Қателер тобы немесе пакеті деп бірінші бұзылған элементтен бастап соңғы бұзылған элементке дейінгі элементтер тізбегін айтады. Осы элементтер санын пакет ұзындығы деп атайды. Екі пакет арасындағы бұзылмаған элементтер санын *қорғаныс аралығы* дейді. 
Қорғаныс аралығындағы элементтер саны пакет ұзындығынан бірнеше есе артық болу керек.
Бөгеуілге орнықты немесе түзетуші кодалар қолданылуына жөне құрылуына байланысты бірнеше түрге бөлінеді.

* түзетуші кодалар 
:Екі топқа бөлінеді:
:* жүйеленген 
:: Жүйеленген түзетуші кодалық топта кез келген екі кодалық комбинацияны "екілік модульмен" қосса, сол коданың үшіпші комбинациясы шығады. Жүйеленген топта ақпараттық орындарға ақпараттық символдар орналасады да, олардың белгілі бір комбинациясын "екілік модульмен" қоскан тексеруші символдар тексеруші орындарға орналасады.
Жүйеленген кодалар циклденген жөне циклденбеген хэмминг кодаларына бөлінеді. Циклденген кодада символдарды белгілі бір циклмен ауыстыру арқылы келесі комбинация алынады.

::Жүйеленбеген топта "екілік модульмен" қосқанда үшінші комбинация шығатын қасиет болмайды. Жүйеленбеген топта символдардың тексеру қосындылары пайдаланылады. Яғни, тексеруші символ белгілі бір ақпараттық символдардың қосындысы болады.

:* жүйеленбегеп 
* үзіліссіз тізбекті кодалар
::Үзіліссіз немесе тізбекті кодалау кезінде кодалау және кодадан шығару үзіліссіз жүргізіледі. Мұнда түзетуші элементтер ақпараттық элементтерге тәуелді болып, сол ақпараттық элементтердің араларында орналасады.
* топталған немесе блокталған кодалар
::Топталған немесе блокталған кодалау кезінде ақпараттық тізбек кодалык комбинацияларға (блоктарға немесе топтарға) бөлініп, сол топтар бөлек-бөлек кодаланып, кабылдау орнында бөлек-бөлек кодадан шығарылады.

*Топталған кода екі түрде кездеседі*:

:* бөлінетін (ақпараттық және текесеруші символдардың әрқайсысының бөлек орындары болады)
:* бөлінбейтін. (аралас орналасады)

### Жүйеленген кодалар

*Жүйеленген кодалар*. Жүйеленген кодаларға n орынды топталған кодалар жатады. Олардың кез келген екі комбинациясын *"екілік модульмен"* қосса, осы кодаларға кіретін үшінші комбинация шығады. n орынды коданың т орынын ақпарат беруге арналған символдар алады да,* n — m = к* орнын тексеруге арналған символдар алады.

Информациялық m символдар мен текcеруші к символдар белгіленген орындарға орналасады.
Жүйеленген кода өндіруші жөне текcеруші матрицалармен беріледі. m санды квадраттық матрицалар арқылы жасалған өндіруші матрицадан "екілік модульмен" қосу арқылы барлық мәліметтерді беруге арналған 2m комбинация алуға болады. Өндіруші матрицадан текcеруші матрица құрылып, ол кодалаушы және кодадан шығарушы құрылғыларды жасау үшін қолданылады.

Кодадан шығарушы құрылғы қабылданған символдарда қатенің бар немесе жоқ екенін анықтап, одан кейін егер қате бар болса, оның қай орында тұрғанын анықтап, оны түзетеді.

### Циклді кодалар

*Циклді кодалар*. Кез келген екілік жүйедегі топталған кодаларды әр түрлі m жолдан тұратын n бағаналы матрицамен жазуға болады. Немесе оған керісінше кез келген п орынды кодалық қомбинациядан тұратын m жолдың жиынтығынан топталған кодаларды құрушы матрица деп қарауға болады.

Мұндай матрицаның барлык жолдарының ішінен қосымша циклдік қасиеті бар матрица құратын жолдарды бөліп шығаруға болады.

Мұндай матрицаның барлық жолдарын осы коданың құрушы деп аталатын бір комбинациясын циклдік ығыстыру арқылы алуға болады. Осындай шартты қанағаттандыратын кодаларды *циклдік кодалар* деп атайды.

*Ығыстыру*, негізінен, оңнан солға қарай жүргізіледі. Мысалы: *0100101, 1001010,0010101, 0101010,1010100*, т.е.с. Топталған әр түрлі кодалардың ішінде циклдіге жататындары көп болмайды. Сондықтан олармен берілетін мәліметтер көлемі жалпы топталған кодалармен берілетін мәліметтер көлемінен аз.

Циклді кодаларды жазғанда, оларды n дәрежесіндегі көпмүше түрінде жазу ыңғайлы.

Мысалы,

10101 -ді G(x) = 1 * х4 + 0 * х3 + 1 * х2 + 0 * х1 + 1 * х0 = х4 + х2 + 1  деп жазуға болады.

Сөйтіп кодалық комбинациямен жасалатын жұмыс көпмүшемен жасалатын жұмысқа әкелінеді.

Кодалық комбинацияны құратын көпмүшені бір орынға ығыстырудың орнына оны х-ке көбейтеді.

Мысалы, 001101...0011010 орнына (х3 + х2 + 1)х = х4 + х3 + х.

Осы екі комбинацияны* "екілік модульмен"* қосқанда алынатын комбинацияны х3 + х2 + 1 көпмүшеcін (*х + 1*)-ге көбейтіп алуға болады.

(х3 + х2 + 1) • (х + 1) = х4 + х2 + х + 1.

Сонымен, кода құрушы көпмүшені белгілеп алғаннан кейін циклді коданың кез келген рұқсат етілген комбинациясын құрушы көпмүшені басқа бір көпмүшеге көбейту арқылы алуга болады.

Циклді коданың кез келген көпмүшесі құрушы көпмүшеге қалдықсыз бөлінуі керек. Циклді коданың осы қасиеті қатені табуға, ал егер қалдықсыз бөлінбесе, сол қалдықтың түріне қарап, қатенің орнын тауып түзетуге болады.

Көпмүшелерді көбейту мен бөлу кері байланысты ығыстырушы тіркегіштерде оңай орындалатын болғандықтан, циклді кодаларды қолдану өте кең тараған.
Циклді кода туғызушы немесе өндіруші деп аталатын мүшелерімен беріледі. Барлық мәліметті таратуға арналған көпмүшелер осы өндіруші немесе туғызушы көпмүшеге қалдықсыз бөлінуі керек.

### Кодалардың арақашықтығы

*Кодалардың арақашықтығы*. Бір кодалық комбинация екінші кодалық комбинациядан оларды құрайтын символдарының айырмашылығымен ерекшеленеді.

Осы *символдар ерекшелігінің санын кодалардың арақашықтығы* деп атайды.

Мысалы, 010010110 мен 100110100 кодаларының арақашықтығы оларды құрайтын символдарының ішінде сәйкес келмейтін символдарының санына, яғни 4-ке тең. Кодалардың арақашықтығын олардың комбинацияларын "екілік модульмен" қосып, сол комбинацияның ішіндегі "1" санымен анықтауға болады.

* d(10{\color{Blue}1}1{\color{Blue}1}01, 10{\color{Red}0}1{\color{Red}0}01)=2
* d(2{\color{Blue}17}3{\color{Blue}8}96, 2{\color{Red}23}3{\color{Red}7}96)=3
* d({\color{Blue}t}o{\color{Blue}n}e{\color{Blue}d}, {\color{Red}r}o{\color{Red}s}e{\color{Red}s})=3

### Үзіліссіз кодалар

*Үзіліссіз кодалар*. Мәліметтерді таратып-жеткізу техникасында топталған кодадардан басқа үзіліссіз кодалар жиі қолданылады.

Топталған кодалардан үзіліссіз кодалардың айырмашылығы — үзіліссіз кодалардағы кодалау және кодадан шығару үзіліссіз берілетін символдар тізбегімен жүргізіледі. Үзіліссіз кодалардағы тексеруші символдар ақпараттық символдарды тікелей байланысты түрлендіру арқылы алынады.

Үзіліссіз кодалардағы тексеруші символдар сол тізбектер беріліп жатқан ақпараттық символдардың араларына орналасады. Сонда әрбір берілген n символдың m символы ақпараттық, қалғаны текcеруші символдар болады. Мұндай кодалар *m/n* қатынасымен сипатталады.

Барлық үзіліссіз кодалардың ішіндегі ең қарапайымы* m/n = 1/2* болатын тізбектелген кода. Яғни, барлық символдардың жартысы ақпараттық, жартысы текcеруші кодалар.
Осындай кодамен үзындығы l, элементтен тұратын қателер пакетін түзетуге болады. Бірақ ол үшін қателер пакетінің арақашықтыгы l элементтен артық болуы керек. Оны қорғаныстық аралық деп атайды.

## Дереккөздер

Санат:Кодтау
Санат:Сигналдарды өңдеу