1、 题 目:《软件无线电原理与技术》实验报告 FSK调制与解调 姓 名: 学 院:信息科学与技术学院 系:通信工程系 专 业: 年 级: 学 号: 教 师: 2023 年 7 月 1 日 《软件无线电原理与技术》实验报告 FSK调制与解调 一、实验目的 l 理解 FSK 调制与解调的原理与意义 l 掌握 DDS 的用法 l 练习和熟悉程序的编写与仿真验证 l 掌握 FSK调制与解调的数字实现过程 二、实验原
2、理 2.1 FSK调制原理 2FSK(二相频移键控)是用两个不同频率的正弦波形来传送码元“0”和“1”。 2FSK 信号的产生方法重要有两种,一种是用二进制基带矩形脉冲信号去调制一个调频器,使其输出两个不同频率的码元如图1(a)所示。第二种方法是用一个受基带脉冲控制的开关电路去选择两个独立频率源的振荡作为输出,如图1(b)所示。 图1 2FSK调制原理框图 其中,由调频器产生的2FSK 信号在相邻码元之间的相位是连续的,如图2 所示;而开关法产生的2FSK 信号由两个独立的频率源构成,所以2FSK 在相邻码元之间的相位不一定是连续的。 图2 2FSK信号波形图 实验设
3、计一款 2-FSK 调制器。 l 功能规定:规定当信号并行输入时,输出已调信号和输出使能信号。载波信号由DDS模块生成,输出的使能信号out_fsk_en 经IO1 显示在示波器上,输出的已调信号经DA模块I 路显示在示波器上进行观测。 l 时序规定:当输入使能信号in_fsk_en 为高电平时,信号输入2-FSK 调制器;当调制模块输出使能信号out_fsk_en 为高电平时,输出已调信号。 l 参考设计:分为五个模块实现(拨码开关输入模块、DDS1 模块、DDS2 模块、FSK 调制模块、DA 输入模块)。其中拨码开关输入模块实现拨码开关输入的并串转化,并产生输出使能信号。DDS1
4、模块由IP 核DDS Compiler v2.1 生成,产生余弦信号,设立为系统时钟40MHz,输出时钟1.25MHz,分辨率为1HZ,输入时钟时能信号ce,输出余弦信号cosine,其他设立为默认。DDS2 模块由IP 核DDS Compiler v2.1 生成,产生余弦信号,设立为系统时钟40MHz,输出时钟2.5MHz,分辨率为1HZ,输入时钟时能信号ce,输出余弦信号cosine,其他设立为默认。FSK 调制模块实现fsk 调制,DA 输入模块实现补码转偏移码以便数据输入DA 模块,实现框图如图3 所示。 图3 2FSK调制器实现框图 2.2 FSK解调原理 2FSK 信号的
5、解调分为相干解调和非相干解调两类。非相干解调原理框图如图4 所示。 图4 2FSK信号的非相干解调结构框图 本实验采用相干解调法,相干解调原理框图如图5 所示。 图5 2FSK信号的相干解调结构框图 实验设计一款 2-FSK 调制/解调器: l 功能规定:当信号输入时,输出解调信号以及输出使能信号。实验中的输入信号可用拨码开关输入,载波信号由DDS 模块生成,输出的使能信号out_defsk_en 经IO1 显示在示波器上,输出的解调信号经IO2 显示在示波器上。 l 时序规定:当输入使能信号in_fsk_en 为高电平时,信号输入2-FSK 调制器,当输出使能信号out_
6、defsk_en 为高电平时,输出解调信号。 l 参考设计:分为五个模块实现(拨码开关输入模块、DDS1 模块、DDS2 模块、FSK 调制模块、FSK 解调模块),其中拨码开关输入模块实现拨码开关输入的并串转化,并产生输出使能信号。DDS1 模块由IP 核DDS Compiler v2.1 生成,产生余弦信号,设立为系统时钟40MHz,输出时钟5.5MHz,分辨率为1HZ,输入时钟时能信号ce,输出余弦信号cosine,其他设立为默认。DDS2 模块由IP 核DDS Compiler v2.1 生成,产生余弦信号,设立为系统时钟40MHz,输出时钟5.5MHz,分辨率为1HZ,输入时钟时能
7、信号ce,输出余弦信号cosine,其他设立为默认。FSK 调制模块实现fsk 调制。FSK 解调模块实现fsk 的相干解调,其中涉及两路带通滤波器模块、两路相乘模块和两路低通滤波器模块六个子模块,实现框图如图6 所示。 图6 2FSK调制/解调器实现框图 三、实验内容 l FSK 调制与解调的Matlab仿真 l FSK 调制与解调的FPGA 代码的设计 l FSK 调制与解调功能的仿真 l FSK 调制与解调的测试 四、实验环节 4.1 FSK调制与解调的Matlab仿真 (1)启动Matlab,新建M文献,根据FSK调制与解调原理编写matlab代码,实现2-FSK
8、调制与解调。 (2)运营编写的M文献,得到输入信号、调制后的信号和解调后的信号波形,记录下来。 4.2 FSK 调制与解调功能的仿真及测试 4.2.1 FSK调制功能的仿真及测试 (1)创建ISE 工程FSK,并设立设备参数。 (2)根据参考设计编写拨码开关输入模块和FSK 调制模块的FPGA 代码,并加入工程。 (3)使用IP 核产生DDS1 模块和DDS2 模块。注意输入输出和参数的设立。 (4)编写测试文献设定输入信号,通过ISE 调用Modelsim 仿真。注意,进行ModelSim 仿真时,请用本实验文献夹中的SRC 文献夹中的工程进行仿真。 (5)Model
9、sim 被调用启动后,选中需要观测的信号,在Transcript 中先后运营指令restart和run 0.1ms。 (6)观测各信号波形,填写Modelsim 的仿真结果。 输入的信号: 01110101(从左到右为高位到低位,输出信号低位先出,高位后出) 观测调制后的信号波形及输出使能信号: (7)根据参考设计编写DA 输入模块的FPGA 代码,并加入工程。 (8)将约束文献加入工程,并结合实验箱的管脚编写约束文献。 (9)综合、实现、硬件编程后,给实验箱上电,将生成的bit 流文献下载到实验平台上。 (10)拨动拨码开关SW9 设立输入信号,拨动拨档开关SW1 和KE
10、Y1 控制输入使能信号 和复位信号,示波器的一支表笔接在IO1 上观测输出使能信号,另一支表笔接在DA 模块I 路输出上观测已调信号。观测示波器上输出使能信号和调制后的波形,并记录下来。 4.2.2 FSK解调功能的仿真及测试 (1)创建ISE 工程DEFSK,并设立设备参数。 (2)根据参考设计编写拨码开关输入模块、FSK 调制模块和FSK 解调模块的FPGA 代码,并加入工程。 (3)使用IP 核产生DDS1 模块和DDS2 模块。注意输入输出和参数的设立。 (4) 使用IP 核产生FSK 解调模块中的子模块两路相乘模块。注意输入输出和参数设立。 (5) 使用IP
11、核产生FSK 解调模块中的子模块两路带通滤波模块。注意输入输出和参数的设立。其中需要添加coe 文献,我们借助FDAtool 设计滤波器并导出coe 文献。 (6) 使用IP 核产生FSK 解调模块中的子模块两路低通滤波模块。注意输入输出和参数的设立。其中需要添加coe 文献,我们借助FDAtool 设计滤波器并导出coe 文献。 (7)编写测试文献T_DEFSK.v 设定输入信号,通过ISE 调用Modelsim 仿真。注意,进行ModelSim 仿真时,请用本实验文献夹中的SRC 文献夹中的工程进行仿真。 (8)Modelsim 被调用启动后,选中需要观测
12、的信号,在Transcript 中先后运营指令restart和run 0.1ms。 (9)观测各信号波形,填写Modelsim 的仿真结果。 输入的信号: 01110101(从左到右为高位到低位,输出信号低位先出,高位后出) 观测解调后的信号波形: (10)将约束文献加入工程,并结合实验箱的管脚编写约束文献。 (11)综合、实现、硬件编程后,给实验箱上电,将生成的bit 流文献下载到实验平台上。 (12)拨动拨码开关SW9 设立输入信号,拨动拨档开关SW1 和KEY1 控制输入使能信号和复位信号,示波器的一支表笔接在IO1 上观测输出使能信号,另一支表笔接在IO2 上观测解调
13、后的信号波形。观测示波器上的信号波形,并记录下来。 五、实验结果与分析 1、Matlab仿真代码如下: Fc=10; %载频 Fs=40; %系统采样频率 Fd=1; %码速率 N=Fs/Fd; df=10; numSymb=25;%进行仿真的信息代码个数 M=2; %进制数 SNRpBit=60;%信噪比 SNR=SNRpBit/log2(M); seed=[12345 54321]; numPlot=25; %产生25个二进制随机码 x=randsrc(numSymb,1,[0:M-1]);%产生25个二进制随机码 figure(1
14、) stem([0:numPlot-1],x(1:numPlot),'bx'); title('二进制随机序列') xlabel('Time'); ylabel('Amplitude'); %调制 y=dmod(x,Fc,Fd,Fs,'fsk',M,df); numModPlot=numPlot*Fs; t=[0:numModPlot-1]./Fs; figure(2) plot(t,y(1:length(t)),'b-'); axis([min(t) max(t) -1.5 1.5]); title('调制后的信号') xlabel('Time'); ylabel
15、'Amplitude'); %在已调信号中加入高斯白噪声 randn('state',seed(2)); y=awgn(y,SNR-10*log10(0.5)-10*log10(N),'measured',[],'dB');%在已调信号中加入高斯白噪声 figure(3) plot(t,y(1:length(t)),'b-');%画出通过信道的实际信号 axis([min(t) max(t) -1.5 1.5]); title('加入高斯白噪声后的已调信号') xlabel('Time'); ylabel('Amplitude'); %相干解调 figure(4) z
16、1=ddemod(y,Fc,Fd,Fs,'fsk/eye',M,df); title('相干解调后的信号的眼图') %带输出波形的相干M元频移键控解调 figure(5) stem([0:numPlot-1],x(1:numPlot),'bx'); hold on; stem([0:numPlot-1],z1(1:numPlot),'ro'); hold off; axis([0 numPlot -0.5 1.5]); title('相干解调后的信号原序列比较') legend('原输入二进制随机序列','相干解调后的信号') xlabel('Time'); ylabe
17、l('Amplitude'); %非相干解调 figure(6) z2=ddemod(y,Fc,Fd,Fs,'fsk/eye/noncoh',M,df); title('非相干解调后的信号的眼图') %带输出波形的非相干M元频移键控解调 figure(7) stem([0:numPlot-1],x(1:numPlot),'bx'); hold on; stem([0:numPlot-1],z2(1:numPlot),'ro'); hold off; axis([0 numPlot -0.5 1.5]); title('非相干解调后的信号') legend('原输入
18、二进制随机序列','非相干解调后的信号') xlabel('Time'); ylabel('Amplitude'); %误码率记录 [errorSym ratioSym]=symerr(x,z1); figure(8) simbasebandex([0:1:5]); title('相干解调后误码率记录') [errorSym ratioSym]=symerr(x,z2); figure(9) simbasebandex([0:1:5]); title('非相干解调后误码率记录') %滤除高斯白噪声 Delay=3;R=0.5;PropD=0;
19、滞后3s [yf,tf]=rcosine(Fd,Fs,'fir',R,Delay); %升余弦函数 [yo2,to2]=rcosflt(y,Fd,Fs,'filter',yf); %加入高斯白噪声后的已调信号和通过升余弦滤波器后的已调信号 t=[0:numModPlot-1]./Fs; figure(10) plot(t,y(1:length(t)),'r-'); hold on; plot(to2,yo2,'b-'); hold off; axis([0 30 -1.5 1.5]); xlabel('Time'); ylabel('Amplitude')
20、 legend('加入高斯白噪声后的已调信号','通过升余弦滤波器后的已调信号') title('升余弦滤波前后波形比较') eyediagram(yo2,N);%眼图 title('加入高斯白噪声后的已调信号的眼图') 得到的输入波形如下: 调制信号波形如下: 解调信号波形如下: 解调信号波形与原始信号相同。 2、在示波器上,输入信号和调制后的信号波形如下: 输入信号 调制后的波形 01110101(从左到右是高位到低位) 3、在示波器上,输入信号和解调后的信号波形如下: 输入信号 解调后的波形 01011011(从左到右是高位到低位) 11010110(从左到右是高位到低位) 4、观测FPGA实现的内部结构以及布局布线、信号框图如下:






