реклама на сайте
подробности

 
 
> Сигнал время от времени инвертируется в приемнике
lennen
сообщение Nov 26 2015, 09:50
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 227
Регистрация: 1-10-15
Из: Москва
Пользователь №: 88 647



Сначала посмотрите на тот сигнал, который я обрабатываю и который в итоге получается. Сейчас программа делает 3 обработки разных массивов данных. В итоге получаем.
Исходные данные 1:
Цитата
Bdig[itmr - 1] "111111001101010011001001001000001100010011000001110011101100111011011001110
00101001000001101000011000101110100101100010111000100110000011100000011010100110
1
00111101000100100000110100001100111100100000110100111100100111010011110101001100
0
10111001101110001010010000011010011110101111101000111011010110010010010000011010
0
11001000001101000011001111110011011100111111011101110110001100000000100000010011
1
10100011001000100010011010010110111010011110010011101001111010100110001011100110
1
11011001001011100010000011110111001000001101010011000101110010111101001111010100
1
10011111101011111001111110011010010000011010000110011111100110011000101001000001
1
01001111010000110100101100000111010111110000010010000011010111110010011100010011
0
01110110011110010000011010100110011110010000011010011110011111100111111000010110
1
11011100010111001110110010011100010100101100001000001100101111001111110101001100
1
11111010010110011111100010100100000110101110010000011010100110001011100101111010
1
01110111011100100111001010001000001100110111001111110011011100010111001110110101
0
00010000011001111110000101101001011000001110000101100000111010100110110011101011
1
11000001110001011101010011010011110100010010000011001001001000001101000011000101
1
10100101100010111000100110000011100010111010100110100111101000100100000001010001
1
01101011000001110100001100100111010011110110011101011111000001110001011101010011
0
10011110100010010000011010111001000001100011011000001110010101100110000101001001
0
11100010000011110011110011001101010111010110110001011100001011001110110110011100
0
10100100000110100111100100111001101110101111100111111001100110110010010000000101
1
01001000001101000011000101110100101100010111001000110011111100010011011001001000
0
01100110111000101110101101100010011010101001000001110110011100001111101000010110
1
111010111110100111110010" string

Принятые данные 1:
Цитата
res_rec "111111001101010011001001001000001100010011000001110011101100111011011001110
00101001000001101000011000101110100101100010111000100110000011100000011010100110
1
00111101000100100000110100001100111100100000110100111100100111010011110101001100
0
10111001101110001010010000011010011110101111101000111011010110010010010000011010
0
11001000001101000011001111110011011100111111011101110110001100000000100000010011
1
10100011001000100010011010010110111010011110010011101001111010100110001011100110
1
11011001001011100010000011110111001000001101010011000101110010111101001111010100
1
10011111101011111001111110011010010000011010000110011111100110011000101001000001
1
01001111010000110100101100000111010111110000010010000011010111110010011100010011
0
01110110011110010000011010100110011110010000011010011110011111100111111000010110
1
11011100010111001110110010011100010100101100001000001100101111001111110101001100
1
11111010010110011111100010100100000110101110010000011010100110001011100101111010
1
01110111011100100111001010001000001100110111001111110011011100010111001110110101
0
00010000011001111110000101101001011000001110000101100000111010100110110011101011
1
11000001110001011101010011010011110100010010000011001001001000001101000011000101
1
10100101100010111000100110000011100010111010100110100111101000100100000001010001
1
01101011000001110100001100100111010011110110011101011111000001110001011101010011
0
10011110100010010000011010111001000001100011011000001110010101100110000101001001
0
11100010000011110011110011001101010111010110110001011100001011001110110110011100
0
10100100000110100111100100111001101110101111100111111001100110110010010000000101
1
01001000001101000011000101110100101100010111001000110011111100010011011001001000
0
01100110111000101110101101100010011010101001000001110110011100001111101000010110
1
111010111110100111110010" string

Отправленные данные 2:
Цитата
Bdig[itmr - 1] "001011011110001111101001111001100010000011000100110001011100110011000001110
00000110101001101001111010001001000001100000111010111110101001100111111001101110
0
00011101010011001001110111101100010111010011110010111100100100101100001000001100
1
00111001000001000001101010011000001110010111101011011000101001000001100110111001
1
11110101101100111011001111001000001100111011000001110000101100110011000000110001
0
01100000111010100110110000010000011010111001000001101001111001111110100111100010
1
11000100110011101100010111001101001000001100111111001011110011101100010100101110
0
01000001111010011000101110011001100010111000111110100101100000111000110110011101
1
01100111001010001000001101010011010010101000111100100011010010110001011100011111
0
01001110100111101010011010010110011111101011111011001110010100010000011001011110
0
11111100010000100000111011011111010011101011001011010011001000100000110000101101
1
00111001100001000001101000011010010110010011100111011010001110101000010000011010
1
11001000001111001111110011111100111111001000100000110101110010000000110001001110
0
10011011000110011001000001100011111001111110001001101010100101110001000001110101
1
11001111110001000010000000110101001011011100001011001001110101001100111111010111
1
10110011100101000100000001010001101011111010011110001011100011111001111001000000
0
11001100110010001000001101001011000001110110101100111011011001110010000010000011
0
01011110011111100110111000010110010011100111011000001110000111100100111001001001
0
10010010110000100000110100001100111111011100110101001100111111001101110101010010
0
00011001001110100111101000011001111110011001101100011011010110101011100000011010
1
00110100111101000100100000001100110010000011010010110000011101101011001110110110
0
11100100000100000110100101100010111000111110010011101001111010100110100101100000
1
001000000010100011010010" string

Принятые данные 2:
Цитата
Bsc[itmr-1] "110100100001110000010110000110011101111100111011001110100011001100111110001
11111001010110010110000101110110111110011111000101000001010110011000000110010001
1
11100010101100110110001000010011101000101100001101000011011011010011110111110011
0
11000110111110111110010101100111110001101000010100100111010110111110011001000110
0
00001010010011000100110000110111110011000100111110001111010011001100111111001110
1
10011111000101011001001111101111100101000110111110010110000110000001011000011101
0
00111011001100010011101000110010110111110011000000110100001100010011101011010001
1
10111110000101100111010001100110011101000111000001011010011111000111001001100010
0
10011000110101110111110010101100101101010111000011011100101101001110100011100000
1
10110001011000010101100101101001100000010100000100110001101011101111100110100001
1
00000011101111011111000100100000101100010100110100101100110111011111001111010010
0
11000110011110111110010111100101101001101100011000100101110001010111101111100101
0
00110111110000110000001100000011000000110111011111001010001101111111001110110001
1
01100100111001100110111110011100000110000001110110010101011010001110111110001010
0
00110000001110111101111111001010110100100011110100110110001010110011000000101000
0
01001100011010111011111110101110010100000101100001110100011100000110000110111111
1
00110011001101110111110010110100111110001001010011000100100110001101111101111100
1
10100001100000011001000111101001101100011000100111110001111000011011000110110110
1
01101101001111011111001011110011000000100011001010110011000000110010001010101101
1
11100110110001011000010111100110000001100110010011100100101001010100011111100101
0
11001011000010111011011111110011001101111100101101001111100010010100110001001001
1
00011011111011111001011010011101000111000001101100010110000101011001011010011111
0
110111111101011100101101" string

Отправленные данные 3
Цитата
Bdig[itmr - 1] "110101011101001111010011110010111100100111001010001011000010000011001100110
00001110101001100100111001110110100111100101111001001110010100010110000100000110
0
00111100100111000110110100101101100100101001001011000010000011010000110001011101
0
01011000101110010111100110011000000110111101100000111000101110011011101100111000
1
01001000001101010111010000110100101100000111010111110011001101000111000000110111
0
11100100111001101110010010010000011010011110010011100110111010111110011111100110
0
11000001110011011100100100100000111100101111010111110011001011000010000011101100
1
11000011111010000101100001000001110001111101001111001100010111000100000111000101
1
01010111001011110101111101100100100000101100110010000011001110110001011101010000
1
11011001000001101011111001101110001011101001111010100110011110010000011000010110
1
01011100101111010111110110010010000011111110001000001100100111010011110100001100
1
11111001100110110001101101011001111110101111100000111001100110010010010000011000
0
11110010011100011011010010110101010010000000110100001011100000000000000000000000
0
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0
000000000000000000000000" string

Принятые данные 3
Цитата
Bsc[itmr-1] "110101011101001111010011110010111100100111001010001011000010000011001100110
00001110101001100100111001110110100111100101111001001110010100010110000100000110
0
00111100100111000110110100101101100100101001001011000010000011010000110001011101
0
01011000101110010111100110011000000110111101100000111000101110011011101100111000
1
01001000001101010111010000110100101100000111010111110011001101000111000000110111
0
11100100111001101110010010010000011010011110010011100110111010111110011111100110
0
11000001110011011100100100100000111100101111010111110011001011000010000011101100
1
11000011111010000101100001000001110001111101001111001100010111000100000111000101
1
01010111001011110101111101100100100000101100110010000011001110110001011101010000
1
11011001000001101011111001101110001011101001111010100110011110010000011000010110
1
01011100101111010111110110010010000011111110001000001100100111010011110100001100
1
11111001100110110001101101011001111110101111100000111001100110010010010000011000
0
11110010011100011011010010110101010010000000110100001011100000000000000000000000
0
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0
000000000000000000000000" string


Проблема произошла только на 2 такте. Биты просто инвертировались! У меня есть БПФ. Если это может быть из-за него, поясните, пожалуйста? Если не может, то что это такое? Из-за чего примерно такие ошибки могут возникать? Заметьте, все данные передаются, приходит то количество бит, которое нужно, но в одном из циклов они просто ни с того ни с сего инвертируются!

Немного разобрался, проблема в кодере-декодере. У меня опорный "предыдущий" бит всегда 0, а во второй посылке он должен быть 1, поэтому декодирование происходит с точностью да наоборот. А как его проще фиксировать? Сохранять в глобальную переменную последний принятый бит?

Выношу на общую критику. Будем блоки обозначать в [], а сигналы просто символами. У меня такая схема:
Цитата
Bdig->[Скремблер]->Bsc->[Дифференциальный кодер]->difcod->[8-PSK-демод]->Ipart и Qpart->
Bsc<-[ДеСкремблер]<-DemData<-[Дифференциальный Декодер]<-DemDifData<-[8-PSK-демод]<-Ipart и Qpart<-


Раньше схема работала. Но в ходе отладки я что-то поменял. и вообще, скорее проблема в том, что я сначала написал что-то не так, но чудом оно работало. А сейчас дало о себе знать.
Начал сопоставлять сигналы, сгенерированные такой системой, и понял, что difcod = DemDifData, но Вsc инверсно по отношению к DemData.

Сначала я подумал, что это из-за сравнения с '0' в блоке дифференциального кодирования-декодирования, но потом понял, что все посложнее. В программе я использую лишь функции difcoding(string X) и difdec(string X).

Вот они:
Код
string difcoding(string X)
        {
            int c1 = 0; int[] cout = new int[X.Length]; int count = 0;
            string Y = "";

            for (int i = 0; i < X.Length; i++)
            {
                if (c1 - X[i] == 0) cout[i] = 0;
                else if (c1 - X[i] == 1) cout[i] = 1;
                else if (c1 - X[i] == -1) cout[i] = 1;
                else { }
                c1 = X[i];
                Y += cout[i];
                count++;
            }
            
            return Y;
        }


Код
string difdec(string X)
        {
            char c1 = '0'; char cout = '0'; int count = 0;
            string Y = "";

            foreach (char c in X)
            {
                if (c == '1') { if (c1 == '0') cout = '1'; else if (c1 == '1') cout = '0'; }
                else if (c == '0') cout = c1;
                c1 = cout;
                Y = Y + cout;
                count++;
            }

            //Y = "001000100101111110010011";       //Проверка
            //Y = X;                 //Для перехода от фазовой модуляции к фазоразностной
            return Y;
        }


Вопрос раскрыт максимально, поэтому я думаю, ответ где-то рядом. Но в данный момент для меня это мистика. Просто представьте, подаем на difcoding "110001001", а на выходе difdec получаем "001110110". Но заметьте, у меня сообщение изначально было "110001001" + "110001001" + "110001001", допустим. На выходе difdec я получил лишь второе слагаемое инвертированное. Я не проверял именно эти числа, говорю просто образно, что если суммарное сообщение длинное, оно разбивается, обрабатывается кусками, а на приеме тоже обрабатывается кусками, но в итоге склеивается и дает результирующее сообщение.

Могу добавить. Я сделал, чтобы блок difcoding и difcod выдавали последние значения обработанных ими битов. Тогда в первом цикле все классно. Но у меня всего 3 оригинальных посылки, а потом снова все начинается с посылки 1, и так по кругу. И на 2 кругу снова инверсия... Ну логика-то где? Я хочу , чтобы каждый раз кодирование происходило относительно 0. Почему программа сейчас не согласна со мной. Как вообще может возникать инверсия?! *Магия*


Код
string difcoding(string X, int c1, out int c2)
        {
            int[] cout = new int[X.Length]; int count = 0;
            string Y = "";

            for (int i = 0; i < X.Length; i++)
            {
                if (c1 - X[i] == 0) cout[i] = 0;
                else if (c1 - X[i] == 1) cout[i] = 1;
                else if (c1 - X[i] == -1) cout[i] = 1;
                else { }
                c1 = X[i];
                Y += cout[i];
                count++;
            }
            c2 = c1;
            return Y;
        }

Код
string difdec(string X, char c1, out char c2)
        {
            char cout = '0'; int count = 0;
            string Y = "";

            foreach (char c in X)
            {
                if (c == '1') { if (c1 == '0') cout = '1'; else if (c1 == '1') cout = '0'; }
                else if (c == '0') cout = c1;
                c1 = cout;
                Y = Y + cout;
                count++;
            }

            //Y = "001000100101111110010011";       //Проверка
            //Y = X;                 //Для перехода от фазовой модуляции к фазоразностной
            c2 = c1;
            return Y;
        }


Сообщение отредактировал lennen - Nov 26 2015, 09:52
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
litv
сообщение Nov 26 2015, 10:09
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 6-10-04
Из: Воронеж
Пользователь №: 806



"Почему программа сейчас не согласна со мной. Как вообще может возникать инверсия?!"
По мотивам мультфильма "Крот и жевательная резинка" - http://www.baby-news.net/mults/mult1357.html
Go to the top of the page
 
+Quote Post
lennen
сообщение Nov 26 2015, 13:58
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 227
Регистрация: 1-10-15
Из: Москва
Пользователь №: 88 647



А серьезно? Давайте на более простом уровне. Есть система, состоящая из передатчика и приемника, смотрю сигналы.
Я беру за основу факт, что без разницы, как генерируются сигналы в передатчике, но также они должны быть обработаны в приемнике, чтобы восстановить сигнал.
Вот я принимаю сигнал, сгенерированный в передатчике, приемником и смотрю - ну конечно же он такой же на самом первом шаге приема, когда сигнал еще только передан через тракт. Далее смотрю результат демодуляции - отлично, сигналы полностью совпадают. То есть сигнал уже не фазоманипулированный, но еще не прошел фазо-разностное декодирование. И вот после фазо-разностного декодирования и пошла ошибка. То сообщение не инвертируется, то инвертируется. Весело, то есть, логически, неправильно работает именно декодер.
Но вы посмотрите! Где он неправильно работает?! Если кодер кодирует все поступающие данные относительно 0, то декодер эти же данные декодирует, начиная с 0 (это коэффициент c1). Что-то случилось у меня с воображением, но я не могу понять, как может кодер инвертировать код?! А в другом цикле работы не инвертировать его.
Go to the top of the page
 
+Quote Post
Corner
сообщение Nov 29 2015, 07:21
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 072
Регистрация: 11-12-12
Пользователь №: 74 815



Фазо разностное кодирование подразумевает, что текущая фаза является некой функцией от массива предыдущих конечной длины плюс/минус (оба варианта подходят, главное не путать, если в передатчике минус в приемнике поюс и наоборот) мгновенная фаза. В теории все классно, на практике, из-за разных дефектов функция может биться и результат становится неправильным.
Если в симуляторе дефекты выключены и обработка идеальна, то у вас где то ошибка дающая дефект типа Доплера или наложения. Смотрите указатели на массивы. Тут нужна точность. Промах на одну позицию и результат будет каким угодно. Инверсия еще не самый худший вариант.

Сообщение отредактировал Corner - Nov 29 2015, 07:23
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 1st August 2025 - 20:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01404 секунд с 7
ELECTRONIX ©2004-2016