Манчестър код за Dummies

Манчестър кодекс - Това самостоятелно синхронизиране двоичен код, без DC компонент, при което стойността на всяка изпратена малко се определя от посоката на изменение на логическо ниво в средата се дължи на предварително определен интервал от време. Тъй като нивата на логически от най-малката единица на информация (бита) в момента знаем само две (1 и 0), а след това се забиха възможности: или промяна 1 => 0 или 0 => 1. В съответствие с общоприетите стандарти за код прехода на Манчестър от нула до единство се счита за едно, а ако обратното, тогава 0. Всъщност последното твърдение - това е просто една формалност - въпросът е по какъв начин да изглеждате ;-) най-важното е, че и двата приемника и предавателя гледаш на живота по същия начин.

Въведете номер и натиснете "Възхвала на Манчестър!":

Сега нека да погледнем по-отблизо в снимката и се опитайте да анализирате и са изброени основните предимства и недостатъци на конвертиране на данни в кода на Манчестър:

Размер на данни се удвоява - това оказва отрицателно влияние върху скоростта

Брой на логически нули винаги е равен на броя на логическите дялове, съответно, по такъв сигнал няма да бъде постоянен компонент - това е изключително важно за електрически вериги и радиовълни

Съчетанието на логически нива 11 ясно показва последният получи 0, а комбинацията 00, съответно, показва 1. По този начин, след като един от тях е синхронизиран приемник

Може да има повече от две серии от еднакви логически нива, т.е. комбинация от тип 111 или 000 не може да бъде

В началото и в края на данни не може да бъде два еднакви нива на логика - само 10 или 01

На първо място, пишем на теста

Ползите от тестовете могат да бъдат прочетени тук. В контекста на решаването на настоящия проблем с машини Макети обекти ще бъдат използвани, така че тестът се използва gtest сухожилие (Тест Google) + gmock (Google подигравателни рамка). Всички тези неща доставя в изходния код, така че единственото изискване за системата - съвместим C / C ++ компилатор, като ССЗ гр ++ за Linux или Visual Studio C ++ за Windows. Тя изглежда като просто приложение, конзола, която ще се събере заедно с тестове и да ги изпълните:

Сега самите тестове. По-лесен задача е да преобразува данните в Манчестър код (кодиране), обаче с него, може би, да започне:

Всички тестове бяха поставени в TEST_F () макро. В началото на изпитването, като се използва EXPECT_CALL () е необходимо да се установи очакваното поведение. В процеса на трансформация 0 => 1010101010101010 и при условие, че MSB е на първо място (MSB), очакваната последователност на повикване On_Man_Encode_One () и On_Man_Encode_Zero () и така осем пъти. След очаква поведението описано повикване проверява метод Man_Encode (). Ако реално поведение се различава от очакваното, в хода на изпълнение на тестовете ще бъдат уведомени за грешката. В края на всеки тест се извършва и проверка на състоянието, че броят на нулите е равен на броя на единиците.

Конвертиране на данни в Манчестър код е много лесно:

Изпълнение на обратната задача - декодиране на данни на Манчестър код в оригиналната малко по-сложно. Преди предаване на данни трябва да се синхронизира с siignala на приемника. При изпълнението на тестовете не са особено заинтересовани от това как приемника синхронизира и в каква последователност те ще се нарича (ако изобщо) On_Man_Decode_Add_1 () и On_Man_Decode_Add_0 () - за тази цел означаване на очакванията както на предварително тестване :: AtMost (1). След синхронизирането процеса на декодиране може точно да се предвиди и описва съответната готовност чрез EXPECT_CALL (). Също така, както в предишния случай, в края на всеки тест провери отсъствието на DC компонент (броят на нули и единици трябва да бъде същото).

Очаквано реализиране на процеса на декодиране на Манчестър код:

Изграждане и изпълнение на тестове