目录
一. 引言
二. 用matlab生成伪随机序列
一. 引言
伪随机码(PN码),只包含0和1,是一种人为随机创造的随机序列。应用范围广,通信中经常使用到,比如伪码测距等。为了验证所给的生成函数是否正确,经常需要使用matlab仿真查看所生成的随机序列。
二. 用matlab生成伪随机序列
下面是我使用的生成方法:
clear;
clc;
fbconnection=[0 1 0 1 1 1 1 1]; % fbconnection为m序列的一个生成多项式 f(x)=X8+X6+X4+X3+X2+X1+1;实际要看给的发生器框图
mseq=m_sequence(fbconnection);
disp(mseq);
save('PNdata.dat','mseq'); %保存为.dat文件,可以用BES打开
%生成coe文件
n=length(fbconnection);
N=2^n-1; %循环周期
a=randi([0,1],1,1024);
fid=fopen('PNData1.coe','w');
fprintf(fid,'memory_initialization_radix=2;\n'); %memory_initialization_radix=a中a表示进制数,例如二进制即a=2,四进制a=4;
fprintf(fid,'memory_initialization_vector=\n'); %memory_initialization_vector=后接的是数值格式,若randix=a中,a=2,则vector中只能是二进制数
for i=1:255
fprintf(fid,'%d,\n',mseq(i));
end
fprintf(fid,'%d,\n',mseq(N));
%定义伪码生成函数
function mseq=m_sequence(fbconnection)
n=length(fbconnection);
N=2^n-1; %循环周期
register=[1,1,1,1,1,1,1,1];%初相FFFF 正序:register=[x1,x2,x3,x4,x5,x6,x7,x8]
mseq(1)=register(n);
for i=2:N
NewRegister(1)=mod(sum(fbconnection.*register),2); % .* 按位乘 sum(A,2) 是包含每一行总和的列向量。
for j=2:n % sum(a),求a中数据的和。mod(a,2),求a除以2的余数,保证输出0或者1。
NewRegister(j)=register(j-1); %确定好register(1)后,其他位循环右移
end
register=NewRegister;
mseq(i)=register(n);
end
end
可以生成.dat文件和.coe文件。.dat可以用查看帧的软件查看,比如BES,主要是为了方便使用十六进制。.coe文件可以使用notepad++查看,主要是为了FPGA开发使用,也可以验证生成的对不对。同时我也用了disp函数把伪随机序列打印在控制台,方便对比和查看。文章来源:https://www.toymoban.com/news/detail-513761.html
只需要修改生成多项式和初相,就可以生成任何伪随机序列。文章来源地址https://www.toymoban.com/news/detail-513761.html
到了这里,关于使用MATLAB生成任何需要的伪随机码(PN码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!