m序列生成方法及其fpga实现

这篇具有很好参考价值的文章主要介绍了m序列生成方法及其fpga实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、什么是PN码?PN码有什么用处?

1、 什么是PN码
PN码的英文名字叫Pseudo-Noise Code,(pseudo:adj.伪; 假的),直译过来就是伪噪声码,这里噪声主要是想表达随机的意思。其中最重要的一种PN序列叫m序列(全称叫最长线性反馈移位寄存器序列),说它重要主要是研究得早,理论成熟,用得多。

其本质上就是一串周期性的随机数,周期是由移位寄存器的位数决定的,序列是由生成多项式(有的地方叫本原多项式、反馈系数)决定的。这意味着,对于掌握了长度和生成多项式的人来说,这段序列就是确知的,对于不知道长度和生成多项式的人来说,就是随机的,不可捉摸的(或者说解密代价极大的)。

2、PN码有什么用处
PN码一般用在扩频通信里面,另外有扰码、测量延时和距离、测量误码率、数据加密等用途。

二、如何生成m序列?m序列有什么性质?生成多项式怎么设置?

1、如何生成PN码
m序列生成方法及其fpga实现

2、m序列的性质:

  • 均衡性:0、1各占一半,1比0多一个;
  • 游程特性:就是说连0段或连1段的,长度为1的约占1/2,长度为2的约占1/4,长度为3的约占1/8,按照三位m序列想一下就能想明白;
  • 移位相加性:自己+下一个时钟的自己,等于另外一个移位序列;
  • 相关函数: R ( τ ) = { 1 , if  τ = 0 − 1 / L , if  τ = 1 R(\tau) =\begin{cases} 1, & \text{if } \tau = 0 \\-1/L, & \text{if }\tau = 1\end{cases} R(τ)={1,1/L,if τ=0if τ=1

3、生成多项式怎么设置?
这项工作交给搞理论研究的数学家就行了,不按这个来的话m序列的性质就会出问题,如果想深究这种东西话,可以看下这篇博客:m序列产生原理的是什么?m序列的产生与本原多项式
m序列生成方法及其fpga实现
4、常见m序列表格的使用方法

需要注意的就是LSB(最低有效位)对应的是C0(模二加后的反馈输入)
m序列生成方法及其fpga实现

四、如何用FPGA来实现?

话不多说,直接上代码:

module PN_1023_gen_1  (sysclk,reset,pnclk, 
							  pnxs1_allone,pnxs1_code,							     
		                 pnclkpos);
					    
	
	input sysclk,reset,pnclk;//系统钟,高电平复位,码钟
	output pnxs1_allone,pnxs1_code; //allone是周期重复指示(因为这里初相是1023嘛),后面一个是输出的m码序列,
	reg    pnxs1_allone,pnxs1_code;
	  
	output pnclkpos;//相当于一个使能信号,也可用来做stp的触发信号
	wire pnclkpos;
	
	reg [9:0]  gxs1regshift;	  
	
	wire polyvalgxs1;
	
	reg [9:0]  gxs1_counter;
	reg [1:0]  tempa,tempb;
	
	parameter  gxs1_poly = 407;	
	parameter  gxs1_ip   = 1023;
	parameter  jdxs_cnt  = 1023;
	
	
/*-------------------------------------code clk gen---------------------------*/
always @(posedge sysclk)
	begin
		if(reset)
			begin
				tempb<=2'd0;
			end
		else
			begin
				tempb<={ tempb[0],pnclk };
			end
	end
assign	pnclkpos=( tempb[0] & ~tempb[1] );//边缘检测方法


/*-----------------------------------------short(1023) code gen------------------*/
assign polyvalgxs1=^(gxs1_poly & gxs1regshift);
							
always @(posedge sysclk)
	begin
		if(reset)
			begin
				gxs1regshift<=gxs1_ip;		
				gxs1_counter<=0;
			end
		else
			begin
				if(pnclkpos)
					begin
						if(gxs1_counter < jdxs_cnt-1)
							begin
								gxs1regshift<={polyvalgxs1,gxs1regshift[9:1]};																
								gxs1_counter<=gxs1_counter+18'd1;
							end
						else
							begin
								gxs1regshift<=gxs1_ip;								
								gxs1_counter<=0;
							end
					end
				else
					begin
						gxs1regshift<=gxs1regshift;						
						gxs1_counter<=gxs1_counter;
					end
			end
	end
	
always @(posedge sysclk)
	begin
		if(reset)
			begin
				pnxs1_code<=0;
				pnxs1_allone<=1;				
			end
		else
			begin
				pnxs1_code<=gxs1regshift[0];//每经过一个码钟,gxs1regshift序列才移位一次,所以要传重复的值十次
				pnxs1_allone<=(gxs1regshift==gxs1_ip);				
			end
	end
endmodule  

产生好的模块长这样:
m序列生成方法及其fpga实现

五、m序列的存在的问题及改进方法

  1. 存在的问题:
  • 周期相同的m序列可用的生成多项式少,比如L=1023的生成多项式只有60个,这就意味着解密所付出的代价还不够大
  • 互相关系数大,这会导致m序列直接用作扩频码时会产生严重的多址干扰(MAI)
  1. 解决方法:gold序列

gold序列就是将两个能组成优选对的m序列的输出结果进行模二加。gold序列能同时解决上述两个问题。

六、产生gold序列的工程文件

这附一个产生gold序列的工程文件,两块钱就能直接下载,也可以在评论里留下联系方式,我看见了就私发给你。
注意一下,这个工程文件用到的quartus是13.1版,FPGA是EP4CE115F29C7,如果版本不对的话,下载的工程文件可能没法用。但里面涉及到的pll模块、按键复位模块、gold码生成模块都是可以直接用的

下载链接:
https://download.csdn.net/download/weixin_45827703/58007033文章来源地址https://www.toymoban.com/news/detail-435500.html

到了这里,关于m序列生成方法及其fpga实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 4G工业网关是什么?具体有什么用处?-天拓四方

    在当下工业数字化浪潮的推动下,物联网(IoT)技术的应用已渗透到各个行业,特别是工业领域。而在这个过程中,4G工业网关凭借其独特的功能和特性,发挥着至关重要的角色。本文旨在深入剖析4G工业网关的内涵及其应用价值。 首先,我们来了解一下4G工业网关是什么。简

    2024年04月23日
    浏览(26)
  • 数据挖掘|序列模式挖掘及其算法的python实现

    序列(sequence)模式挖掘也称为序列分析。 序列模式发现(Sequential Patterns Discovery)是由R.Agrawal于1995年首先提出的。 序列模式寻找的是事件之间在顺序上的相关性。 例如,“凡是买了喷墨打印机的顾客中,80%的人在三个月之后又买了墨盒”,就是一个序列关联规则。对于保险

    2024年04月09日
    浏览(47)
  • 企业通过CRM分析销售数据有什么用处?

    企业为什么要分析CRM销售数据? 分析CRM销售数据的目的,是为企业提供对其销售业绩、客户行为和市场趋势的宝贵见解。通过分析这些数据,企业可以确定他们表现良好的领域和需要改进的领域。 通过分析CRM销售数据,企业可以跟踪他们在一段时间内的销售业绩,确定趋势

    2024年02月15日
    浏览(28)
  • 手把手教你通过PaddleHub快速实现输入中/英文本生成图像(Stable Diffusion)

    近来,基于Diffusion的文图生成模型比较火,用户输入一句话,模型就可以生成一副对应的图像,还是很有意思的。本文记录了通过PaddleHub快速实现上述任务的过程,以供参考。 1、安装PaddlePaddle PaddleHub底层依赖于百度自研的开源框架PaddlePaddle,可以根据官方提供的方式来快速

    2024年01月17日
    浏览(37)
  • linux内网穿透应用场景有哪些?快解析有什么用处?

    随着网络技术的不断发展,无论是工作上还是在生活中人们对网络的依赖和需求越来越高。Linux内网穿透作为一种创新的解决方案,为我们提供了无限可能。 首先我们了解一下Linux操作系统。Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多

    2024年02月14日
    浏览(38)
  • idea快速生成Serializable序列化UID的方法

    ①在idea的File–Settings–Editor–Inspections里搜索 Serializable class without serialVersionUID 记得点Apply和OK

    2024年02月12日
    浏览(32)
  • 【Linux】什么是.bashrc,以及其使用方法

    经常在配置linux各种环境的时候,遇到对bashrc的配置。当时也只是机械地跟着教程,一步步输入指令;遇到的次数多了,想知道.bashrc究竟是何方神圣。于是整理了下其主要功能以及使用方法。 .bashrc,属于一种系统隐藏文件,常常可见于 macOS 或者主流的 Linux 发行版。如果你

    2024年03月14日
    浏览(33)
  • dedecms织梦实现中英文分页功能方法步骤

    前言 之前做项目的时候遇到一个需求,因为是中英文版本的网站,所以分页也就需要对应的英文,在论坛、百度等地方搜索了很久均没能找到满意的答案,不过今天找到下面这篇内容,并进行测试,发现可以适合织梦目前最新的5.7版,并且已经成功的实现,所以与大家分享下

    2023年04月24日
    浏览(41)
  • 生成对抗网络GAN(MNIST实现、时间序列实现)

    生成对抗网络(Generative Adversarial Network,简称GAN)是一种深度学习模型,由Ian Goodfellow等人于2014年提出。它由两个主要组件组成:生成器(Generator)和判别器(Discriminator)。GAN的目标是通过两个网络之间的对抗学习来生成逼真的数据。 生成器(Generator): 生成器是一个神经

    2024年01月21日
    浏览(35)
  • 【FPGA】Xilinx vivado生成.dcp文件的方法

    DCP文件是vivado软件生成的网表文件,主要起到加密的作用,在不需要提供源代码的情况下运行工程。 首先,需要新建工程,工程顶层文件就是生成后dcp文件的名称,然后在vivado-Tool-setting-project-setting-synthesis路径下,在More options中输入-mode out_of_context(综合时不产生IO buffer),

    2024年04月12日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包