使用MATLAB生成任何需要的伪随机码(PN码)

目录

一. 引言

二. 用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函数把伪随机序列打印在控制台,方便对比和查看。

        只需要修改生成多项式和初相,就可以生成任何伪随机序列。

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
使用Matlab生成伪随机序列,可以按照以下步骤进行操作。首先,定义移位寄存器的数量和M序列的周期。例如,如果我们选择四个移位寄存器和周期为15的M序列,可以将n设置为4,L设置为15。然后,定义每个移位寄存器的初始值,这些值应该是0或1。例如,可以将y1、y2、y3和y4分别设置为1、1、1和0。接下来,使用循环和异或操作生成伪随机序列。最后,可以选择将生成序列保存为.dat文件或.coe文件,以便进一步使用和验证。同时,可以使用disp函数将伪随机序列打印在控制台上,以便进行对比和查看。 #### 引用[.reference_title] - *1* *3* [使用MATLAB生成任何需要伪随机PN)](https://blog.csdn.net/qq_52137732/article/details/130006702)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [伪随机序列MATLAB实现](https://blog.csdn.net/weixin_40857506/article/details/118568490)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值