Сначала посмотрите на тот сигнал, который я обрабатываю и который в итоге получается. Сейчас программа делает 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