产生m序列的matlab程序

2024-11-22 14:27:05
推荐回答(1个)
回答(1):

function [m]=mxu(cn)
cn=[1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1]; %cn为移位寄存器,从左向右由小到大
an=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1] ; %初始寄存器内容
len=length(an); %所需的移位寄存器的长度
L=2^len-1; %m序列的长度
an=[zeros(1,len-1),1];%初始寄存器内容,zeros矩阵函数
m=zeros(1,L)%提速
m(1)=an(1); %m序列的第一个输出码元
for i=2:L
an1(1:len-1)=an(2:len);%移位
an1(len)=mod(sum(cn.*an),2);%寄存器与反馈的模2和
an=an1;%移位后的寄存器
m(i)=an(1);%新的寄存器输出
end
one_num=sum(m,2);
zero_num=L-one_num;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%画饼图
num=[one_num zero_num];%输入数据
name={'1的概率','0的概率'};%输入标签
name1={'1的数量','0的数量'};%标题
bili=num/L;
percent=round(bili*100000000000000000)/100;%计算百分比
percent=num2str(percent');%转化为字符型
percent=cellstr(percent);%转化为字符串数组
biaoti=num2str(num');%转化为字符型
biaoti=cellstr(biaoti);%转化为字符串数组
%在每个标签后加2个空格
for i=1:length(name)
name(i)={[name{i},blanks(2)]};
end
bfh=cellstr(repmat('%',length(num),1));%创建百分号字符串数组
c=strcat(name,percent',bfh');
bt=strcat(name1,biaoti');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%饼图
figure(1);
pie(num,c)
title(bt);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%画波形图
figure(2);
%subplot(3,1,2)
stairs(m)%对m序列绘图
xlabel('n');
ylabel('y');
title('m序列');
%%%%%%%%%%%%%%%%%%%%%%自相关函数由于阶数大所以运行时间久
%求自相关函数
%rho=zeros(1,L);
%bwb=zeros(1,L)
%xg=2*m-1; %变为双极性序列,1对应1,0对应-1
%for j=0:L-1
% bwb=[xg(1+j:L),xg(1:j)];
% rho(j+1)=sum(m.*bwb);
%end
%j=-L+1:L-1;%调整自相关图像显示的横坐标范围
%rho=[fliplr(rho(2:L)),rho];
%figure(3)
%plot(j,rho);
%axis([-L L -0.1 1.2]);%设置横纵坐标范围
%title('m序列的自相关函数');