MATLAB生成M序列和Gold序列
M序列
最长线性移位寄存器序列又称为m序列,他是一种伪随机序列,在硬件电路中,m序列可以通过反馈移位寄存器产生,寄存器的反馈连接有生成m序列的本源多项式确定。
m序列的000映射成−1-1−1后,m序列的循环自相关函数(不归一化)在时间间隔为000处取最大值,其他时间间隔的循环自相关函数都是−1-1−1。本源多项式x6+x4+x3+x+1x^6+x^4+x^3+x+1x6+x4+x3+x+1产生的m序列的循环自相关函数如下图所示。
MATLAB生成M序列和计算循环自相关函数
function p=PnCode(polynomial,reg)
% PN码产生器函数
% polynomial为本原多项式,从左到右依次为高位到低位,且最高位与最低位必须为1;低位表示延时一个周期,高位依次顺延,例如[1 0 0 1 0 1]
% reg为置寄存器初始值,也相当于PN码的初始相位,左边为高位,如[1 0 0 1 0]表示延时5个周期的寄器和2个周期的寄存器初值为1
grade=length(polynomial)-1;%根据多项式计算延时级数
PN_Length=(2^grade-1); %计算PN码一个周期的长度
n=0;
c=zeros(1,grade);
for i=grade:-1:1if polynomial(i)==1n=n+1;c(n)=grade+1-i;end
end
%产生一个周期的PN码
p = zeros(1,PN_Length);
for i=1:PN_Length%从最高延时的寄存器中输出PN码p(i)=reg(1);%完成各抽头寄存器取值的模2加m = mod(reg*polynomial(1:grade)',2);%寄存器的值依次移位reg(1:(grade-1)) = reg(2:grade);reg(grade)=m;
end
function [r,lags] = periodic_corr(x,y)
% returns the periodic cross-correlation or autocorrelation of two discrete-time sequences.
% Rxy(m) = sum(i) x(i)Y((i+m) mod L)
% x input array
% y input array
% r periodic cross-correlation or autocorrelation
% lags Lag indices
if size(x,2) == 1 && ~isscalar(x)x = x';
end
if size(y,2) == 1 && ~isscalar(y)y = y';
end
if size(x,2)~=size(y,2)error(message('x y dimension mismatch'));
end
L = size(x,2);
r = zeros(1,2*L-1);
for m = 1:Lif m == 1r(L) = x*y'/L;elser(L+m-1) = x*y'/L;r(m-1) = x*y'/L;endy = circshift(y,-1);
end
lags = -(L-1):L-1;
end
M序列优选对
对于由两个nnn阶本源多项式生成的m序列aaa和bbb,如果它们的互相关函数的绝对值的最大值满足公式(1)(1)(1)所示的关系,则m序列aaa和bbb构成优选对。∣Ra,b(τ)∣max={2n+12+1,n为奇数2n+22+1,n为偶数且不是4的倍数(1)\lvert R_{a,b}(\tau) \rvert_{max}=\begin{cases} 2^{\frac{n+1}{2}}+1,\quad n为奇数\\ 2^{\frac{n+2}{2}}+1, \quad n为偶数且不是4的倍数 \end{cases} \tag{1}∣Ra,b(τ)∣max={22n+1+1,n为奇数22n+2+1,n为偶数且不是4的倍数(1)
m序列优选对具有三值互相关特性,即它们的循环互相关函数只能取三个值。nnn为奇数时,互相关函数取−1-1−1、−(2n+12+1)-(2^{\frac{n+1}{2}}+1)−(22n+1+1)和2n+12−12^{\frac{n+1}{2}}-122n+1−1;nnn为偶数且不是4的倍数时,互相关函数取−1-1−1、−(2n+22+1)-(2^{\frac{n+2}{2}}+1)−(22n+2+1)和2n+22−12^{\frac{n+2}{2}}-122n+2−1。
下面给出几组m序列优选对的本源多项式。
阶数 | 本源多项式 1 | 本源多项式 2 |
---|---|---|
3 | x3+x+1x^3+x+1x3+x+1 | x3+x2+1x^3+x^2+1x3+x2+1 |
5 | x5+x2+1x^5+x^2+1x5+x2+1 | x5+x4+x2+x+1x^5+x^4+x^2+x+1x5+x4+x2+x+1 |
6 | x6+x+1x^6+x+1x6+x+1 | x6+x5+x2+x+1x^6+x^5+x^2+x+1x6+x5+x2+x+1 |
6 | x6+x5+1x^6+x^5+1x6+x5+1 | x6+x5+x4+x+1x^6+x^5+x^4+x+1x6+x5+x4+x+1 |
本原多项式x6+x+1x^6+x+1x6+x+1和x6+x5+x2+x+1x^6+x^5+x^2+x+1x6+x5+x2+x+1产生的m序列的互相关函数(不归一化)如下图所示,它们的三个互相关值分别为−1-1−1、−17-17−17和151515。
GOLD序列
Gold序列是由2个码长相等、码时钟速率相同的m序列优选对模二加和构成的,每改变2个m序列相对位移就可以得到一个新的Gold序列。
对于nnn阶本源多项式生成的m序列优选对,m序列的周期为2n−12^n-12n−1,m序列优选对可以有2n−12^n-12n−1种模2加组合,再加上原来的2个m序列,可以得到一族2n+12^n+12n+1个Gold序列。Gold序列的自相关特性不如m序列,但是同一族的Gold序列的互相关特性继承了m序列优选对的互相关特性,即三值互相关特性。由本原多项式x6+x+1x^6+x+1x6+x+1和x6+x5+x2+x+1x^6+x^5+x^2+x+1x6+x5+x2+x+1获得的m序列优选对生成65个Gold序列,随便抽两个Gold序列计算循环互相关函数,如下图所示。
平衡GOLD序列
如果Gold序列中111的数量比−1-1−1的数量多一个,那么该Gold序列称为平衡Gold序列。扩频时采用平衡Gold序列有许多优点,比如平衡码能更好地抑制载波。当nnn为奇数时,一族Gold序列中平衡序列和非平衡序列出现的概率各占50%;当nnn为偶数且不为4的倍数时,一族Gold序列中平衡序列出现的概率为75%,非平衡序列为25%。
MATLAB生成Gold序列和寻找平衡序列
MATLAB中可以用comm.GoldSequence函数生成Gold序列,具体用法可以参考help文档。找平衡序列的方法是暴力枚举。
function [g,balanced] = GoldCode(polynomial1,polynomial2)
% Generate Gold sequence
% polynomial1、polynomial2 primitive polynomial, lists the coefficients of
% the polynomial in descending order of powers.
% The first and last elements must equal 1, and
% the length of this vector requires a value of
% n+1, where n is the degree of the primitive polynomial.
% polynomial1 and polynomial2 generate a pair of m
% sequences which is a preferred pair
% g Gold sequences
% balanced index of balanged Gold sequence in gif length(polynomial1) ~= length(polynomial2)error(message('polynomial1 polynomial2 dimension mismatch'));
end
grade=length(polynomial1)-1;%根据多项式计算延时级数
gold_length=(2^grade-1); %计算PN码一个周期的长度
g = zeros(gold_length+2,gold_length);
balanced = zeros(gold_length+2,1);
for n = -2:gold_length-1goldseq = comm.GoldSequence('FirstPolynomial',polynomial1,...'SecondPolynomial',polynomial2,...'FirstInitialConditions',[zeros(1,grade-1) 1],...'SecondInitialConditions',[zeros(1,grade-1) 1],...'Index',n,'SamplesPerFrame',gold_length);x = goldseq()';
% g(n+3,:) = 2*x-1;g(n+3,:) = x;if length(find(x == 1)) == (gold_length+1)/2balanced(n+3) = 1;end
end
balanced = find(balanced == 1);
end
参考:Gold序列与m序列仿真应用
辛肖明, 陈琼. m序列优选对及平衡Gold码序列[J]. 北京理工大学学报, 1990, 10(4):106-113.
MATLAB生成M序列和Gold序列相关推荐
- 多径衰落信道下基带模型的多用户BPSK直接序列扩频系统MATLAB仿真(m序列、Gold序列和正交Gold序列)
接上一节 单径Rayleigh信道下基带模型的多用户BPSK直接序列扩频系统MATLAB仿真(m序列.Gold序列和正交Gold序列) 下面再来看一下m序列与正交Gold序列在多径衰落信道下的性能. ...
- 单径Rayleigh信道下基带模型的多用户BPSK直接序列扩频系统MATLAB仿真(m序列、Gold序列和正交Gold序列)
接上一节 高斯信道下基带模型的多用户BPSK直接序列扩频系统MATLAB仿真(m序列.Gold序列和正交Gold序列) 下面再来看一下m序列与正交Gold序列在单径Rayleigh衰落信道下的性能. ...
- MATLAB仿真m序列,Gold序列,Kasami序列扩频码性能仿真分析
MATLAB仿真m序列,Gold序列,Kasami序列扩频码性能仿真分析 形式:程序+课程设计报告 程序实现功能: t1.m序列生成和抽取(自相关和互相关特性分析) t2.生成m序列优选对 t3.Go ...
- 高斯信道、单径Rayleigh信道和多径衰落信道下基带模型的多用户BPSK直接序列扩频系统MATLAB仿真(m序列、Gold序列和正交Gold序列)
前3节仿真了基带BPSK调制下DSSS-CDMA系统在高斯信道.单径Rayleigh衰落信道和多径衰落信道下的性能仿真,同时采用了m序列和正交Gold序列进行对比. 高斯信道下基带模型的多用户BPSK ...
- 调整后的m序列、Gold序列
第一章扩展频谱通信的基本概念 1.1扩频通信的理论基础 1948年,香农提出了著名的香农公式.香农用信息论的理论推导出了带宽受限且有高斯白噪声干扰的信道的极限.无差错的信息传输速率. 香农信道公式是在 ...
- 《C》C语言编程实现任意阶数的“Gold序列”并通过gnuplot绘图——在知道本原多项式的前提下
关于Gold序列的构建方法 在我之前的博客中已详细介绍,请点击→\rightarrow→C语言编程实现指定阶"Gold序列"并通过gnuplot绘图 一.C语言编程实现任意阶Gol ...
- matlab生成m序列的方法
引言 m序列属于伪随机序列的一种.在通信领域应用较为广泛.由于其具有很好的伪噪声特性,因此在保密通信中,可以将其应用在高可靠性的保密通道中.另外,雷达领域也有广泛应用,伪随机相位编码脉冲/连续波雷达中 ...
- matlab生成均匀部分散点图,应用halton序列生成均匀散点图
前言 一门课的作业要用RBF-DQ方法计算流场.简单来讲就是要在无网格的条件下用高精度格式实现流场的仿真计算.生成散点图时,用蒙特卡洛的方法得到的散点图分布不是很均匀,于是想到一种叫做halton的序 ...
- 关于matlab生成M序列的代码
#关于matlab生成M序列的代码 参考了相关书籍和网上matlab生产m序列的代码,我发现和书上的定义有些不一样(系统辨识原理及其运用-李彦俊)于是我就自己学了一个m文件来供大家参考.使用起来简单方 ...
- matlab伪随机码,Matlab生成M序列的伪随机码
图3.5 线性反馈移位寄存器 MATLAB生成M序列伪随机码函数如下: % 在MATLAB命令窗口输入以下: % fbconnection=[0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 ...
最新文章
- Yii框架的form处理
- Spring Boot-@EnableWebMvc注解
- python中readlines_python中read() readline()以及readlines()用法
- python爬取知乎live_Python爬虫 - 简单抓取百度指数
- C#LeetCode刷题-树状数组
- 错误整理:No plugin found for prefix 'jetty' in the current project and in the plugin groups
- 利用阿里云搭建Java Web开发环境
- java高性能反射框架_终于有人把性能优化讲清楚了!阿里架构师推荐的Java性能权威指南可太强了...
- java mysql 分页计算公式_关于Java的分页算法,急!
- java default修饰符_Java学习笔记--- 变量类型,修饰符
- 华为IPD你学不会(转)
- CCPP Blog 目录
- 真的精采!AI赢了DOTA界的世界冠军 让人兴奋又纠结
- 【转】北京大学ACM题目算法分析推荐 acm解决方法
- ubuntu 使用 egl
- 惠普笔记本按开机键后电源灯亮的,但是屏幕一直是黑的,只有大写锁定键闪烁,闪3次一个循环,听得到风扇...
- NAT转换技术(SNAT、MASQUERADE、DNAT策略)及代理服务(squid服务)
- JPA二:FindBy和JPQL
- GPS理论知识NMEA 0813协议
- nyoj144 小珂的苦恼
热门文章
- arcgis 批量计算几何_ArcGIS四种计算图斑面积的方法
- 金九银十面试季,字节跳动面试题拿走不谢(附详细答案解析)
- 双极性电压测量电路 负电压测量电路 正负电压测量电路 运放OP07运用 加法器 电压跟随器
- 用于遥感图像语义分割和单视图高度估计的编码器-双解码器IGARSS2019
- 使用PostMan调试webService接口
- 零基础搭建双端影视盒子——一、搭建运行环境
- Excel常用10个函数
- 怎么看计算机运行时间,怎么查看电脑运行时间_怎么查看电脑运行记录
- 震网三代在metasploit-framework上的复现与利用
- Linux的网络基础