Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Ahoj, tak jsem zase narazil na bezmocnost u jedné úlohy. Mám navrhnout samoopravný kod kterej bude opravovat dvojnásobné chyby u 4 bitové informační části. Takže Hammingův kod mi asi moc nepomůže protože ten umí dvojnásobné jen detekovat a jednonásobné opravovat. Díky moc za pomoc. Myslím že to bude jen nějakou logickou uvahou, ale ne a ne na to přijít.
Offline
Ahoj, co se rozumí dvojnásobnou chybou u 4bitové informační části?
Offline
A jde to vůbec? Např. mě napadlo každý bit kódovat 5 bity o stejné hodnotě, ale i tak si myslím nepoznám, zda došlo k chybě nebo ne (a k jaké).
Obecně si myslím, že těch chyb je příliš mnoho (2 chyby na 4 znaky), než aby bylo možné je opravit. Na každá dvě 4bitová slova lze aplikovat nějakým způsobem dvě chyby tak, že nakonec není možné poznat, jaké slovo bylo "vysláno".
Např. pro 0000 a 1111 lze např. záměnou dvou bitů u obou z nich získat 1100 a 0011, z čehož nelze poznat, jaké slovo bylo vysláno.
Ale možná existuje nějaká teorie, která si s tímto poradí.
Offline
Nikdy jsem toto neresil, akorat jsem se dival na toto, doufam, ze dal pak neplacam nesmysly :-)
Kdyz p je pocet paritnich bitu, tak celkem budes mit 4+p bitu. Jestlize potrebujes opravovat 2 chyby, tak to bude:
1 moznost zadna chyba
4+p moznosti pro jednu chybu
(4+p)*(4+p-1)/2 moznosti pro 2 chyby
Takze dohromady moznosti chyb:
11+4.5p+p^2/2
Paritni bity ti daji 2^p moznosti, takze potrebujes, aby:
2^p >= 11+4.5p+p^2/2
Coz plati pro p>=6, takze budes potrebovat 6 paritnich bitu - celkem 10. Co dal, to presne nevim, to bude podle me ten hlavni orisek :-) Co presne mate za ukol? Staci vytvorit tabulku pro ty parity?
Napadaji me treba tyhle moznosti:
ddddpppppp x x x x x xx xx x xxxx x x xxx x xx xx x x xxxx nefunkcni, a to hodne - 4. a 8. sloupec je stejny! :)
Ale moc jsem to neproveroval, kdyztak to opravim nebo vymazu. V tom druhem by asi bylo slozitejsi nastavovat ty paritni bity, nevim presne, jak se pracuje s tema maticema. Jeste se na to mozna podivam. Treba se jeste nekdo jiny ozve, kdo by vedel.
Offline
Díky za info. Ukolem je vytvorit generujici matici a kontrolni matici a potom zakodovat jedno slovo, což už by bylo v pohodě. Mě napadlo mít u každeho informačního bitu dva paritni, ale ještě tu myšlenku musím nějak dotahnout do konce. Ale nejsem si jistej jestli by to vubec fungovalo
Offline
Co jsem daval za priklad jsou vlastne ty kontrolni matice (x jsou jednicky, mezery nuly). Ten prvni priklad co jsem psal by nefungoval, tak to mazu (ten druhy asi taky, ale necham to tam zatim). Podle me je treba, aby zadne dva sloupce nebyly stejne a zaroven aby nebyly stejne soucty jakychkoliv dvou sloupcu - to zaruci, ze pro jakoukoliv jednu nebo dve chyby budou vysledne chybove parity davat jinou kombinaci, a pujde tak jednoznacne urcit, ktere bity jsou spatne. Vytvorit tu matici tak, aby kombinace tech sloupcu nebyly stejne mi nejak nejde, je to slozite asi :-) Ale kdyby slo pouzit vic bitu, tak by to tak slozite nebylo, nevim, jestli to mate mit s maximalni efektivitou nebo ne. Mozna se na to jeste podivam, jestli se mi to povede nejak nakombinovat ty sloupce (nebo zjistit jak se to dela).
Co se tyce dvou paritnich bitu k jednou informacimu, tak kdyz budou chyby v obou paritnich, tak nepoznas, jestli jsou spatne oba paritni, nebo jen informacni, ale mozna to vis a je to to, co chces dotahnout do konce.
Offline
No přesně tak, problem je v tom když bude chyba v paritnim bitu. Jinak asi by jsem si nedělal hlavu z efektivnosti. O tom nebylo ani slovo, takže neřeším maximální počet bitů. Ještě jsem někde vygoogloval že by mohlo být řešení opakovací kod. Ale nějak mi to není jasný opakovací kod versus ty matice.
Offline
Jeste jsem to zkousel, a myslim, ze pro 6 paritnich bitu to nepujde. Ten dalsi priklad co jsem psal nefunguje. Podarilo se mi vytvorit tu kontrolni matici pro 7 paritnich (11 celkem), ktera by mela opravdu fungovat:
1 1 1 0 1 0 0 0 0 0 0 1 1 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 1
Jestli chces, muzes z toho vytvorit tu generacni matici, nebo s tim cokoliv zkouset jineho. Obavam se, ze vic uz s tim asi nepomuzu :-)
Offline
Ahoj, nechť kóduji (4 bitové) slovo xyzw pomocí n čtveřic bitů A1A2A3...An a dále nechť kóduji slovo abcd pomocí B1B2...Bn. Potom lze docílit poruchy C1C2...Cn, že Ci se liší od Ai i od Bi nejvýše o 2 bity, tedy nejsem schopen určit, zda tento porouchaný kód odpovídá slovu xyzw nebo abcd. Tedy dle mého nelze úlohu vyřešit.
Offline
Jestlize ale to kodovani ma opravovat 2 chyby, tak to znamena, ze i v te poruse budou jen 2 bity porusene. Kdyz to bude spravne zakodovane, tak by se nemelo stat, ze by se nedalo poznat, ktere bity byly porusene (pokud nebude porusenych vic nez 2). Pro tu testovaci matici, co jsem psal, by generacni mela vypadat napriklad tak: (to cerpam predevsim z te wiki akorat :-) )
1 0 0 0 1 1 1 1 0 0 0 0 1 0 0 1 1 0 0 1 1 0 0 0 1 0 1 0 1 0 1 0 1 0 0 0 1 0 1 0 1 0 1 1
Proveroval jsem tu testovaci matici, a mela by byt spravne. Mozna jsem ale nekde udelal chybu, jestli se podari komukoliv najit priklad, kdy to nepujde rozlisit pri kodovani podle te generacni matice, co jsem sem dal, tak dejte vedet, nejspis to tu pak vsechno vymazu :-)
Offline
↑ Lumikodlak:
Jak tedy prosím zakóduješ slovo 0000 a jak slovo 1111? Díky
Offline
Podle te generacni matice:
Slovo 0000 zakoduju jako 00000000000
Slovo 1111 jako 11111100000
(podle testovaci pak vyjde v obou pripadech 0000000, coz je bez chyb)
Offline
V mém předchozím důkazu je xyzw=0000, abcd=1111, A1A2A3=0000|0000|000x (to je kód 0000) a B1B2B3=1111|1100|000x (to je kód 1111). Jen jsem oddělil svislou čarou čtveřeci bitů a poslední bit označil x (jako libovolný), aby čtveřice byla úplná. Nyní uvažujme kód C1C2C3=1100|1100|000x. Na tento kód se vlivem poruch může "přeměnit" jak A1A2A3, tak i B1B2B3 - jak tedy poznám, zda C1C2C3 je zakódované 0000 či 1111?
Offline
Kod A1A2A3 se muze na C1C2C3 premenit jedine kdyz budou chyby ve 4 bitech, to kodovani ma opravovat maximalne 2. Jestli to spravne chapu, tak to kodovani nema opravovat 2 chyby pro kazde 4 bity ze zakodovanych dat - to by samozrejme ani neslo - jak uz jsi psal (ani ten Hamminguv kod by nefungoval). To kodovani ma vzit 4 informacni bity, na neco je zakodovat, to zakodovane se pak posle (pres nejaky nespolehlivy kanal), a pak kdyz se to prijme, tak i pres to, ze az 2 bity z toho zakodovaneho se porusily, je mozne rozpoznat ty puvodni 4 informacni bity.
Offline
To mi ale nedává smysl - i když bude mít zpráva 2 bity nebo 10000bitů, pořád dojde k maximálně dvěma chybám? To by byl trošku divný přenosový kanál... Já to chápal tak, že dojde k max. dvěma chybám v každém 4bitovém bloku...
Ale asi by se k tomuto měl vyjádřit autor tohoto příspěvku, jak to myslel.
Offline
Ty chyby jsou brane pro jedno to kodove slovo, ne celkove pro vsechny data. Vezmou se 4 informaci bity, ty se zakoduji v tomto pripade na 11 bitu. Kdyz v tech jedenacti bitech budou nejvyse 2 chybne, tak je porad mozne z nich zrekonstruovat ty 4 puvodni informacni bity (tech dalsich 7 bitu je redundantich a davaji informace jen k tomu, aby sly obnovit ty 4). Kdyz by se posilalo 10000 bitu, tak se zakodujou na 2500 jedenactibitovych slov (celkem 27500 bitu), a v kazdem tom slove muzou byt az 2 chyby (teoreticky az 5000 chyb z tech 27500 bitu, kdyz by byly spravne rozlozene). (tak jsem to chapal ja)
Offline
↑ Lumikodlak:
Tak jednou tvrdíš, že v kódovaném slovu může být 5000 chyb a jindy zas jen dvě chyby.
Takže kdyby se 4bitové slovo kódovalo 10000bitovým slovem, kolik by tedy v tomto 10000bitovém slovu mohlo být nejvýše chyb - 2 nebo 5000?... Pokud 2 tak bych se mohl tvářit, že kóduji 4bitové slovo, ale ve skutečnosti bych kódoval 4bitových slov víc - a hle - jako zázrakem bych měl v tomto kódu stále jen dvě chyby. :-)
Offline
Jinaak obecně - pokud se v kódovaném slově má objevit nejvýše p chyb, tak slovo x zakóduji jako xxx....x - celkem 2p+1 krát. A pak spočítám, jaké slovo se při přijmutí vyskytne nejčastěji - a to bude x.
Offline
↑ check_drummer:
Netvrdim, ze v kodovem slovu muze byt 5000 chyb. V jednom muzou byt dve, takze ve 2500 slovech (10000 informacnich bitech) muze byt dohromady 5000 chyb (reagoval jsem na tohle: "To mi ale nedává smysl - i když bude mít zpráva 2 bity nebo 10000bitů, pořád dojde k maximálně dvěma chybám? To by byl trošku divný přenosový kanál..."). Nechtel jsem kodovat 4 bity 10000bitovym slovem, to akorat 10000 bitu by se kodovalo v 2500 slovech po 4 bitech informace. Asi to ale nedovedu vysvetlit. Ted vazne nevim, v cem vidis problem :-)
↑ check_drummer:
Ano, ale to neni tak efektivni, pri 4 bitove informaci by bylo treba 20 bitu, da se to zaridit i s 11 bity jak jsem psal. Mozna, ze by to ale ke splneni autorova ukolu stacilo.
Offline
Koukám že se tu rozvířila diskuze tak raději napíšu plné zadání úlohy: Navrhněte systematický lineární kod, který umožní kodovat čtyřbitové informační části tak, aby bylo možné opravovat dvojité chyby. Sestrojte matice G a H, zakodujte informační část u = (1,1,1,0) vysvětlete prncip opravy chyb.
Tak přesně takto je to zadáno. Takže myslím, že Lumikodlak to pochopil stejně jako já.
Offline
↑ Redby:
Tak ještě pro upřesnění - co se myslí dvojitou chybou? Jedná se o to, že v zakódovaném slovu (tj. v kódu pro dané 4bitové slovo) - ať je dlouhé třeba 4 bity nebo 10000bitů - se mohou vyskytovat jen nejvýše dvě chyby? A nebo, že v každém 4bitovém bloku, které tvoří zakódované slovo, se mohou vyskytnout nejvýše 2 chyby?
Např. zakóduju-li 0000 pomocí 000000000000 - může se mi vlivem chyb změnit toto slovo na 110011001100?
Offline
↑ Lumikodlak:
Pak si asi nerozmíne, co myslíš kódovým slovem - pro mě kódové slovo znamená kód, kterým kóduji 4bitové slovo. Pokud bych ho (hypoteticky) kódoval pomocí 10000bitů, znamená to tedy, že v rámci těchto 10000bitů dojde jen k nejvýše dvěma chybám?
Tedy obecněji - pokud 4bity zakóduji slovem, které má 4m bitů - bude se v tomto slově vyskytovat nejvýše m chyb nebo nejvýše dvě chyby?
Offline
Ja nevim, jestli ma smysl tu o tom diskutovat :-) O tech samoopravnych kodech se preci daji najit informace normalne na internetu napriklad. Ty zakladni principy jsem si odvodil podle tohot clanku na wikipedii. Kdyby to nefungovalo, tak nevim, proc by se to normalne uz desitky let pouzivalo.
↑ check_drummer:
Nemyslim si, ze by tu tak slo o to, ke kolika chybam dojde. Rozdil je mezi tim, ke kolika chybam dojde (coz nezavisi na tom kodu, ale na tom prenosovem kanale), a mezi tim, kolik chyb umi kod opravit. Ten kod muzes vytvorit jakykoliv ches (teoreticky), a podle toho, jaky ten kod bude, tak podle toho bude mit informacnich bitu, zakodovanych bitu, bude schopen opravovat nejaky pocet chyb a podobne. Nevim, jaky ma smysl ten priklad s kodovanim 4 bitu na 10000 - to zase zalezi na tom, jak to zakodujes, pri kodovani ze 4 bitu na 10000 by urcite slo opravovat mnohem vic chyb nez jen 2. Kodovani, podle te tabulky, co jsem tu popsal, koduje ze 4 bitu na 11 a je schopno opravit 2 chyby. Hemminguv kod pro 4 informacni bity koduje ze 4 na 7 a umi opravit jednu chybu. To co jsi popsal predtim koduje z m bitu na m(2p+1) bitu a je chopno opravit p chyb.
Kdyz 4 bity zakodujes 4m bity, tak to nema zadny vliv na to, kolik tam bude chyb. Predpokladam, ze ses chtel zeptat na to, kolik chyb bude umet opravit - nepopsal jsi, jak by se to kodovalo, takze nevim, kolik by to umelo opravit chyb (akorat treba pro m=1 zadnou chybu protoze takove nemuze existovat, coz uz jsi vlastne sam psal).
Offline