matlab 程序,求高手解答
有3段matlab程序,请帮忙注释一下,有些地方看不懂,比如在LinearFeedbackShiftRegister里头,P=length(generator)为什么单独...
有3段matlab程序,请帮忙注释一下,有些地方看不懂,比如在LinearFeedbackShiftRegister里头,P=length(generator)为什么单独执行不出来,这个length跟第一段里头的length=SF*code_length 是同一个length吗?程序如下:
(1)
%File simple_dsss.m
code_length=10; %信息码元个数
SF=63; %扩频增益
fs=63000; %采样率
f=100; %信息码速率
%产生信息码
N=1:code_length;
rand('seed',0);
x=sign(rand(1,code_length)-0.5); %x为信息码
for i=1:code_length
s((1+(i-1)*fs/f):i*fs/f)=x(i); %每个信息码元内含fs/f=630个采样点
end
disp('信息码');disp(x);
%伪随机码由MSequence产生
%产生伪随机码
length=SF*code_length; %扩频后的码数
PN_code=MSequence(SF+1);
x_code=reshape(PN_code.'*ones(1,code_length),1,length); %把0,1序列码变换为-1,1调制码
for i=1:(code_length*SF)
w_code((1+(i-1)*10):i*10)=x_code(i); %k_code为扩频码,每个码元内含10个采样点
end
for i=1:SF
jkw_code((1+(i-1)*10):i*10)=PN_code(i);
end
%扩频
k_code=s.*w_code; %k_code 为扩频码
disp('扩频码');disp(k_code);
%BPSK调制
for i=1:length
AI=2;
dt=fs/(f*SF);
n=0:dt/9:dt; %一个载波周期内采样10个点
cI=AI*cos(2*pi*f*SF*n/fs);
signal_t((1+(i-1)*10):i*10)=k_code((1+(i-1)*10):i*10).*cI;
end
plot(signal_t);title('BPSK');
(2)
% File Msequence.m
function Sequence=MSequence(SF)
SFlog2=log2(SF);
if rem(SFlog2,1)~=0,error('SF must be an integer power of 2');end %SF必须是2乘方数,此为64,执行SFlog2=log2(SF)=6,case6!
switch SFlog2
case 6
R=6;instate=zeros(1,6);instate(R)=1;%R=6,生成一个全0一维矩阵,把第R=6位赋值为1,结果是(0 0 0 0 0 1)
N=2^R-1;generator=[0 1 6];
otherwise
error('SF must be a power of 2,>= at 8 and <=2^6.')
end
[Sequence,Outstate]=LinearFeedbackShiftRegister(R,generator,instate,N);
Sequence=1-2*Sequence;
%End of function file.
(3)
%File LinearFeedbackShiftRegister.m
function[y,outstate]=LinearFeedbackShiftRegister(R,generator,instate,N)
if max(generator)>R %max():找向量中最大元素,generator=[0 1 6];最大为6,不大于R=6,跳出循环往下执行。
error(['The degree of the generator polynomial,',...
int2str(max(generator)),',cannot exceed R,',int2str(R),'.']);
%int2str 把整数数组转换为串数组 :如果max(generator)=7,则执行出错误:The degree of the generator polynomial,7,cannot exceed R,6.
end
if length(instate)>R %length:返回矩阵最长维的的长度。
error(['The length of the input state vector,',...
int2str(length(instate)),',cannot exceed R,',int2str(R),'.']);
end
a=sort(generator); %sort:由小到大排序。a=generator=[0 1 6]
P=length(generator);
M=length(instate)+1;
for k=1:N %N=2^R-1,周期长度
fee=instate((generator(2))); %调用generator的第二个值1,instate(1)=0
for q=3:P
fee=bitxor(fee,instate(generator(q)));
end
instate=[fee,instate];
y(k)=instate(1);
instate(M)=[];
end
outstate=instate;
%End of function file 展开
(1)
%File simple_dsss.m
code_length=10; %信息码元个数
SF=63; %扩频增益
fs=63000; %采样率
f=100; %信息码速率
%产生信息码
N=1:code_length;
rand('seed',0);
x=sign(rand(1,code_length)-0.5); %x为信息码
for i=1:code_length
s((1+(i-1)*fs/f):i*fs/f)=x(i); %每个信息码元内含fs/f=630个采样点
end
disp('信息码');disp(x);
%伪随机码由MSequence产生
%产生伪随机码
length=SF*code_length; %扩频后的码数
PN_code=MSequence(SF+1);
x_code=reshape(PN_code.'*ones(1,code_length),1,length); %把0,1序列码变换为-1,1调制码
for i=1:(code_length*SF)
w_code((1+(i-1)*10):i*10)=x_code(i); %k_code为扩频码,每个码元内含10个采样点
end
for i=1:SF
jkw_code((1+(i-1)*10):i*10)=PN_code(i);
end
%扩频
k_code=s.*w_code; %k_code 为扩频码
disp('扩频码');disp(k_code);
%BPSK调制
for i=1:length
AI=2;
dt=fs/(f*SF);
n=0:dt/9:dt; %一个载波周期内采样10个点
cI=AI*cos(2*pi*f*SF*n/fs);
signal_t((1+(i-1)*10):i*10)=k_code((1+(i-1)*10):i*10).*cI;
end
plot(signal_t);title('BPSK');
(2)
% File Msequence.m
function Sequence=MSequence(SF)
SFlog2=log2(SF);
if rem(SFlog2,1)~=0,error('SF must be an integer power of 2');end %SF必须是2乘方数,此为64,执行SFlog2=log2(SF)=6,case6!
switch SFlog2
case 6
R=6;instate=zeros(1,6);instate(R)=1;%R=6,生成一个全0一维矩阵,把第R=6位赋值为1,结果是(0 0 0 0 0 1)
N=2^R-1;generator=[0 1 6];
otherwise
error('SF must be a power of 2,>= at 8 and <=2^6.')
end
[Sequence,Outstate]=LinearFeedbackShiftRegister(R,generator,instate,N);
Sequence=1-2*Sequence;
%End of function file.
(3)
%File LinearFeedbackShiftRegister.m
function[y,outstate]=LinearFeedbackShiftRegister(R,generator,instate,N)
if max(generator)>R %max():找向量中最大元素,generator=[0 1 6];最大为6,不大于R=6,跳出循环往下执行。
error(['The degree of the generator polynomial,',...
int2str(max(generator)),',cannot exceed R,',int2str(R),'.']);
%int2str 把整数数组转换为串数组 :如果max(generator)=7,则执行出错误:The degree of the generator polynomial,7,cannot exceed R,6.
end
if length(instate)>R %length:返回矩阵最长维的的长度。
error(['The length of the input state vector,',...
int2str(length(instate)),',cannot exceed R,',int2str(R),'.']);
end
a=sort(generator); %sort:由小到大排序。a=generator=[0 1 6]
P=length(generator);
M=length(instate)+1;
for k=1:N %N=2^R-1,周期长度
fee=instate((generator(2))); %调用generator的第二个值1,instate(1)=0
for q=3:P
fee=bitxor(fee,instate(generator(q)));
end
instate=[fee,instate];
y(k)=instate(1);
instate(M)=[];
end
outstate=instate;
%End of function file 展开
1个回答
展开全部
length(x)函数是求x的长度,
如果x是向量,那就是向量长度或者说元素个数。
如果x是矩阵,那等于max(size(x)),也就是各维长度的最大值。比如二维的就是行数和列数的最大值。
你说P=length(generator)单独执行不了,
当然是了,要先有generator才能调用length()函数,要不它求谁的长度啊?
这个跟第一段里的length不同。
第一段的length是你自己定义的变量,而第三段的length()是个函数。
而且第一段是脚本文件或者说命令文件,相当于把命令行执行的一系列命令保存到一个m文件里。
而第二、三段是函数文件,虽然也是m文件,但首行是function ......,
代表不是脚本而是函数,里面的变量跟命令行里定义的变量无关。
如果是两个脚本或者脚本文件跟你手动敲的命令里,都定义了同样名字的变量或函数(同为变量或者同为函数),那后面执行的脚本或命令里的变量或函数就覆盖前面的,不过同样名字的变量跟函数间不会混淆的。
如果是脚本跟函数内部的同名变量,它们之间不会混淆的,函数内部的是局部变量,不受外部同名变量的影响。
如果x是向量,那就是向量长度或者说元素个数。
如果x是矩阵,那等于max(size(x)),也就是各维长度的最大值。比如二维的就是行数和列数的最大值。
你说P=length(generator)单独执行不了,
当然是了,要先有generator才能调用length()函数,要不它求谁的长度啊?
这个跟第一段里的length不同。
第一段的length是你自己定义的变量,而第三段的length()是个函数。
而且第一段是脚本文件或者说命令文件,相当于把命令行执行的一系列命令保存到一个m文件里。
而第二、三段是函数文件,虽然也是m文件,但首行是function ......,
代表不是脚本而是函数,里面的变量跟命令行里定义的变量无关。
如果是两个脚本或者脚本文件跟你手动敲的命令里,都定义了同样名字的变量或函数(同为变量或者同为函数),那后面执行的脚本或命令里的变量或函数就覆盖前面的,不过同样名字的变量跟函数间不会混淆的。
如果是脚本跟函数内部的同名变量,它们之间不会混淆的,函数内部的是局部变量,不受外部同名变量的影响。
东莞大凡
2024-08-07 广告
2024-08-07 广告
OpenCV标定板是东莞市大凡光学科技有限公司在相机标定中常用的工具。它通常由黑白格点按一定规则排列在平面上组成,如棋盘格或圆形格等。在相机标定时,将标定板置于不同位置和姿态下拍摄图像,利用OpenCV库中的函数检测标定板上的角点或圆心,进...
点击进入详情页
本回答由东莞大凡提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询