2013-05-05 2 views
3

Я хотел бы взять целое число n, определяющее количество бит в моем коде связи и вектор, определяющий алфавит, присваиваемый битам 0:n-1, и выводить матрицу/ячейку, содержащую алфавитную нотацию для каждого состояние, а именно:Генерировать матрицу битов

function M = mycommarray(3,[-1,1]) 

производит

M = [{-1,-1,-1}, {-1,-1,1}...] 

Я пытался делать это более простой способ с dec2bin(0:7,3), но не похоже, чтобы быть быстрый способ сделать нули в -1 с.

Есть ли что-то близкое к предварительно упакованному, что делает это? В этом случае я не хочу, чтобы кто-то сделал это для меня (связанный с домашним заданием).

ответ

5

dec2bin на самом деле не лучший способ приблизиться к проблеме, поскольку его результатом является массив строк (т.е. - матрица символов), где каждая цифра является символом. Если вы хотите, чтобы '-1' представлял логическое «0», это было бы два символа, и это вводит проблемы.

Рассмотрите альтернативный метод с bitget. Используя предложение Шай, сделайте следующее:

[bits, values] = meshgrid(1:3, 0:7); 
M = 2 * bitget(values, bits) - 1; 

будет производить то, что вы хотите:

M = 
    -1 -1 -1 
    1 -1 -1 
    -1  1 -1 
    1  1 -1 
    -1 -1  1 
    1 -1  1 
    -1  1  1 
    1  1  1 
+1

Выглядит отлично. Он почти транслирует через вход с помощью '2 * bitget (101,1: 3) -1', но выдает ошибку размера ввода, если вы не сделаете это так, как вы объяснили. –

+1

Ha! Хорошее редактирование. Я кланяюсь твоему мастерству. –

+1

Спасибо :) первое решение было чем-то «быстрым и грязным», чтобы заставить его работать, в то время как я нарисовал его с помощью «meshgrid». –

1

Чтобы легко преобразовать нули в -1 (и оставить те нетронутыми), вы можете просто сделать

minusOnes = 2 * zeroOnes - 1; 
+0

На самом деле, я пробовал это, но выход dec2bin представляет собой трехзначное десятичное число, поэтому 101 * 2-1 становится 201. –

1

Вы также можете сделать это следующим образом:

M = 2 * (dec2bin(0:7, 3)=='1')-1; 

Это возвращает:

M = 
    -1 -1 -1 
    -1 -1  1 
    -1  1 -1 
    -1  1  1 
    1 -1 -1 
    1 -1  1 
    1  1 -1 
    1  1  1 

Однако, это медленнее. Я получаю 0.0012s (dec2bin) против 0.0002s (meshgrid + bitget) для 1024 значений и 10 бит.

Смежные вопросы