《C》C语言编程实现指定阶“m序列”并通过gnuplot绘图
一、怎么构建m序列
m序列是一种基本的伪随机序列,有优良的自相关函数,易于产生和复制,在扩频技术中得到了广泛的应用。长度为 位的m序列可以用n级线性移位寄存器来产生。如下图所示:
将发生器写成如下方程:f(x)=C0+C1x+C2x2+...+Cnxn=∑i=0nCixif(x)=C_0+C_1x+C_2x^2+...+C_nx^n=\sum_{i=0}^nC_ix^if(x)=C0+C1x+C2x2+...+Cnxn=i=0∑nCixi
这方程成为特征多项式。式中xix^ixi仅指明其系数CiC_iCi的值(1或0),x本身的取值并无实际意义,也不需要去计算x的值。例如,若特征方程为f(x)=x4+x+1f(x)=x^4+x+1f(x)=x4+x+1则它仅表示 ,x4,x1和x0x^4,x^1和x^0x4,x1和x0的系数C4=C1=C0=1C_4=C_1=C_0=1C4=C1=C0=1,其余为0。经严格证明:若反馈位移寄存器的特征多项式为本原多项式,则位移寄出器能产生m序列。只要找到本原多项式,就可构成m序列发生器。
二、C语言编程实现“六阶位移寄存器”m序列(即n=6)
1. 六阶m序列分析
- 六阶m序列的周期:p=26−1=63p=2^6-1=63p=26−1=63
- 六阶m序列的本原多项式:f(x)=x6+x+1f(x)=x^6+x+1f(x)=x6+x+1
C6=C1=C0=1C_6=C_1=C_0=1C6=C1=C0=1 - 六阶m序列的序列发生器结构图:
观察上图可知反馈量为:a5⊕a0a_5\oplus a_0a5⊕a0
2. 六阶m序列源程序
【6msquence.c】
#include<stdio.h>main()
{ int a[6] = {0,0,0,0,0,1}; //六级寄存器初始化[0 0 0 0 0 1]int m[63];int temp; //temp用于存放反馈量 float period = 0.0; //时间间隔for(int i=0;i<63;i++) {m[i] = a[0];temp = a[5]^a[0];a[0] = a[1]; a[1] = a[2];a[2] = a[3];a[3] = a[4];a[4] = a[5];a[5] = temp;} for(int j=0;j<63;j++){for(int k=0;k<101;k++){period += 0.01; printf("%f\t%d\n",period,m[j]);}}
}
三、gnuplot绘制图像
关于gnuplot的详细教程请点击→\rightarrow→Java计算出三角函数的数据并通过gnuplot作出波形图
1. 编译C程序
博主使用TCC编译器将.c
文件编译为.exe
文件。
2. 运行程序
运行.exe
文件,观察输出结果,第一列为时间,第二列为m序列数据。
3. 绘制序列图
- 绘图指令:
gnuplot>plot [0:80] [-1.5:1.5] "<6msquence.exe" u 1:2 w l title "6msquence"
- 绘图演示:
四、验证m序列
1. m序列特性验证
改变源程序【6msquence.c】第22行至第28行的内容:
for(int j=0;j<63;j++)
{printf("%d",m[j]);
}
运行后可以观察到“1”和“0”的数量,运行结果如下图:
程序计算结果符合m序列的特点:在一个周期63(p=26−1p=2^6-1p=26−1)内“1”为32(2n−12^{n-1}2n−1)个,“0”为31(2n−1−12^{n-1}-12n−1−1)个,“1”比“0”多一个。
2. 序列图验证
为了验证C语言编程实现的m序列是否正确,博主使用matlab构建了一个六阶m序列发生器,生成的m序列图如下:
C语言编程实现的m序列图如下:
对比两张图我们发现图形一模一样。
《C》C语言编程实现指定阶“m序列”并通过gnuplot绘图相关推荐
- 《C》C语言编程实现任意阶数的“m序列”并通过gnuplot绘图——在知道本原多项式的前提下
关于m序列的构建方法 在我之前的博客中已详细介绍,请点击→\rightarrow→C语言编程实现指定阶"m序列"并通过gnuplot绘图 一.C语言编程实现任意阶m序列 1. 任意 ...
- 《C》C语言编程实现任意阶数的“Gold序列”并通过gnuplot绘图——在知道本原多项式的前提下
关于Gold序列的构建方法 在我之前的博客中已详细介绍,请点击→\rightarrow→C语言编程实现指定阶"Gold序列"并通过gnuplot绘图 一.C语言编程实现任意阶Gol ...
- c语言编程输出指定范围的素数,C语言输出范围内所有素数
用C语言输出100之间的所有质数 用C语言输出100之间的所有质数. 各位. 首先新建一个空白的c语言文件,引入头文件,头文件中包括math库,稍后会用到,建立主函数: 主函数上面新建一个判断素数的函 ...
- c语言离散卷积编程,实验一 离散卷积的C语言编程.ppt
实验一 离散卷积的C语言编程.ppt 实验一 离散卷积的C语言编程实验 DSP实验室 实验性质 综合设计性实验 实验目的 1 了解和认识常用的各种信号: 2 掌握卷积的定义和计算方法: 3 掌握在计算 ...
- 离散卷积的c语言编程实验,数字信号处理实验一离散卷积c语言编程.ppt
数字信号处理实验一离散卷积c语言编程 实验一 离散卷积的C语言编程实验 DSP实验室 2005 实验性质 综合设计性实验 实验目的 1 了解和认识常用的各种信号: 2 掌握卷积的定义和计算方法: 3 ...
- c语言离散卷积编程,数电实验一 离散卷积的C语言编程.ppt
数电实验一 离散卷积的C语言编程.ppt 实验一 离散卷积的C语言编程实验,DSP实验室,实验性质,综合设计性实验,实验目的,1 了解和认识常用的各种信号: 2 掌握卷积的定义和计算方法: 3 掌握在 ...
- c语言编程四门成绩,C语言编程题与答案
<C语言编程题与答案>由会员分享,可在线阅读,更多相关<C语言编程题与答案(25页珍藏版)>请在人人文库网上搜索. 1.WORD格式-可编辑-C语言编程题1. (*)求分数序列 ...
- 分数序数之和c语言,用c语言求解:有一分数序列2/1,3/2,5/3,8/5,13/8,21/13,…求这个数列的前20项之和....
用c语言求解:有一分数序列2/1,3/2,5/3,8/5,13/8,21/13,-求这个数列的... 3个答案 提问时间: 2010-12-22 2个赞 回答:1.首先弄清楚这组分数序列的规律:从 ...
- 有一分数序列求前20项和答案c语言,用c语言求解:有一分数序列2/1,3/2,5/3,8/5,13/8,21/13,…求这个数列的前20项之和....
用c语言求解:有一分数序列2/1,3/2,5/3,8/5,13/8,21/13,-求这个数列的... 3个答案 提问时间: 2010-12-22 2个赞 回答:1.首先弄清楚这组分数序列的规律:从 ...
- C语言编程>第二十一周 ⑥ 请补充main函数,该函数的功能是:从键盘输入一个字符串,即一个指定,然后把这个字符及其后面的所有字符全部删除,结果仍然保存在原串中。
例题:请补充main函数,该函数的功能是:从键盘输入一个字符串,即一个指定,然后把这个字符及其后面的所有字符全部删除,结果仍然保存在原串中. 例如:输入"1234567",指定字符 ...
最新文章
- [Spring 深度解析]第2章 Spring基础
- 郑州升达学院计算机考试,第35次全国计算机等级考试报名工作通知
- List集合2-LinkedList
- dotnet获取PDF文件的页数
- 2020年云计算的十大新兴趋
- PHP提高性能的几个Tips
- php函数fiter,PHP filter_var() 函数和 Filter 函数使用说明
- TensorFlow错误ValueError: No gradients provided for any variable
- 如何使用IBM SPSS Statistics进行描述性分析
- 安卓开发示例代码总结(持续更新中...)
- java hibernate 包_hibernatejar包官方下载-Hibernate.jar包下载 --pc6下载站
- 东方博宜 #1008字符图形9-数字正三角
- Java实现随机生成车牌号
- 百度智能云 x 华栖云 | 媒体智能化探路者
- 如何区分集线器、交换机、路由器呢
- python中怎么编写程序_python写完程序怎么运行
- BootStrap---day02、03微金所项目
- 求职路艰辛,深圳天瑞地安助力求职人对工作感到无忧
- 轻听-最好的解压助眠医疗轻音乐集
- rhel配置磁盘分区_linux系统安装细节及磁盘分区划分