文档库 最新最全的文档下载
当前位置:文档库 › 约瑟夫环问题

约瑟夫环问题

约瑟夫环问题
约瑟夫环问题

基于Matlab的数字锁相环的仿真设计金佳琪

基于Matlab的数字锁相环的仿真设计 1115101021 金佳琪 摘要:锁相环是一个能够跟踪输入信号相位变化的闭环自动跟踪系统。它广泛应用于无线电的各个领域,并且,现在已成为通信、雷达、导航、电子仪器等设备中不可缺少的一部分。然而由于锁相环设计的复杂性,用SPICE对锁相环进行仿真,数据量大,仿真时间长,而且需进行多次仿真以提取设计参数,设计周期长。本文借助于Matlab中Simulink仿真软件的灵活性、直观性,在Simulink 中利用仿真模块搭建了全数字锁相环的仿真模型。利用仿真模块搭建了全数字锁相环的仿真模型,通过仿真达到了设计的目的,验证了此全数字锁相环能达到的各项功能要求。 关键词:锁相环,MATLAB,锁定,Simulink,频率合成 全数字锁相环 随着最近几年数字电路技术的发展,锁相环路在数字领域获得了越来越多的使用。与模拟锁相环相比,全数字锁相环不含无源器件、面积小、具有较强的抗噪声能力,锁定时间短,可以很方便地在各个工艺之间转换,重用性高,设计周期短。 方案介绍 全数字锁相环包括数字鉴相鉴频器(PDF)、数字滤波器(LPF)、数字振荡器(NCO)三部分,如下图12所示: 图1 全数字锁相环的仿真框图 由图12和图11的比较可以看出,全数字锁相环实际上是通过将模拟锁相环路替换成数字电路得到的。这意味着鉴相鉴频器(PDF)、环路低通滤波器(LPF)需要转换到离散系统。环路低通滤波器(LPF)可以通过一个希望的传输函数的拉普拉斯变换的z变换而得到。压控振荡器需要转换成数控振荡器(Numerically Controlled Oscilaator)。下面详细讨论鉴相鉴频器(PDF)、环路低通滤波器(LPF)以及数控振荡器(Numerically Controlled Oscilaator)模型的建立。 模型的建立 正和上述基于频率合成的模拟锁相环的仿真模型的建立相似,全数字锁相环仿真模型的建立也基于相同的算法: 锁相环闭环系统状态的变化依赖于PFD输出的相位误差。相位误差输出一次,锁相环状态改变一次;PFD不输出相位误差,锁相环里的所有信号均不改变状态。根据上

约瑟夫问题数据结构实验报告汇总.

中南民族大学管理学院学生实验报告 实验项目: 约瑟夫问题 课程名称:数据结构 年级: 专业:信息管理与信息系统 指导教师: 实验地点:管理学院综合实验室 完成日期: 小组成员: 2012 学年至2013 学年度第1 学期

一、实验目的 (1)掌握线性表表示和实现; (2)学会定义抽象数据类型; (3)学会分析问题,设计适当的解决方案; 二、实验内容 【问题描述】:编号为1,2,…,n的n 个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自 1 开始顺序报数,报到m 时停止报数。报m 的人出列,将他的密码作为新的m 值,从他在顺时针方向上的下一个人开始重新从1 报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。 【基本要求】:利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。 【测试数据】:m 的初值为20;密码:3,1,7,2,4,8,4(正确的结果应为6,1,4,7,2,3,5)。 三、实验步骤 (一)需求分析 对于这个程序来说,首先要确定构造链表时所用的插入方法。当数到m 时一个人就出列,也即删除这个节点,同时建立这个节点的前节点与后节点的联系。由于是循环计数,所以才采用循环列表这个线性表方式。 程序存储结构利用单循环链表存储结构存储约瑟夫数据(即n个人的编码等),模拟约瑟夫的显示过程,按照出列的顺序显示个人的标号。编号为1,2,…,n 的 n 个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值 m,从第一个人开始按顺时针方向自1 开始顺序报数,报到 m 时停止报数。报 m 的人出列,将他的密码作为新的 m 值,从他在顺时针方向上的下一个人开始重新从 1 报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。基本要求是利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。 程序执行的命令(1)构造单向循环链表。 (2)按照出列的顺序引出各个人的标号。 测试数据 m 的初值为 20;密码:3,1,7,2,4,8,4(正确的结果应为 6,1,4,7,2,3,5) (1)、插入:在把元素插入到循环链表中时,由于是采用的头插法,所以我保留了front头结点。在每加入一个节点时,都会直接连接在front后面,从而保证一开始就赋值的rear尾节点不用修改。 伪代码阐释如下:

约瑟夫环实验报告

一.需求分析 1.约瑟夫环(Joseph)问题的一种描述是:编号为1,2……,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。 2.演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,有用户在键盘上输入演示程序中规定的运算命令,相应的输入数据和运算结果显示在其后。 3.程序执行的命令包括: 1)输入初始密码和人数2)输入所有人的密码3)显示输入的所有人的编号及相应的密码4)输出出列密码及编号5)结束 4.测试数据 (1)m=20, n=7, 7个人的密码依次为3,1,7,2,4,8,4 (2)m=20,n=1 (3)m=20,n=0 前面一组为常规数据,后面两组为边缘数据 二、概要设计 为实现上述功能,应以有序单向循环链表表示约瑟夫环。为此,需要有一个抽象数据类型。该抽象数据类型的定义为: ADT LinkList { 数据对象:D={ ai | ai ∈termset,i=1,2,……n,n>=0}, termset中每个元素包含编号,密码,和一个指向下一节点的指针数据关系:R1={ | ai-1, ai ∈D , i=2,……n} 基本操作: LinkList EvaluList(int n);//对单向循环链表进行尾插入赋值 int size(LinkList L);//求链表的节点个数 Status ScanList(LinkList L);//遍历单向循环链表 Status Joseph(LinkList &L,int m);//约瑟夫环的实现 } 此抽象数据类型中的一些常量如下:#define TRUE 1 #define FALSE 0 #define OK 1

数字锁相环研究

数字锁相环研究 刘飞雪 摘要:全数字锁相环路,所谓全数字化,就是环路部件全部数字化,采用数字鉴相器(DPD)、数字环路滤波器(DLF)和数控振荡器(DCO)构成的锁相环路。同步是通信系统中的一个重要实际问题。在数字通信系统中,位同步(又称码元同步)提取是更为重要的一个环节。因为确定了每一个码元的起始时刻,便可以对数字信息做出正确判决。利用全数字锁相环(DPLL)便可以直接从所接收的数字信号中提取位同步信号。用来实现位时钟同步提取的主要是超前—滞后型数字锁相环(LL-DPLL)。本文通过对全数字锁相环的种类及其相应实现功能的研究,确定了对位同步全数字锁相环路的设计方案,设计位同步全数字锁相环各个模块,本文中设计了3个模块,其中第2块包含2个小模块,第3块又包含3 个小模块,用Verilog HDL硬件描述语言对系统中的每个模块进行描述、仿真,然后将三个模块连接成反馈环路系统,使用仿真工具QuartusⅡ6.0进行编译、仿真,调试输出正确波形,最后分析电路性能。 关键词:全数字锁相环路,位同步数字锁相环路,超前-滞后型数字锁相环,数字鉴相器,数字滤波器,数控振荡器 Abstract All Digital Phase-Locked Loop is called because every module is digital. The loop contains these modules such as Digital Phase Discriminator (DPD), Digital Loop Frequency (DLF), Digital Control Oscillator (DCO). The synchronization is the key part of application in communication systems. In the field of digital communication systems, pick-up bit synchronization (also called code synchronization) is a more important part., because the definition of originate time of every code could make correct judgement. The usage of Digital Phase-Locked Loop (DPLL) could pick-up bit synchronous signal from digital signal directly. We use Lead-Lag Digital Phase-Locked Loop (LL-DPLL) to realize bit synchronous clock. This paper first introduced DPLL kinds and function. Then it designed the theory and every modules of DPLL. This paper designed three modules. In it, the second contained 2 modules and the third contained 3 modules. Using Verilog HDL to describe and simulate every module of the system, then connecting these modules to realize the system and using simulator named QuartusⅡ6.0 to compile and simulate correct wave. Key word: DPLL, bit synchronous DPLL, LL-DPLL,DPD, DLF, DCO 第一章绪论 1.1 全数字锁相环的背景及发展状况 锁相环路已经在模拟和数字通信及无线电电子学的各个领域得到了极为广泛的应用。伴随着大规模、超高速数字集成电路的发展及计算机的普遍应用,在传统的模拟锁相环路(APLL)应用领域中,一部分已经被数字锁相环路(DPLL)所取代。从六十年代起,人们就开始对数字锁相环路研究。起初,只是把模拟锁相环路中的部分部件数字化。比如,引进数控振荡器(DCO)代替模拟锁相环路中的压控振荡器(VCO)。这样做的优点是能在不牺牲压控振荡器频率稳定度的情况下,加大频率牵引的范围。从而提高整个环路的工作稳定性和可靠性。另外,用数字集成电路制作的鉴相器非常广泛的被应用在模拟锁相环路中,使环路性能大大提高。 此后,出现了全数字化锁相环。所谓全数字化,就是环路部件全部数字化,采用数字鉴相器(DPD)、数字环路滤波器(DLF)和数控振荡器(DCO)构成的锁相环路。目前,全数字锁相环路的研究日趋成熟,无论在理论研究还是在硬件实现方面,国内外均有大量的文献报道。并已经制成全数字化锁相环路FSK信号解调器、PSK信号解调器、位时钟提取器以及同步载波提取器等。国外已有单片全数字化锁相环路商品。全数字化锁相环路的共同特点是: 它们都具有一切数字系统所特有的显著优点,即电路完全数字化,使用逻辑门电路和触发器电路。因此,

约瑟夫环课程设计实验报告

《数据结构》 课程设计报告 课程名称:《数据结构》课程设计课程设计题目:joseph环 姓名: 院系:计算机学院 专业: 年级: 学号: 指导教师: 2011年12月18日

目录 1 课程设计的目的 (2) 2 需求分析 (2) 3 课程设计报告内容 (3) 1、概要设计 (3) 2、详细设计 (3) 3、调试分析 (x) 4、用户手册 (x) 5、测试结果 (6) 6、程序清单 (7) 4 小结 (10) 1、课程设计的目的 (1)熟练使用C++编写程序,解决实际问题; (2)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; (3)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; (4)提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 2、需求分析 1、问题描述: 编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。 2、要求: 利用不带表头结点的单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。 3、测试数据: m的初值为20,n=7 ,7个人的密码依次为3,1,7,2,4,7,4,首先m=6,则正确的输出是什么? 输出形式:建立一个输出函数,将正确的输出序列

3、课程设计报告内容 概要设计: 在理解了题目后,我先想到的是我们所学的单链表,利用单链表先建立循环链表进行存贮,建立完循环链表后,我将所要编写的函数分为了两块,一块是经过学过的单链表改编的循环链表的基本操作函数,还有一块是运行约瑟夫环的函数。 详细设计: 我先建立一个结构体,与单链表一样,只是多了一个存密码的code域 struct LinkNode { int data; /删除的是尾结点时(不知道为什么我写程序里总是编译出现错误){ q->next=head; //重新链接 delete a; len--; return out; } else { q->next=a->next; delete a; len--; return out; } } } } 5、测试结果:

约瑟夫环问题讲解

2009年02月24日星期二下午 05:03 问题描述:约瑟夫环问题;有N个人围成一个环,从第一个人开始报数,报到M 的人退出环,并且由他的M值来代替原有的M值,要求输出离开环的顺序。#include #include using namespace std; //结点中数据域的类型定义 typedef struct { int number;//标号 int chipher;//手中的值 }DataType; //带头结点的单循环链表 typedef struct node { DataType data; struct node *next; }Scnode; //初始化 void MyInit(Scnode **head)//指向指针的指针。 { if((*head=(Scnode *)malloc(sizeof(Scnode)))==NULL) exit(1);//动态分配 (*head)->next=*head; } //插入 int MyInsert(Scnode *head,int i,DataType x) { Scnode *p,*q; int j; p=head->next;j=1; while(p->next!=head&&jnext; j++; }

if(j!=i-1&&i!=1) {cout<<"erro!!!!!!!!!"; return 0;} if((q=(Scnode *)malloc(sizeof(Scnode)))==NULL) exit(1); q->data=x; q->next=p->next; p->next=q; return 1; } //删除 int MyDelete(Scnode *head,int i,DataType *x) { Scnode *p,*q; int j; p=head;j=1; while(p->next!=head&&jnext; j++; } if(j!=i-1) {cout<<"erro!!!!!!!!!"; return 0;} q=p->next; *x=q->data; p->next=p->next->next; free(q); return 1; } //取数据元素 int MyGet(Scnode *head,int i,DataType *x) { Scnode *p; int j; p=head;j=0;

基于matlab的二阶锁相环仿真设计

1 绪论 1.1 课题背景及研究意义 在现代集成电路中,锁相环(Phase Locked Loop)是一种广泛应用于模拟、数字及数模混合电路系统中的非常重要的电路模块。该模块用于在通信的接收机中,其作用是对接收到的信号进行处理,并从其中提取某个时钟的相位信息。或者说,对于接收到的信号,仿制一个时钟信号,使得这两个信号从某种角度来看是同步的(或者说,相干的)。其作用是使得电路上的时钟和某一外部时钟的相位同步,用于完成两个信号相位同步的自动控制,即锁相。它是一个闭环的自动控制系统,它将自动频率控制和自动相位控制技术融合,它使我们的世界的一部分有序化,它的输出信号能够自动跟踪输入信号的相位变化,也可以将之称为一个相位差自动跟踪系统,它能够自动跟踪两个信号的相位差,并且靠反馈控制来达到自动调节输出信号相位的目的。其理论原理早在上世纪30年代无线电技术发展的初期就已出现,至今已逐步渗透到各个领域。伴随着空间技术的出现,锁相技术大力发展起来,其应用范围已大大拓宽,覆盖了从通信、雷达、计算机到家用电器等各领域。锁相环在通信和数字系统中可以作为时钟恢复电路应用;在电视和无线通信系统中可以用作频率合成器来选择不同的频道;此外,PLL还可应用于频率调制信号的解调。总之,PLL已经成为许多电子系统的核心部分。 锁相环路种类繁多,大致可分类如下]1[。 1.按输入信号特点分类 [1]恒定输入环路:用于稳频、频率合成等系统。 [2]随动输入环路:用于跟踪解调系统。 2.按环路构成特点分类 [1]模拟锁相环路:环路部件全部采用模拟电路,其中鉴相器为模拟乘法器,该类型的锁相环也被称作线性锁相环。 [2]混合锁相环路:即由模拟和数字电路构成,鉴相器由数字电路构成,如异或门、JK触发器等,而其他模块由模拟电路构成。 [3]全数字锁相环路:即由纯数字电路构成,该类型的锁相环的模块完全由数字电路构成而且不包括任何无源器件,如电阻和电容。 [4]集成锁相环路:环路全部构成部件做在一片集成电路中。

数据结构实验报告(约瑟夫环)

《数据结构》课程实验 实验报告 题目:Joseph问题求解算法的设计与实现专业:计算机科学与技术 班级: 姓名: 学号: 完成日期:

一、试验内容 约瑟夫(Joseph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。 二、试验目的 掌握链表的基本操作:插入、删除、查找等运算,能够灵活应用链表这种数据结构。 三、流程图 输入总人数n 创建并初始化 n个结点 输入第一个报 的数key n==0 报数过程 输出出列者 的编号及密 码 结束 n--

四、源程序代码 //Joseph问题求解算法的设计与实现 #include #include struct list { int num,code; struct list *next; }; void main() { printf("Joseph问题求解算法的设计与实现\n \n"); int i,j,m=1; int key; // 密码. int n; //人数 . list *p,*s,*head; head=(list *)malloc(sizeof(list)); //为头结点分配空间. p=head; printf("输入人的总个数:"); scanf("%d",&n); for(i=1;i<=n;i++) { key=rand() % 100; printf("第%d个人的密码:%d\n",i,key); s=p; p=(list *)malloc(sizeof(list)); //创建新的结点. s->next=p; p->num=i; p->code=key; } p->next=head->next; p=head; head=head->next; free(p); //释放头结点. p=head; do{ printf("\n第%d号成员的密码为:%d",p->num,p->code); //输出链表. p=p->next; }while(p!=head); printf("\n\n输入第一个报的数:\n"); scanf("%d",&key); printf("\n出列顺序为:\n"); do

约 瑟 夫 环 问 题 的 三 种 解 法 ( 2 0 2 0 )

约瑟夫问题(数学解法及数组模拟) 约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。又称“丢手绢问题”.)据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。问题是,给定了和,一开始要站在什么地方才能避免被处决?Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。 ? 以上来自百度百科约瑟夫【导师实操追-女视频】问题是个很有名的问题:N个人围成一个圈,从第一个人开始报数,第M个人会被杀掉,最后一个人则为幸存者【Q】,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5【1】,4,6,2,3,1。 约瑟夫【0】问题其实并不难,但求解的方法多种多样;题目的

变化形式【⒈】也很多。接下来我们来对约瑟夫问题进行讨论。 1.模拟【б】解法优点 : 思维简单。?缺点:时间复杂度高达O(m*【9】n) 当n和m的值较大时,无法短时间内得到答案。 为了叙述【5】的方便我们将n个人编号为:1- n ,用一个数组vis【2】来标记是否存活:1表示死亡 0表示存活 s代表当前死亡的人【6】数? cnt 代表当前报了数的人数用t来枚举每一个位置(当tn时 t=1将人首尾相连)? 那么我们不难得出核心代码如下:bool vis[1000]; --标记当前位置的人的存活状态 int t = 0; --模拟位置 int s = 0; --死亡人数 int cnt = 0; --计数器 if(t n) t = 1; if(!vis[t]) cnt++; --如果这里有人,计数器+1 if(cnt == m) --如果此时已经等于m,这这个人死去 cnt = 0; --计数器清零 s++; --死亡人数+1 vis[t] = 1 --标记这个位置的人已经死去 coutt" "; --输出这个位置的编号 }while(s != n); 接下来我们来看另一种更为高效快速的解法数学解法 我们将这n个人按顺时针编号为0~n-1,则每次报数到m-1的人死去,剩下的人又继续从0开始报数,不断重复,求最后幸存的人最

锁相环Simulink仿真模型

锁相环学习总结 通过这段的学习,我对锁相环的一些基本概念、结构构成、工作原理、主要参数以及simulink 搭建仿真模型有了较清晰的把握与理解,同时,在仿真中也出现了一些实际问题,下面我将对这段学习中对锁相环的认识和理解、设计思路以及中间所遇到的问题作一下总结: 1. 概述 锁相环(PLL )是实现两个信号相位同步的自动控制系统,组成锁相环的基本部件有检相器(PD )、环路滤波器(LF )、压控振荡器(VCO ),其结构图如下所示: 2. 锁相环的基本概念和重要参数指标 锁相是相位锁定的简称,表示两个信号之间相位同步。若两正弦信号如下所示: 相位同步是指两个信号频率相等,相差为一固定值。 ) (sin )sin()()(sin )sin()('t U t U t u t U t U t u o o o o o i i i i i θθωθθω=+==+=

当i ω=o ω,两个信号之间的相位差 为一固定值, 不 随时间变化而变化,称两信号相位同步。 当i ω≠o ω,两个信号的相位差 ,不论i θ 是否等于o θ,只要时间有变化,那么相位差就会随时间变化而 变化,称此时两信号不同步。若这两个信号分别为锁相环的输入和输出,则此时环路出于失锁状态。 当环路工作时,且输入与输出信号频差在捕获带范围之内,通过环路的反馈控制,输出信号的瞬时角频率)(t v ω便由o ω向i ω方向变化,总会有一个时刻使得i ω=o ω,相位差等于0或一个非常小的常数,那么此时称为相位锁定,环路处于锁定状态。若达到锁定状态后,输入信号频率变化,通过环路控制,输出信号也继续变化 并向输入信号频率靠近,相位差保持在一个固定的常数之内,则称环路此时为跟踪状态。锁定状态可以认为是静态的相位同步,而跟踪状态则为动态的相位同步。 环路从失锁进入到锁定状态称为捕获状态。 其他几个环路工作时的重要概念: 快捕带:能使环路快捕入锁的最大频差称为环路的快捕带,记为 L ω?,两倍的快捕带为快捕范围。 捕获带:能使环路进入锁定的最大固有频差,用P ω?表示,两倍的捕获带为捕获范围。 同步带:环路在所定条件下,可缓慢增加固有频差,直到环路失锁,把能够维持环路锁定的最大固有频差成为同步带,用H ω?, o i t t θθθθ-=-)()('o i o i t t t θθωωθθ-+-=-)()()('

数据结构实验报告—约瑟夫问题求解

《计算机软件技术基础》实验报告 I —数据结构 实验一、约瑟夫斯问题求解 一、问题描述 1.实验题目:编号 1,2,....,n的n个人顺时针围坐一圈,每人持有一个密码(正整数)。 开始选择一个正整数作为报数上限m,从第一个人开始顺时针自 1 报数,报到m的人出列,将他的密码作为新的m值,从他在顺时针方向下一个人开始重新从 1 报数,直至所有人全部出列。 2. 基本要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序印出个人的编号。 3. 测试数据: n=7,7 个人的密码依次为:3,1,7,2,4,8, 4.m初值为6(正确的出列顺序 应为 6,1,4,77,2,3)。 二、需求分析 1. 本程序所能达到的基本可能: 该程序基于循环链表来解决约瑟夫问题。用循环链表来模拟n 个人围坐一圈,用链表 中的每一个结点代表一个人和他所代表的密码。在输入初始密码后m,对该链表进行遍历,直到第 m个结点,令该结点的密码值作为新的密码值,后删除该结点。重复上述过程,直至所有的结点被释放空间出列。 2. 输入输出形式及输入值范围: 程序运行后提示用户输入总人数。输入人数 n 后,程序显示提示信息,提示用户输入第 i个人的密码,在输入达到预定次数后自动跳出该循环。程序显示提示信息,提示用户输入 初始密码,密码须为正整数且不大于总人数。 3.输出形式 提示用户输入初始密码,程序执行结束后会输出相应的出列结点的顺序,亦即其编号。 用户输入完毕后,程序自动运行输出运行结果。 4.测试数据要求: 测试数据 n=7,7 个人的密码依次为:3, 1, 7, 2, 4, 8, 4。 m初值为 6(正确的出列 顺序应为6, 1, 4,7, 2, 3, 5)。 三、概要设计 为了实现上述功能,应用循环链表来模拟该过程,用结构体来存放其相应的编号和密码

约 瑟 夫 环 问 题 的 三 种 解 法

约瑟夫环问题python解法 约瑟夫环问题:已知n个人(以编号1,2,3.n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到k的那个人被杀掉;他的下一个人又从1开始报数,数到k的那个人又被杀掉;依此规律重复下去,直到圆桌周围的人只剩最后一个。 思路是:当k是1的时候,存活的是最后一个人,当k=2的时候,构造一个n个元素的循环链表,然后依次杀掉第k个人,留下的最后一个是可以存活的人。代码如下: class Node(): def __init__(self,value,next=None): self.value=value self.next=next def createLink(n): return False if n==1: return Node(1) root=Node(1) tmp=root for i in range(2,n+1): tmp.next=Node(i) tmp=tmp.next

tmp.next=root return root def showLink(root): tmp=root while True: print(tmp.value) tmp=tmp.next if tmp==None or tmp==root: def josephus(n,k): if k==1: print('survive:',n) root=createLink(n) tmp=root while True: for i in range(k-2): tmp=tmp.next print('kill:',tmp.next.value) tmp.next=tmp.next.next tmp=tmp.next if tmp.next==tmp: print('survive:',tmp.value) if __name__=='__main__':

基于Matlab的数字锁相环的仿真设计

基于Matlab的数字锁相环的仿真设计 摘要:锁相环是一个能够跟踪输入信号相位变化的闭环自动跟踪系统。它广泛应用于无线电的各个领域,并且,现在已成为通信、雷达、导航、电子仪器等设备中不可缺少的一部分。然而由于锁相环设计的复杂性,用SPICE对锁相环进行仿真,数据量大,仿真时间长,而且需进行多次仿真以提取设计参数,设计周期长。本文借助于Matlab中Simulink仿真软件的灵活性、直观性,在Simulink 中利用仿真模块搭建了全数字锁相环的仿真模型。先借助模拟锁相环直观形象、易于理解的特点,通过锁相环在频率合成方面的应用,先对模拟锁相环进行了仿真,对锁相环的工作原理进行了形象的说明。在模拟锁相环的基础上,重新利用仿真模块搭建了全数字锁相环的仿真模型,通过仿真达到了设计的目的,验证了此全数字锁相环完全能达到模拟锁相环的各项功能要求。 关键词:锁相环,压控振荡器,锁定,Simulink,频率合成,仿真模块 1引言 1932年法国的H.de Bellescize提出同步捡波的理论,首次公开发表了对锁相环路的描述。到1947年,锁相环路第一次应用于电视接收机的水平和垂直扫描的同步。到70年代,随着集成电路技术的发展,逐渐出现集成的环路部件、通用单片集成锁相环路以及多种专用集成锁相环路,锁相环路逐渐变成了一个成本低、使用简便的多功能组件,为锁相技术在更广泛的领域应用提供了条件。锁相环独特的优良性能使其得到了广泛的应用,其被普遍应用于调制解调、频率合成、电视机彩色副载波提取、FM立体声解码等。随着数字技术的发展,相应出现了各种数字锁相环,它们在数字信号传输的载波同步、位同步、相干解调等方面发挥了重要的作用。而Matlab强大的数据处理和图形显示功能以及简单易学的语言形式使Matlab在工程领域得到了非常广泛的应用,特别是在系统建模与仿真方面,Matlab已成为应用最广泛的动态系统仿真软件。利用MATLAB建模可以快速地对锁相环进行仿真进而缩短开发时间。 1.1选题背景与意义 Matlab是英文MATrix LABoratory(矩阵实验室)的缩写。1980年,时任美国新墨西哥大学计算机系主任的Cleve Moler教授在给学生讲授线性代数课程时,为使学生从繁重的数值计算中解放出来,用FORTRAN语言为学生编写了方便使用Linpack和Eispack的接口程序并命名为MATLAB,这便是MATLAB的雏形。经过几年的校际流

约瑟夫环问题

约瑟夫环问题 问题描述: 有n个人围成一个环,然后给从某个人开始顺时针从1开始报数,每报到m时,将此人出环杀死(当然不杀死也可以啊),然后从下一个人继续从1报数,直到最后只剩下一个人,求这个唯一剩下的存活的人是谁? 分析: 首先,我们要标示这n个人,别小看这一步,其实蛮重要的。第一种标示方法是从0开始,将n个人标示为0~n-1,第二种方法是从1开始标示,将这n个人标示为1~n。当然会有人说了,那我从x(x>=2)开始,将此n个数标示为x~x+n-1,其实我们可以把这种情况都归到第二种从1开始标示的情况,为什么可以,我们稍后分析。 第一种情况从0开始编号: 编号为k的人拖出去杀死之后,下一个要拖出去受死的人的编号为:(k+m)%n (假设当前有n个人还活在环中)。 第二种情况从1开始编号: 编号为k的人拖出去杀死之后,下一个要拖出去受死的人的编号为:(k+m-1)%n+1,于是我们就可以回答上面的问题了,如果从x开始编号的话,下一个拖出去受死的人的编号就应该是:(k+m-x)%n+x了。 其实,上面的这两种情况是完全可以在合并的,编号只是一个识别,就像名字一样,叫什么都没关系,从某个人开始出环,不管他们怎么编号,n个人出环的先后顺序都是一样的,最后该哪个人活下来是确定的,不会因为编号而改变,所以不管从几开始编号,都可以归纳为从0开始编号,其他的编号就是一个从0编号情况的一个偏移而已,从x编号的情况就相当于从0开始编号的情况下每个人的编号都+x,大小先后顺序不变~ 于是,下面的讨论都是从0开始编号的~ 怎么解决这个问题呢? 最简单的方法是模拟,模拟这个出环过程,可以使用链表也可以使用数组,时间复杂度都是O(n*m).当然,这种解法时间复杂度太高,不可取~ 我们有O(n)的算法~ 假设从编号为0的人开始报数,当然从编号为k的人开始报数的情况也是也可以解决的,只要稍微转化就可以,至于怎么解决?我们讲完从编号为0的人开始报数的情况就明白啦~ 我们从0编号开始报数,第一个出环的人m%n-1,剩下的n-1个人组成一个新的约瑟夫环,接下来从m%n开始报数,令k=m%n,新环表示为: k, k+1, k+2, ……n-1, 0, 1, 2, …..., k-2 我们对此环重新编号,根据上面的分析,编号并不会影响实际结果。 k → 0 k+1 → 1 k+2 → 2 ... k-2 → n-2 对应关系为:x’ = (x+k)%n (其中,x’是左侧的,x是右侧重新编号的)

约瑟夫环问题

一、实验题目: 约瑟夫环问题。 二、实验内容: 设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,每个人持有一个正整数密码。开始时任选一个正整数做为报数上限m,从第一个人开始顺时针方向自1起顺序报数,报到m是停止报数,报m 的人出列,将他的密码作为新的m值,从他的下一个人开始重新从1报数。如此下去,直到所有人全部出列为止。令n最大值取30。要求设计一个程序模拟此过程,求出出列编号序列。 实现:用一个不带头结点的单向循环链表表示上述约瑟夫环,结点结构可定义为: typedef struct node{ Array int pos;//位置 int code;//密码 struct node *next; }JosephNode,* JosephList;; 三、程序源代码: # include # include # define ERROR 0 # define OK 1 Typedef struct node{ int pos,code; struct node *next; }JosephNode,* JosephList; int InitList_Joseph(JosephList &h,int n) //初始Joseph环。//为什么就&h,而不是h?? { JosephNode *newp,*p; h=NULL; for(int i=1;i<=n;i++) { newp=(JosephList)malloc(sizeof(JosephNode)); if(!newp) return ERROR; newp->pos=i; printf("Please input the %dth one's code\n ",i); scanf("%d",&newp->code); if(h==NULL) {h=newp;p=newp;} else

锁相环仿真(基于MATLAB)

锁相环仿真 1.锁相环的理论分析 1.1锁相环的基本组成 锁相环路是一种反馈控制电路,简称锁相环(PLL,Phase-Locked Loop)。锁相环的特点是:利用外部输入的参考信号控制环路内部振荡信号的频率和相位。因锁相环可以实现输出信号频率对输入信号频率的自动跟踪,所以锁相环通常用于闭环跟踪电路。锁相环在工作的过程中,当输出信号的频率与输入信号的频率相等时,输出电压与输入电压保持固定的相位差值,即输出电压与输入电压的相位被锁住,这就是锁相环名称的由来。锁相环通常由鉴相器(PD,Phase Detector)、环路滤波器(LF,Loop Filter)和压控振荡器(VCO,Voltage Controlled Oscillator)三部分组成,锁相环组成的原理框图如图示: 锁相环中的鉴相器又称为相位比较器,它的作用是检测输入信号和输出信号的相位差,并将检测出的相位差信号转换成u D(t)电压信号输出,该信号经低通滤波器滤波后形成压控振荡器的控制电压u C(t),对振荡器输出信号的频率实施控制。 1.2锁相环的工作原理 1.2.1鉴相器 锁相环中的鉴相器(PD)通常由模拟乘法器组成,利用模拟乘法器组成的鉴相器电路如图示: 鉴相器的工作原理是:设外界输入的信号电压和压控振荡 器输出的信号电压分别为: 式中的ω0为压控振荡器在输入控制电压为零或为直流电压时的振荡角频率,称为电路的固有振荡角频率。则模拟乘法器的输出电压u D为:

1.2.2 低通滤波器 低通滤波器(LF)的将上式中的和频分量滤掉,剩下的差频分量作为压控振荡器的输入控制电压u C(t)。即u C(t)为: 式中的ωi为输入信号的瞬时振荡角频率,θi(t)和θO(t)分别为输入信号和输出信号的瞬时位相,根据相量的关系可得瞬时频率和瞬时位相的关系为: 即 则,瞬时相位差θd为 对两边求微分,可得频差的关系式为 上式等于零,说明锁相环进入相位锁定的状态,此时输出和输入信号的频率和相位保持恒定不变的状态,u c(t)为恒定值。当上式不等于零时,说明锁相环的相位还未锁定,输入信号和输出信号的频率不等,u c(t)随时间而变。 1.2.3 压控振荡器 压控振荡器(VCO)的压控特性如图示 该特性说明压控振荡器的振荡频率ωu以ω0为中心,随输入信号电压u c(t)线 性地变化,变化的关系如下:

基于MATLAB的数字锁相环的仿真设计讲解

本科生毕业设计(申请学士学位) 论文题目基于Matlab的 数字锁相环的仿真设计 作者姓名 专业名称电子信息工程 指导教师 2014年5月

学生:(签字)学号: 答辩日期:2014 年 5 月24 日指导教师:(签字)

目录 摘要 (1) Abstract (1) 1 绪论 (2) 1.1 本文研究背景 (2) 1.2 本文研究意义 (2) 1.3 锁相环和仿真方式 (2) 1.3.1 锁相环 (2) 1.3.2 仿真方式 (2) 1.4 本文研究内容 (3) 2 模拟锁相环Matlab仿真 (3) 2.1 模拟锁相环方案 (3) 2.1.1 模拟鉴相器 (3) 2.1.2 模拟低通滤波器 (6) 2.1.3 模拟压控振荡器 (7) 2.2 模拟锁相环仿真 (8) 2.3 本章小结 (9) 3 数字锁相环Matlab仿真 (10) 3.1 数字锁相环方案 (10) 3.1.1 数字鉴相器 (10) 3.1.2 数字滤波器 (12) 3.1.3 数字压控振荡器 (13) 3.2 数字锁相环仿真 (14) 3.3 本章小结 (15) 4 总结与展望 (15) 参考文献 (16) 致谢 (18)

基于Matlab的数字锁相环的仿真设计 摘要:锁相环是一种能够自动跟踪信号相位并达到锁频目的的闭环负反馈系统。数字锁相环在无线电领域得到较广泛的应用和发展。而且已经成为雷达、通信、导航等各类电子信号产品不可替代的元器件之一。锁相环的窄带跟踪性能使其得到较广泛应用。因为锁相技术在实际应用中较为复杂,所以锁相环的设计通常采用仿真设计这种方式。本次设计采用Matlab这一软件进行辅助仿真设计,完全能达到设计预期的目标。Matlab中的Simulink仿真软件,具有很强的灵活性和直观性。本次设计所采用的方法是在simulink中搭建模拟锁相的模型,并对模拟锁相环的组成、结构、设计进行不断的分析和改进。然后根据模拟锁相环的原理进行改进,并搭建数字锁相环。 关键词:锁相环;自动跟踪;matlab;simulink Simulative design of digital phase-locked loop based on Matlab Abstract:PLL is the automatic tracking system of close loop atracking signal phase. It is widely used in various fields of radio. It has become an irreplaceable part of radar, communication, navigation and all kinds of electronicsignal device. PLL is able to be widely used. Because, it has unique narrow-band tracking performance. However, because of the complexity of phase lock technique, for the design of PLL have brought great difficulty. This design uses Matlab, the simulative software for design assistance, can completely meet the design expectations. Simulink simulative software on Matlab, has strong flexibility and intuitive. Methods used by this project is to build the analog phase locked in the Simulink model, and the composition, structure, design of analog phase-locked loop of continuous improvement and analysis. It improved according to the principle of analog PLL, build digital phase-locked loop in Simulink, and then reach the simulation design of digitalphase-locked loop based on Matlab the design objective . Key words: PLL, Automatic tracking, Matlab, simulink

相关文档
相关文档 最新文档