我正在尝试使用MATLAB来模拟通信编码和解码机制。因此,所有数据都是0或1。
最初我创建了一个特定长度的矢量,并使用
填充0和1source_data = rand(1,8192)<.7;
对于编码,我需要多次执行XOR操作,这是我能够做到的,没有任何问题。
对于解码操作,我需要实现高斯消除方法来求解方程组,其中我意识到这个向量表示不是很有用。我尝试使用strcat
使用for循环将多个0和1附加到变量a:
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.我不确定我哪里出错或者如何最好地解决这个问题。
答案 0 :(得分:2)
您是否在示例代码之前重新初始化a
?听起来好像你曾经两次运行而没有清除a
,或者已经开始a
已经8192长。
在Matlab中像这样生成一个数组效率很低。你通常可以找到一种矢量化方式来做这样的事情。在你的情况下,要获得一个8192长的交替零和0的数组,你可以这样做。
len = 8192;
a = double(mod(1:len,2) == 0);
逻辑可能更适合您的代码,因此您可以跳过double()
来电。
答案 1 :(得分:1)
这里可能有一些答案/问题。首先,如何从包含{0,1}
元素的任意向量转到字符串?一种方法是将cellfun
与转化器num2str
一起使用:
dataDbl = rand(1,8192)<.7; %see the original question
dataStr = cellfun(@num2str, num2cell(dataDbl));
请注意cellfun连接统一输出。