Создайте переменную определенной длины и заполните ее нулями и единицами - PullRequest
0 голосов
/ 26 января 2012

Я пытаюсь использовать MATLAB для симуляции механизма кодирования и декодирования связи. Следовательно, все данные будут 0 или 1.

Изначально я создал вектор определенной длины и заполнил 0 и 1, используя

source_data = rand(1,8192)<.7;

Для кодирования мне нужно многократно выполнять операции XOR, что я мог сделать без каких-либо проблем.

Для операции декодирования мне нужно реализовать метод исключения Гаусса для решения системы уравнений, где я понял, что это векторное представление не очень полезно. Я попытался использовать strcat для добавления нескольких 0 и 1 к переменной a с помощью цикла for:

for i=1:8192
    if(mod(i,2)==0)
        a = strcat(a,'0');
    else
        a = strcat(a,'1');
    end
    i = i+1;
    disp(i);
end

когда я попытался length(a) после этого, я обнаружил, что длина была 16384, что в два раза больше 8192. Я не уверен, где я иду не так или как лучше всего это решить.

Ответы [ 2 ]

2 голосов
/ 26 января 2012

Вы повторно инициализировали a перед кодом примера? Звучит так, как будто вы дважды запустили его без очистки a или начали с a длиной уже 8192.

Увеличение массива в цикле, как это в Matlab, неэффективно. Обычно вы можете найти векторизованный способ сделать что-то вроде этого. В вашем случае, чтобы получить массив чередующихся единиц и нулей длиной 8192, вы можете просто сделать это.

len = 8192;
a = double(mod(1:len,2) == 0);

А логика может быть более подходящей для вашего кода, поэтому вы можете пропустить вызов double().

1 голос
/ 27 января 2012

Здесь, вероятно, есть несколько ответов / вопросов.Во-первых, как можно перейти от произвольного вектора, содержащего {0,1} элементов, к строке?Одним из способов было бы использовать cellfun с преобразователем num2str:

dataDbl = rand(1,8192)<.7;                       %see the original question
dataStr = cellfun(@num2str, num2cell(dataDbl));  

Обратите внимание, что cellfun объединяет однородные выходы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...