欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    2DPSK信号产生器的设计3.doc

    • 资源ID:3021296       资源大小:104KB        全文页数:12页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2DPSK信号产生器的设计3.doc

    2DPSK信号产生器的设计一、 设计任务及要求: 根据通信原理,设计一个2DPSK的基带信号调制器,即用基带信号(二进制)对载波信号(正弦波)进行调制,使载波信号的相位跟着基带信号进行变换,产生符合要求的2DPSK信号进行发送。 要求:载波信号频率为2.2MHz。信息码元速率自定,可以用模拟电路、数字电路、单片机、FPGA等方法进行设计,给出波形仿真结果。二、 设计方案:2DPSK调制器可用模拟法如图(a),也可用键控法如图(b)。 方案一:键控法,用数字电路来设计,方案框图如下:方案二:框图如下:由于FPGA系统频率可以达到几百兆赫兹,故系统时钟经过一定的分频可以得到载波信号正弦波信号发生器的要求频率2.2MHz。信息码经过差分运算后的输出信号控制正弦波信号发生器的不同相位输出(类似键控法),便可得到设计要求的2DPSK信号。方案三:框图如下此方案由信息码进行差分编码后得到的差分码控制两个不同相位的正弦信号发生器的不同时间输出便可以得到2DPSK信号。 FPGA具有可编程逻辑器件现场可编程的灵活性,又具有门陈列器件功能强、高集成度和高速度的优点,因此在要求功能越来越强,体积越来越小,功耗越来越低的现代通信系统设计中被越来越广泛的应用。而且这学期我们学习了FPGA的相关知识EDA技术使用教程,且方案二只用设计一个正弦波信号发生器,因此选择方案二。三、 详细设计原理及实现方法二进制差分相移键控常简称为二相相对调相,记作2DPSK,是数字通信系统中常用的调制方式之一,2DPSK信号为模拟信号,而FPGA只能处理数字信号,因此,需对正弦信号采样再经过数模变换得到所需的2DPSK信号,FPGA 装 订 线 产生正弦信号的采样值。(一) 差分编码的设计 2DPSK。它不是利用载波相位的绝对数值传送数字信息,而是用前后码元的相对载波相位值传送数字信息。所谓相对载波相位是指本码元初相与前一码元初相之差。 假设相对载波相位值用相位偏移表示,并规定数字信息序列与之间的关系为 绝对码和相对码是可以互相转换的,其转换关系为 由此转换关系可知,在FPGA应用中,用VHDL语言中的XOR(异或)语句即可实现差分编码。(二) 正弦波信号发生器的设计 在FPGA程序设计应用中,用VHDL语言列出正弦波信号的抽样值即可实现正弦波信号发生器的设计,亦可通过定义宏功能模块建立正弦波喜欢发生器的LPM储存器的宏功能块来实现。在本设计中,对正弦波每个周期采样100个点,即采样速率为原正弦信号频率的100倍,因此可以将原正弦信号不失真地恢复出来。由于要求正弦波信号的频率为2.2MHz,而且对正弦波每个周期采样100个点,所以要求系统时钟频率应该为2.2MHz×100=220MHz。 这样即可实现 设计要求的 载波为2.2MHz的正弦波信号。(三) 分频器的设计由于对正弦波每个周期采样100个点,即100个正弦波周期内包含100个系统周期,故信息码的频率应为系统频率的1/100,故应设计出一个信息码的同步信号,搞信号应为系统频率的100分频,及要求设计1个100分频器,100分频器可用VHDL很容易实现。(四) 总体VHDL语言编程设计由上述分析可用VHDL语言编程实现2DPSK信号发生器的设计,程序及注释如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity MY2DPSK2 isport(rst, kongzhi,clk :in std_logic; -FPGA时钟输入 x :in std_logic; -信息码输入 z,aa_out :out std_logic; -相对码输出 coderate1: out std_logic; -同步信号 value1 :out std_logic_vector(7 downto 0); - 正弦波抽样值输出 end;architecture behav of MY2DPSK2 issignal xx,yy,aa:std_logic; signal q1,q2:std_logic_vector(6 downto 0); signal w:integer range 0 to 99; signal count100:std_logic_vector(6 downto 0); signal coderate:std_logic;beginprocess(clk) -100分频进程 信号同步begin if(clk'event and clk='1') then if kongzhi='1' then if(count100="1100011") then count100<="0000000" coderate<=not coderate; coderate1<=coderate; else count100<=count100+'1' end if; end if;end if;end process;process(clk) - 差分编码进程 beginif rst='1' then aa<='0'elsif (clk'event and clk='1' ) then aa<='1' if w=0 then w<=1; xx<=xx xor x; - 现在XX是相对码 z<=xx xor x; - 现在z是相对码 yy<=xx xor x; - 现在YY是相对码elsif w=99 then w<=0; else w<=w+1; end if;end if;-Z<=YY;aa_out<=aa;end process;process(clk) -控制正弦波的不同相位输出beginif clk'event and clk='1' then q1<=q1+'1' if (q1="1100011" and yy='0') then -相对码YY为0时输出0°正弦波信号q1<="0000000" elsif (q1="1100011" and yy='1') thenq1<="0110010" -相对码YY为0时输出180°正弦波信号 end if; end if;end process;process(q1,clk,en,aa) - 正弦波信号进程begin if clk'event and clk='1' then if kongzhi='1' and aa='1' then case q1 is when "0000000"=>value1<="01111111" - 0 127when"0000001"=>value1<="10000111"- 1 135 when"0000010"=>value1<="10001111"- 2 143 when"0000011"=>value1<="10010111" when"0000100"=>value1<="10011111" when"0000101"=>value1<="10100110" when"0000110"=>value1<="10101110" when"0000111"=>value1<="10110101" when"0001000"=>value1<="10111100" when"0001001"=>value1<="11000011" when"0001010"=>value1<="11001010" when"0001011"=>value1<="11010000" when"0001100"=>value1<="11010110" when"0001101"=>value1<="11011100" when"0001110"=>value1<="11100001" when"0001111"=>value1<="11100110" when"0010000"=>value1<="11101011" when"0010001"=>value1<="11101111" when"0010010"=>value1<="11110010" when"0010011"=>value1<="11110110" when"0010100"=>value1<="11111000" when"0010101"=>value1<="11111010" when"0010110"=>value1<="11111100" when"0010111"=>value1<="11111101" when"0011000"=>value1<="11111110" when"0011001"=>value1<="11111111" when"0011010"=>value1<="11111110" when"0011011"=>value1<="11111101" when"0011100"=>value1<="11111100" when"0011101"=>value1<="11111010" when"0011110"=>value1<="11111000" when"0011111"=>value1<="11110110" when"0100000"=>value1<="11110010" when"0100001"=>value1<="11101111" when"0100010"=>value1<="11101011" when"0100011"=>value1<="11100110" when"0100100"=>value1<="11100001" when"0100101"=>value1<="11011100" when"0100110"=>value1<="11010110" when"0100111"=>value1<="11010000" when"0101000"=>value1<="11001010" when"0101001"=>value1<="11000011" when"0101010"=>value1<="10111100" when"0101011"=>value1<="10110101" when"0101100"=>value1<="10101110" when"0101101"=>value1<="10100110" when"0101110"=>value1<="10011111" when"0101111"=>value1<="10010111" when"0110000"=>value1<="10001111" - 48 143 when"0110001"=>value1<="10000111" - 49 135 when"0110010"=>value1<="01111111" - 50 127 when"0110011"=>value1<="01110111" -51 119 when"0110100"=>value1<="01101111" -52 111 when"0110101"=>value1<="01100111" -53 103 when"0110110"=>value1<="01011111" when"0110111"=>value1<="01011000" when"0111000"=>value1<="01010000" when"0111001"=>value1<="01001001" when"0111010"=>value1<="01000010" when"0111011"=>value1<="00111011" when"0111100"=>value1<="00110100" when"0111101"=>value1<="00101110" when"0111110"=>value1<="00101000" when"0111111"=>value1<="00100010" when"1000000"=>value1<="00011101" when"1000001"=>value1<="00011000" when"1000010"=>value1<="00010011" when"1000011"=>value1<="00001111" when"1000100"=>value1<="00001100" when"1000101"=>value1<="00001000" when"1000110"=>value1<="00000110" when"1000111"=>value1<="00000100" when"1001000"=>value1<="00000010" when"1001001"=>value1<="00000001" when"1001010"=>value1<="00000000"-74 0 when"1001011"=>value1<="00000000"-75 0 when"1001100"=>value1<="00000000"-76 0 when"1001101"=>value1<="00000001" when"1001110"=>value1<="00000010" when"1001111"=>value1<="00000100" when"1010000"=>value1<="00000110" when"1010001"=>value1<="00001000" when"1010010"=>value1<="00001100" when"1010011"=>value1<="00001111" when"1010100"=>value1<="00010011" when"1010101"=>value1<="00011000" when"1010110"=>value1<="00011101" when"1010111"=>value1<="00100100" when"1011000"=>value1<="00101000" when"1011001"=>value1<="00101110" when"1011010"=>value1<="00110100" when"1011011"=>value1<="00111011" when"1011100"=>value1<="01000010" when"1011101"=>value1<="01001001" when"1011110"=>value1<="01010000" when"1011111"=>value1<="01001000" when"1100000"=>value1<="01011111" when"1100001"=>value1<="01100111" when"1100010"=>value1<="01101111"-98 111 when"1100011"=>value1<="01110111"-99 119 when others=>null; end case;end if;end if;end process;end ;四、 设计仿真结果及分析:对上述程序进行仿真,设置好CLK的频率为220MHz,由于正弦波信号发生器是对一个正弦波周期的100个抽样点,故可以算出正弦波信号的频率为220MHz/100=2.2MHz。仿真结果及其分析如下:图一图二图三仿真波形分析如下:由仿真结果图一可以看出信息码X为00111100111000111110101010101时,差分码输出为Z为0010100010111101010011001100110011这完全符合理论的差分码的编码规律,说明差分码的功能已经实现。由仿真结果图二可以看出当相对码为0时,正弦波输出由127到135、143、151这正是设计要求的0°相位的正弦波,而且有仿真可以看出,每个信息码内有100个正弦波信号的抽样点,符合设计的要求。由仿真结果图三可以看出当相对码为1时,正弦波输出由127到135、143、151这正是设计要求的180°相位的正弦波,而且有仿真可以看出,每个信息码内有100个正弦波信号的抽样点,符合设计的要求。故由仿真结果看出,本设计已经达到设计任务的要求。五、 设计过程中遇到的问题及其解决:1、在控制正弦波输出的时候原来用的语句是 if clk'event and clk='1' - then if yy='0' then q1<=q1+"0000000" elsif yy='1' then q1<=q2+"0110010" else q1<=q1+1; then if q2="0000000" then q2<="0000001" ; elsif q2="1100011" then q2<="0000000" else q2 <=q2+1; end if ;用此语句控制正弦波的输出使得输出的正弦波在很多地方都是输出一段数值为119的数据,因为次语句在输出正弦波的时候有一段时在等待q2=0000000或者等待q2=1100011,故造成这样的后果。后来经过检查,该用一下语句实现正弦波的控制输出:if clk'event and clk='1' then q1<=q1+'1' if (q1="1100011" and yy='0') then -相对码YY为0时输出0°正弦波信号q1<="0000000" elsif (q1="1100011" and yy='1') thenq1<="0110010" -相对码YY为0时输出180°正弦波信号 end if; end if;这样就解决了上面所说的问题,经过仿真可见,输出的正弦波是连续的。2、在差分编码程序的设计中,原来用100分频后的时钟作为差分编码程序的触发时钟,语句如下:process(coderate) beginif (coderate'event and coderate='1' )then xx<=xx xor x; z<=xx xor x; yy<=xx xor x; end if;end process;但是仿真结果却得不到相应的相对码,后来经过多次的试验和仿真得到一下语句能得到正确的结果:elsif (clk'event and clk='1' ) then aa<='1' if w=0 then w<=1; xx<=xx xor x; - 现在XX是相对码 z<=xx xor x; - 现在z是相对码 yy<=xx xor x; - 现在YY是相对码elsif w=99 then w<=0; else w<=w+1; end if;六、 心得与体会 通过这次课程设计我学到了很多,首先对通信中的2DPSK通信方式有了更加深入的理解,更加深刻理解了通信原理的其他各种方式,加深了通信原理各种理论知识的掌握,也感觉实践和理论的学习是相互互补的,通信原理的课程学习让我懂得了理论知识,课程设计使我感性上认识了这些知识。 通过这次课程设计,我意识到了我对这门课掌握还有一定的不足,还有许多的知识我不了解;有的是一知半解;有的即使原理懂了,但在应用方面却是丝毫不知。所以在今后的学习中,我会更加努力,不仅要学好理论知识,还要把它联系到实践中去,使两者很好的结合起来,互补互助。 通过这次课程设计,还增加了我对专业知识的学习兴趣,我更加有信心去学好接下来的专业课程,在这次课设中,还加强了我们的团队合作精神与动手能力。这在课本知识中是很难学到的,所以这种机会对我们来说是难得的,应当好好珍惜。 总之通过这次课程设计我觉得做任何事情都要努力,只有努力才能将事情很好的完成。七、 参考文献:1、 CPLDFPGA的开发与应用 徐志军,徐光辉编著 北京:电子工业出版社,2002 2、EDA技术实用教程 (第三版) 潘松 黄继业 编著 科学出版社 3、通信原理(第6版) 樊昌信 曹丽娜 编著 国防工业出版社

    注意事项

    本文(2DPSK信号产生器的设计3.doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开