Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: [C++] кодирование (что не так в коде?)  (Прочитано 12334 раз)
0 Пользователей и 1 Гость смотрят эту тему.
kiv
Участник

ru
Offline Offline

« : 21-01-2009 16:00 » 

у меня есть массив из 12 символов- unsigned char Num[13]. дана матрица А=
      1101000
      0110100
      1110010
      1010001
нужно зашифровать массив путем разбиеня на 4 бита:
"кодирование сообщения из 4 бит кодом Хемминга осуществляется путем умножения вектора сообщения на порождающую матрицу кода в соответствии с алгоритмом
    Y = X A;
    где Х – вектор сегмента сообщения из 4 бит, Y – закодированный сегмент сообщения, содержащий 7 бит
вот что написал, работает не так че-то помогите исправить:
Код:
unsigned char hamming( unsigned char x )
 {
  int M[7] = { 1011, 1110, 0111, 1000, 0100, 0010, 0001};
    int i;
    int result = 0;
    for( i = 0; i < 7; ++i )
        result += x & M[i];
          return result;
  }   
int main(int argc, char* argv[])
{
  int res[12]={0};
   for(int q=0;q<12;q++)
   {
    res[q]=hamming( Num[q]& 0xF0 );
   res[q+4]=hamming( Num[q]& 0x0F );
   }
   for(int j=0;j<12;j++)
     cout << res[j];

}
Записан

сам задал вопрос, сам и ответил....
Sands
Помогающий

ua
Offline Offline

« Ответ #1 : 21-01-2009 18:39 » 

1) Судя по описанию матрицы А - она что-то наподобии битовой маски. Думаю, что обявленный тобой массив М не совсем соответствует етой матрице. Потому что в него ты записал числа 1011(тысяча одинадцать) вместо желаемого 0b1011(одинадцать в двоичной системе) и так далее по аналогии.
2) думаю x & M[ i ] не совсем соответствует операции умножения вектора на вектор + если переписывать умножение по правилам, подозреваю, что стоит помнить о двоичной арифметике(тоесть сумму приводить по модулю 2)
3) в строчке кода
Код:
 res[q+4]=hamming( Num[q]& 0x0F );
получится выход за границы массива при q >=8.
Учитывая описание процесса шифрования, результирующий массив должен быть в 2 раза больше, чем исходный потому что каждому полубайту исходного ставится в соответствие байт результирующего
4) Неплохо бы для полной красоты знать в коде о происхождении массива Num, ато необьявленный массив немного напрягает ))
Записан
kiv
Участник

ru
Offline Offline

« Ответ #2 : 22-01-2009 18:36 » 

у меня есть массив из 12 символов- unsigned char Num[13].
по модулю сумму так?  - result += x ^ M[i];
0b1011 - первый раз такую запись вижу....
у меня не выводит он в двоичном виде строку, если знаешь помоги пжста....
« Последнее редактирование: 24-01-2009 09:56 от Вад » Записан

сам задал вопрос, сам и ответил....
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 23-01-2009 09:35 » 

я вот чего не пойму
почему в задаче задан массив из 12 символов?
что из себе представляет матрица А и почему именно такая
как матрица А связана с заданным массивом

12 символов- unsigned char Num[13]   - это вроде 14 элементов

И все же чтот нужно?

Преобразовать двоичное 7 битное число в код Хемминга с кодовым расстоянием 4?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 23-01-2009 09:41 » 

12 символов- unsigned char Num[13]   - это вроде 14 элементов
unsigned char Num[13] - 13 элементов Улыбаюсь
В остальном согласен: сначала нужно чётко понять, что пытаешься сделать; потом продумать, как реализовать задуманное; и только затем писать код. А то поток сознания в коде плохо поддаётся исправлению Улыбаюсь
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 23-01-2009 09:44 » 

Offtopic:


12 символов- unsigned char Num[13]   - это вроде 14 элементов

не, тут всё нормально - 12 символов + нулевой на конце
Поставлю в угол.

Записан

kiv
Участник

ru
Offline Offline

« Ответ #6 : 23-01-2009 19:08 » 

лучше объясните, кто знает каким макаром после перемножения из 4х бит семь получается, уже дошло....

уже др вопрос есть по декодированию хемминга:
Цитата
Если вектор U состоит из нулей, искаженных символов в массиве Y не обнаружено. Если вектор U отличен от нуля, тогда синдром указывает позицию искаженного символа i . Изменив i-й символ на противоположный, восстановим сообщение Y, из которого информационными являются биты 3,5,6,7.
для чего информационные биты?
« Последнее редактирование: 23-01-2009 19:53 от kiv » Записан

сам задал вопрос, сам и ответил....
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 24-01-2009 05:52 » 

http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B4_%D0%A5%D0%B5%D0%BC%D0%BC%D0%B8%D0%BD%D0%B3%D0%B0

щас проснусь, попытаюсь вникнуть ))
« Последнее редактирование: 24-01-2009 06:00 от Алексей1153++ » Записан

kiv
Участник

ru
Offline Offline

« Ответ #8 : 24-01-2009 06:51 » 

все, поняла Ё моЁ!!!
Записан

сам задал вопрос, сам и ответил....
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines