2012年数字通信计算机仿真.DOC

上传人:国*** 文档编号:1127433 上传时间:2018-12-11 格式:DOC 页数:15 大小:270KB
下载 相关 举报
2012年数字通信计算机仿真.DOC_第1页
第1页 / 共15页
2012年数字通信计算机仿真.DOC_第2页
第2页 / 共15页
2012年数字通信计算机仿真.DOC_第3页
第3页 / 共15页
2012年数字通信计算机仿真.DOC_第4页
第4页 / 共15页
2012年数字通信计算机仿真.DOC_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、2012 年数字通信计算机仿真数字序列低通滤波器编码器抽样判决 解调器 带通滤波器噪 声信道调制器低通滤波器图 1 数字通信系统框图首先,在发送端将输入的数字序列通过编码器转换为二进制,形成数字基带号,接着通过低通滤波器滤除高频干扰信号,再通过调制器进行振幅调制。其次,将信号发送即经过信道进行传输,在传输过程中有噪声的加入。最后,在接收端将收到的信号先通过带通滤波器滤除低、高频干扰信号,接着进行同步解调,再进行低通滤波,最后进行抽样判决得到发送的信号。1低通滤波器窗函数(1)汉宁(Hanning)窗升余弦窗(1)nHw0.51cos21NnRn主瓣宽度为 8/N,第一旁瓣比主瓣低 31dB。(

2、2)哈明(Hamming)改进的升余弦窗(2)nH0.546cos21Nnn主瓣宽度为 8/N,第一旁瓣比主瓣低 40 Db。(3)布莱克曼(Blackman)窗(3) nHw0.425cos10.8cos41NNnRn 主瓣宽度为 12/N,第一旁瓣比主瓣低 57dB。2. 调制调制信号可以看成一个双极性矩形脉冲序列与正弦载波相乘即(4)etcosnSagtTt其中 g(t)持续时间为 Ts 的脉冲序列,而 an 的取值服从下述关系(5)n1;p概 率 为概 率 为若令 (6)stnSagtT则上式变为 (7)etcost图 2 数字线性调制方框图基带信号形成器把数字序列a n转换成所需的基

3、带矩形脉冲序列,与载波相乘后即把其频谱搬移到fc 附近,实现了 ASK/PSK。3. 频率采样法设待设计的滤波器的传输函数用 H(ej)表示,对它在 =0 和 =2 之间等间隔采样 N 点,得到 Hd(k)(8)2,01,.jkNke再对 N 点 Hd(k)进行 IDFT,得到 h(n)(9)210,01,.NjkndkhnHean基 带 信 号 形 成 器 相 乘 器 ASK信 号cosct4. 解调带通滤波器 低通滤波器 抽样判决相乘器cost图 3 ASK 信号的相干解调cosztyt2c1sstt(10)co22cttt5MFC 概述MFC 是用来编写 Windows 应用程序的 C+

4、类库,该类以层次结构组织起来,其中封装了大部分 Windows API 函数和 Windows 控件,它所包含的功能涉及到整个 Windows 操作系统。不仅为用户提供了 Windows 图形环境下应用程序的框架,而且还提供了创建应用程序的组件。使用 MFC 类库和 Visual C+提供的高度可视的应用程序开发工具,可使应用程序变得更简单,开发周期极大地缩短,提高了代码的可靠性和可重用性。Visual C+6.0 为了减轻程序员的工作量,特别增强了应用程序向导的功能。应用程序向导为程序员提供了一个基于 MFC 的应用程序框架,程序员可以在此基础上添加实现特定功能的代码。通过应用程序向导建立应

5、用程序框架一般可以通过以下步骤来实现:(1)在 File 菜单下选择 New,在 New 对话框中选择 MFC AppWizard(exe),在 Project Name 文本输入框中输入新建的项目名,如 Huangweitong 后单击按钮。(2)在弹出的 MFC AppWizard-Step 1 对话框中可以设置应用程序的类型,指定应用程序的结构是否采用文档视图结构,以及资源文件所使用的语种等。应用程序的类型包括以下几种:Single document 单文档应用程序。Multiple document 多文档应用程序。Dialog document 基于对话框的应用程序。应用程序资源文件

6、所使用的语种可以通过下拉列表选择,在中国一般都选择中文作为资源文件的语种。(3)在设置好上述选项后,单击 Next 按钮,将弹出 MFC AppWizard-Step 2 of 6 对话框。在 MFC AppWizard-Step 2 of 6 对话框中可以设置应用程序所使用的数据库支持,它可以是以下值之一:None 在应用程序中忽略所有的数据库支持。Header files only 包括定义基本数据库类的头文件,但不创建对应订制表的数据库类或视图类。Database view without file support 创建对应指定表的一个数据库类和一个视图类,不附加标准文件支持。Datab

7、ase view with file support 创建对应指定表的一个数据库类和一个视图类,并附加标准文件支持。(4)设置好应用程序的数据库支持后,单击 Next 按钮,将弹出 MFC AppWizard-Step 3 of 6 对话框。在 MFC AppWizard-Step 3 of 6 对话框中可以设置应用程序所支持的复合文档类型。这一步使程序员可以向应用程序中加入OLE 支持。设置好应用程序对 OLE 的支持后,用户单击 Next 按钮将进入 MFC AppWizard-Step 4 of 6 对话框。(5)在 MFC AppWizard-Step 4 of 6 对话框中用户可以设

8、置应用程序的外观,其中可以配置的选项如下:Docking toolbar 一个工具栏。Initial status bar 一个初始状态栏。Printing and print preview 打印和打印预览支持。Context-sensitive Help 上下文相关帮助。3D controls 使用 3D 控件。MAPI(Messaging API) 是否使用消息 API。Windows Sockets 是否使用 Windows 套接字。在 MFC AppWizard-Step 4 of 6 对话框中还可以设置工具栏的外观,它可以是以下两个值之一:Normal 普通的工具栏。Interne

9、t Explorer ReBars 具有风格的工具栏。同时还可以在 MFC AppWizard-Step 4 of 6 对话框中设置需要显示的最近使用的文件个数。在设置好上述选项后,单击 Next 按钮将弹出 MFC AppWizard-Step 5 of 6 对话框。(6)在 MFC AppWizard-Step 5 of 6 对话框中可以设置应该用程序的风格,它可以是下面两个值之一:MFC Standard 标准的 MFC 应用程序。Windows Explorer 具有 Windows Explorer 风格的应用程序。在 MFC AppWizard-Step 5 of 6 对话框中还可

10、以设置是否在应用程序向导生成的代码中加注释。它可以是下面两个值之一:Yes,please 在向导生成的代码中加注注释。No,thank you 在向导生成的代码中不加注释。同时在 MFC AppWizard-Step 5 of 6 对话框中还可以设置使用 MFC 库文件的方式,它可以是下面两个值之一:As a shared DLL 以共享动态链接库的方式使用 MFC 库文件。As a statically linked library 以静态链接库的方式使用 MFC 库文件。(7)在设置好上述选项后,单击 Next 按钮将进入 AppWizard-Step 6 of 6 对话框。在 MFC A

11、ppWizard-Step 6 of 6 对话框中可以设置向导生成的文件名和类名。(8)在设置好文件名和类名后,单击 Finish 按钮,弹出 New Project Information 对话框,在该对话框中列出了关于新建立的应用程序项目文件的相关信息。这样应用程序向导所有的工作就全部完成了,这时向导已经为用户生成了一个可执行的应用程序框架。6基于对话框的应用程序的创建对话框(Dialog)在 Windows 应用程序中无处不在,起着非常重要的作用,它是用户与应用程序的主要交互途径。它主要用来接收用户输入,对话框实际上是一个真正的窗口,不但可以接收消息,而且还可以被移动和关闭,甚至可以在它

12、的用户区中进行绘图操作。在 MFC 中对话框被封装在 CDialog 类中,CDialog 类是 CWnd 类的派生类。对话框分为模态对话框和非模态对话框两种。当程序建立一对话框时,就必须决定该对话框是模态的还是非模态的。从编程的观点看,意味着要在建立和撤消两个对话框之间进行选择;从用户观点来看,对话框的模式影响到在对话框可见的情况下是否可进行其他工作的问题。模式是指对话框不同状态的一个术语。模态对话框垄断了用户的输入,当一个模态对话框打开时,它建立自己的消息循环,使得用户只能与计算机进行交互,而其它的用户界面对象收不到输入信息。我们平时所遇到的大部分对话框都是模态对话框。非模态对话框不垄断用

13、户的输入,当一个非模态对话框打开时,它不建立自己的消息循环,而是和应用程序共用同一个消息循环,这样一来用户不仅能与该对话框进行交互,而且能与其它用户界面对象进行交互。第一,建立应用程序的项目文件。用 MFC 的 AppWizard 建立一个应用程序时,首先要生成该应用程序的项目文件。其步骤如下:(1)在 Visual C+的主菜单栏中选择 File 菜单中的 New 选项。出现一个New 对话框,该窗口中有 4 个选项卡:Files、Projects、Workspaces 和 Other Documents。(2)选择 Projects 选项卡,并在该选项卡中选择 MFC AppWizard(

14、exe)项。(3)在 Project Name 编辑框中输入要创建的项目的名称。(4)Location 编辑框中描述的是存放该项目文件的路径(位置),这可以根据用户需要,输入自己希望存放该文件的位置。(5)在 Platforms 编辑框中选择 Win32,我们使用的是在 32 位操作系统。(6)确定项目文件的类型、名称和路径选项后,单击 OK 按钮,就可以开始制作该项目文件了。(7)Visual C+显示 MFC AppWizard-Step 1 的窗口。这是生成项目文件的第一步,在这一步中,用户将选择创建什么类型的应用程序以及资源文件使用什么语言。首先因为我们要生成的应用程序是基于对话框的应

15、用程序,所以在“What type of application would you like to creat?”中,选择 Dialog based 选项。然后在“What language would you like to your resources in?”中,选择“ 中文【中国】APPWZCHS.DLL”项。最后单击 Next 按钮,进入下一步。(8)Visual C+显示一个 MFC AppWizard-Step 2 of 4 的窗口,该窗口是生成项目文件的第二步。首先在“What features would you like to include?”问题中,选择 About

16、Box(关于 About 对话框) 和 3D Controls(使用三维图形控件)选项。然后在“Please enter a title for your dialog ”编辑框中可以给应用程序主窗口命名。最后确定以上各项后,单击 Next 按钮,进入下一步。(9)Visual C+显示一个 MFC AppWizard-Step 3 of 4 的窗口。首先在“Would you like to generate source file comments?”中,询问是否在生成源代码文件中加注释,应选择 Yes。因为在 MFC AppWizard 生成的应用程序源代码文件(.cpp 文件)中加上代

17、码的注释,有助于阅读和理解源代码的含义。然后在“How do you like to use the MFC library?”问题中,选择 MFC 使用的动态链接库(DDL),而不是静态链接库。使用动态链接库可以在应用程序程序运行的时侯链接起来,而不是在编译的时候就链接,使生成的应用程序 exe 文件比较小。最后单击 Next 按钮,进入最后一步。(10)Visual C+ 显示出生成项目文件的最后一步,出现一个 MFC AppWizard-Step 4 of 4 的窗口,可以看到 AppWizard 给出的所创建的类名和文件名,如果用户愿意,可以改变类的名称,但一般不必改变它。(11)单击

18、 Finish 按钮,显示一个 New Project Information 的窗口,该窗口显示了前面几步所选择的全部设置,包括应用程序类型、新创建的类以及应用程序的全部特征,还显示了该应用程序将生产在哪个路径之中。通过这些用户可以最后检查一下应用程序的设置是否完全正确,如果发现不对的地方,可以单击 Cancel 键取消前面的操作,用 AppWizard 重新制作。检查后若完全正确,则单击 Exit 按钮。AppWizard 完成应用程序的自动生成工作,在指定的目录下生成应用程序框架所必需的全部文件。第二,应用程序的可视化编程部分。因为应用程序是基于对话框的,所以 AppWizard 生成一

19、个的对话框窗口作为应用程序的主窗口,现在要做的就是在这个对话框中进行界面设计。(1)添加并编辑控件 创建对话框的第一步就是添加控件到对话框中。可以添加到对话框中的控件主要有图片(Picture)、静态文本(Static Text)、编辑框(Edit Box)、成组框(Group Box)、按钮(Button)、复选框(Check Box)、单选钮(Radio Box)、组合框(Combo Box)、列表框(List Box)、水平滚动条(Horizontal Scroll Bar)、垂直滚动条(Vertical Scroll Bar)、微调(Spin)、进展条(Progress)、轨道条(Sl

20、ider)、热键(Hot Key)、列表控件(List Control)、制表控件 (Tab Control)和动画(Animate)等。这些控件类型都显示在控件工具栏中。添加控件最简单的方法就是将控件从控件工具栏拖到对话编辑窗口的指定位置后释放鼠标。此外,还可以先从控件工具栏单击要添加的控件类型(如果要添加多个同一类型的控件,则应同时按住 Ctrl 键) ,然后将光标移到要添加控件的位置,单击并拖到鼠标,当控件大小满足要求时释放鼠标。添加控件后可以单击来选择要修改的控件,或者使用控件工具栏的选择工具或按住 Shift 键再单击来选择多个控件,选择控件后,就可以对其进行移动、复制、删除和调整。

21、此外,还可以使用控件的属性窗口来修改控件属性。即将鼠标移到控件上,单击鼠标右键,在弹出的快捷菜单中选择属性命令,显示一个属性窗口,在此窗口中输入控件的 ID 标识符(这个标识符将成为识别该空间的依据)以及控件的标题。(2)给界面对象链接变量 每个控件实际上就是一个对象,对 MFC 类库中的函数调用都是通过对象实现的。将鼠标移到要连接变量的控件上,单击鼠标右键,在弹出的快捷菜单中选择 Class Wizard 命令,Visual C+显示一个 MFC Class Wizard 的对话框窗口,在此窗口选择 Member Variables 选项卡。在Control IDs 列表框中单击要连接变量的

22、控件的 ID 号,使之亮度显示,单击右边的 Add Variables 按钮,设置其变量名、类别及变量类型。这样就把变量加到了该对话框类中。如图 4 所示。图 4 给控件链接变量(3)给控件链接代码 要给控件映射一个消息处理函数,当事件发生时 (如“单击该按钮 ”或编辑框里的内容发生变化时等 ),发送一个消息,应用程序收到消息后就执行相应的消息处理函数。首先将鼠标移到控件上,单击鼠标右键,在弹出的快捷菜单中选择 Class Wizard 命令,Visual C+显示一个 MFC Class Wizard 的对话框窗口。然后在 Object IDs 列表里选择要添加消息处理函数的那一控件的 ID

23、 标识符,在 Message 列表里选择相应的命令方式。这个命令方式决定用户与用程序之间交互的方式,即用户以何种方式发送消息给应用程序,使其执行相应的消息处理函数。接着单击右边的 Add Function 按钮。在弹出的窗口 Add Member Function 中接受建议的函数名,则在 Class Wizard 窗口的Member Function 列表框中增加了一个成员函数,如图 5 所示。最后单击 Class Wizard 窗口中的 Edit Code 按钮,此时 Visual C+显示源代码文件(.cpp),并将光标停在刚生成的函数处,等待用户定义函数的内容。在函数体中输入要实现的功

24、能代码即可。图 5 给控件添加响应函数(3)初始化对话框中的控件 运行所建立的应用程序时,往往要求对话框窗口中的控件有一定的初始功能(如编辑框里有一定的初始值),故可以对函数OnInitDialog()进行代码编辑,此函数中的内容为程序开始运行时需要初始化的相关内容。7ASK 数字通信系统的软件实现表 1 对话框中个对象的属性表 2 对话框的控件变量控件名称 控件 ID 对应的控件变量 控件变量类型学号 IDC_ID nMyID int噪声强度 IDC_Intensity nIntensity int表 3 控件对应的响应函数控件名称 控件 ID 响应的消息 响应消息的函数学号 IDC_ID

25、EN_CHANGE OnChangeId噪声强度 IDC_Intensity EN_CHANGE OnChangeIntensity低通滤波器 IDC_Lpf BN_CLICKED OnLpf带通滤波器 IDC_Bpf BN_CLICKED OnBpf基带信号 IDC_BaseSignal BN_CLICKED OnBaseSignal过低通 IDC_PassLpf1 BN_CLICKED OnPassLpf1调制 IDC_Modulate BN_CLICKED OnModulate噪声 IDC_Noise BN_CLICKED OnNoise信道 IDC_Channel BN_CLICKED

26、 OnChannel过带通 IDC_PassBpf BN_CLICKED OnPassBpf解调 IDC_Demodulate BN_CLICKED OnDemodulate过低通 IDC_PassLpf2 BN_CLICKED OnPassLpf2恢复判决 IDC_Adjust BN_CLICKED OnAdjustSigTranmit 类的生成及功能在 ASK_Pro 的主菜单栏中选择插入菜单中的新建类选项,出现一个 New Class 对话框,在该对话框的 Class type 中选择 Generic Class,在 Name 中输入类名 SigTranmit,单击右边的 OK 按钮。此

27、时在 ASK_Pro 项目中生成了一个名为SigTranmit 的类,该类用于实现 ASK 数字通信系统的全过程,包括发送端对信号进行编码、滤波(过低通滤波器)、和调制,信号传输的过程(即过信道),和接收端对信号的滤波(过带通滤波器)、解调、滤波(过低通滤波器)、和恢复判决。对象 ID Caption基本输入组合框 IDC_STATIC 基本输入“学号”编辑框 IDC_ID 无“噪声强度”编辑框 IDC_ Intensity 无在 SigTranmit.h 中定义 SigTranmit 类的两个 int 类型的私有数据成员 myID和 myIntensity。它们分别分别为该 ASK 数字通信

28、系统中将要传输的信号及信道中噪声的强度,需要用户设置,即将它们同对话框中用来接收用户输入的学号信息和噪声强度信息的控件变量 nMyID 和 nIntensity 连接起来,将 nMyID 的值赋給 myID,将 nIntensity 的值赋給 myIntensity。SigTranmit.h 中还定义了三个 int 类型和十二个 float 类型的私有数据成员,具体如下所示:Int c:用来存放窗函数选择结果的变量。int S016:用来存放在 Basesignal 函数中对数字信息编码后的信号。int S116: 用来存放在 Adjust 函数中对信号抽样取平均后的信号。float Mod1

29、6*M:用来存放生成的载波信号。float Sa16*M:用来存放通过系统中每一个环节后的信号。float Sal16*M: 用来存放在 Basesignal 函数对信号进行采样后的信号。float AR16*M:用来存放在 Dft 函数中对传入的数组进行 DFT 运算后的实部。float AI16*M:用来存放在 Dft 函数中对传入的数组进行 DFT 运算后的虚部。float A16*M:用来存放在 Dft 函数中对传入的数组进行 DFT 运算后的频域幅值。float Hl16*M:用来存放生成的低通滤波器的单位取样响应。float H216*M:用来存放在 Idft 数中对传入的数组进行

30、 IDFT 运算后的数据。float No16*M:用来存放生成的噪声float HbN:用来存放带通滤波器的频域单位取样响应。float PN: 用来存放在 Idft 数中进行 IDFT 运算所需要的数据。float WnN:用来存放窗函数的单位取样响应。在 SigTranmit.h 中声明 SigTranmit 类的二十五个公有成员函数,并在SigTranmit.cpp 中对它们进行定义。各函数原型及功能如下所示:CSigTranmit(void):系统自动生成的构造函数,我在函数体内给私有变量 c赋值,使得用户没有进行创函数选择时,c 有默认值。void SetDigtal(int ID

31、, int Intensity):该函数用于设置 SigTranmit 类的共有数据成员 myID 和 myIntensity 的初始值。void Basesignal():该函数用于对学号信息进行编码、采样,生成数字基带信号;接着调用 void Dft(float x,int m)函数对采样后的信号进 DFT 运算,得到信号的频域特性。void Lpf():该函数体里首先用窗函数法生成低通滤波器;接着调用函数void Conv(float array1,float array2)对低通滤波器和数字基带信号的进行卷积运算,实现信号过低通的模拟;最后调用 void Dft(float x,int m)函数对过低通滤波器后的信号进行 DFT 运算,得到信号的频域特性。void modulate():该函数实现对滤波后的信号的振幅调制,并调用 void Dft(float x,int m)函数对过调制后的信号进行 DFT 运算,得到信号的频域特性。void Channel():该函数体里首先调用 void Noise(float inten)函数生成高斯白噪声;接着将调制后的信号与高斯白噪声相加以模拟信号过信道的过程,最后调

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 1

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。