我正在编写一个代码来检查Bipolar-RZ。如果你得到一个0,那么什么都没有发生,但是如果有1那么转换发生在中间,从正电压到0,然后从负电压到0电压。
所以我接近这个的方式是,例如你有b=[0 1 0 1 1 0 1]
。你计算你有多少。然后将这些放在for循环中并添加它们。然后使用if语句检查添加后的数量是偶数还是奇数然后转换。
问题是我正在使用另一个for循环,for循环(检查偶数和奇数)进入另一个for循环。
同样使用iseven和isodd,我在线搜索。他们在MATLAB中有代码。否则该功能不起作用。这是链接:http://www.mathworks.com/matlabcentral/fileexchange/35105-isevenisodd
如果有人回复,我会非常满意的。 谢谢% for ibs, I'm using ibs=[0 1 0 0 1 1 0 0 0 1 1]
function output = lc_bi(ibs,tlc, Rb)
output=1;
numofbits=length(ibs);
% Bipolar RZ coding
if isequal(tlc,'RZ')
%for loop to calculate 1's
y=0;
for k=1:length(ibs)
if ibs(k)==1
y=y+1;
end
end
oness=ones(1,y); %converting it in to list of ones
samptime= 0.001;
endtime= numofbits-samptime;
t=0:samptime:endtime;
cycle= floor(length(t)/(numofbits-1));
j=1;
tran_in_middle= j+cycle/2;
bit=1;
for i=0:samptime:endtime
if (floor(i)+1 ~=bit)
tran_in_middle=j+cycle/2;
bit=bit+1;
end
if (ibs(bit)==1)
if(j< tran_in_middle)
%put the loop her to check if itseven or odd
%using the list of ones here and adding them to check for even and odd
g=0;
for h=1:length(oness)
g=g+1;
if isodd(g)==true
s(j) =Rb;
disp('+')
elseif isodd(g)==false
s(j)=-Rb;
disp('-')
end
end
else
s(j) = 0;
end
end
j=j+1;
end
plot(t,s);
axis([0 numofbits -(Rb+1) (Rb+1)]);
xlabel ('Time');
ylabel ('Voltage');
end
答案 0 :(得分:0)
扩展评论而不是回答......
我不了解你的代码或你的问题,但是根据你向我们展示的内容,我担心你根本不会“得到”Matlab。例如代码
%for loop to calculate 1's
y=0;
for k=1:length(ibs)
if ibs(k)==1
y=y+1;
end
end
似乎是一种费力的计算方法
y = sum(ibs)
我怀疑,虽然我不确定,你的代码中的其他循环可以用类似的方式替换,你应该更深入地研究一些基本的文档。虽然像C这样的语言需要程序员编写循环来迭代向量和数组,但Matlab提供了大量的函数集合,这些函数可以在数组上运行。 sum
只是一个基本的例子。
诸如
之类的陈述if isodd(g)==true
也关心我。在Matlab和我曾经使用的任何其他编程语言中,这是一种冗长的写作方式
if isodd(g)
我并不太担心你可能会编写冗长的代码,但是你的原始结构引起了人们的怀疑,这得到了我对初级和非专业训练的程序员的经验的支持,你并没有得到'布尔人。
然后将if
语句的另一个分支写为
elseif isodd(g)==false
由于您将g
设置为整数值,因此根本不需要elseif
,如果g
不奇怪,唯一的可能性是{{1}是偶数,所以你可以用更简洁和更清晰的
g
我认为你应该完全重写你的代码并将其写在中 Matlab;到目前为止你所拥有的可能是C Matlab。