全数字2FSK调制解调系统Word文档下载推荐.docx

上传人:b****6 文档编号:20694727 上传时间:2023-01-25 格式:DOCX 页数:21 大小:627.13KB
下载 相关 举报
全数字2FSK调制解调系统Word文档下载推荐.docx_第1页
第1页 / 共21页
全数字2FSK调制解调系统Word文档下载推荐.docx_第2页
第2页 / 共21页
全数字2FSK调制解调系统Word文档下载推荐.docx_第3页
第3页 / 共21页
全数字2FSK调制解调系统Word文档下载推荐.docx_第4页
第4页 / 共21页
全数字2FSK调制解调系统Word文档下载推荐.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

全数字2FSK调制解调系统Word文档下载推荐.docx

《全数字2FSK调制解调系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《全数字2FSK调制解调系统Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。

全数字2FSK调制解调系统Word文档下载推荐.docx

2、FSK解调原理

FSK解调总体框图如下:

各部分的对应的波形原理为:

经抽样判决后,得到规整的信码。

3、位同步提取

与HDB3位同步原理相同,略。

五.实验方案

1、设计思路

因FPGA实验板的晶振为32.768M,频率过高,所以要对系统时钟进行分频,设计了一个64分频器。

考虑到接收端的A/D采样工作频率,将输入的时钟又通过了8分频器,然后通过8分频得到载波f1,速率32.768M/64/8/8=8Kbps;

通过16分频得到载波f2,速率32.768M/64/8/16=4Kbps;

通过1024分频得到信码,速率32.768M/64/8/1024=62.5bps;

我们采用5阶伪随机序列。

在调制模块中称为div64模块、div8模块、div16模块、div1024模块和m5模块。

之后,电路中加入两个载波映射表,将两个不同的频率根据D/A转换表映射成不同的载波。

它们分别为f1_zaibo和f2_zaibo模块。

然后通过调制模块mux成为2FSK调制信号。

解调电路采用过零检测的方法,不同的载波对应的零点数不同,过零点数反映了载波变化的不同,也反映了信码的不同。

按设计原理,解调模块包括:

A/D采样模块、将正弦波进行变换的整形模块、微分整流模块、脉冲展宽模块、低通滤波模块和抽样判决模块。

为使解调部分的时钟信号与调制部分同步,加入了位同步dpll模块,控制解调部分的抽样判决时钟。

2、分频器模块

调制模块中共有div64.v、div8.v、div16.v、div1024.v、div128.v等分频器模块,设计如下,供参考。

/////////////////////////////////////////////////////////////////////////////

//64分频器

modulediv32(

clk,

divout);

inputclk;

outputdivout;

reg[5:

0]div;

//采用6bit寄存器

regdivout;

initial

div=0;

always@(posedgeclk)

begin

div=div+1;

//计数器操作

divout=div[5];

//输出最高位

end

endmodule

///////////////////////////////////////////////////////////////////////////////

//8分频器

modulediv128(

reg[2:

//采用3bit寄存器

divout=div[2];

//////////////////////////////////////////////////////////////////////////

//16分频器

reg[3:

//采用4bit寄存器

divout=div[3];

//1024分频器

reg[9:

//采用10bit寄存器

divout=div[9];

//128分频器

reg[6:

//采用7bit寄存器

divout=div[6];

从设计文件来看,输出最高位的“1”和“0”个数相同,因此分频后为占空比为1/2的方波。

3、信号源模块

m序列模块由设计文件m5.v完成,基带信号源由此产生。

设计如下供参考。

//该模块实现5阶伪随机序列信号

modulem5

(clk,

mout);

//端口列表

outputmout;

//端口说明

reg[4:

0]cnt;

regmout;

wire[4:

0]d;

//数据类型定义

assignd[3:

0]=cnt[4:

1];

//赋值语句,将寄存器输出赋值给d触发器输入

assignd[4]=cnt[2]^cnt[0];

//赋值语句,实现生成多项式g(x)=x^5+x^2+1

parametermo=5'

b10000;

//参数定义

if(cnt==0)

cnt=mo;

//避免全零

else

cnt[4:

0]=d[4:

0];

//5阶移位寄存器

mout=cnt[0];

////////////////////////////////////////////////////////////////////////////

4、载波映射表模块

载波映射表由两个模块组成,分别是f1_zaibo.v和f2_zaib0.v,每个模块又调用下面的两个子模块rom16.v和sin16.mif,各个模块设计如下,供参考。

//该模块产生f1载波

modulef1_zaibo(

f1,

out);

inputf1;

output[7:

0]out;

//端口定义

reg[7:

0]count;

0]q1;

initial

count=0;

//初始化

always@(posedgef1)

count=count+1;

out=q1[7:

//4bit计数器,产生rom表地址

rom16

U1(.address(count[3:

0]),

.inclock(f1),

.q(q1));

//调用rom表,产生载波

//////////////////////////////////////////////////////////////////////////////

//该模块产生f2载波

modulef2_zaibo(

f2,

inputf2;

0]q2;

always@(posedgef2)

out=q2[7:

.inclock(f2),

.q(q2));

//rom表,调用载波采样点,一个载波周期采样16个点

modulerom16(

address,

inclock,

q);

input[3:

0]address;

inputinclock;

output[7:

0]q;

lpm_romlpm_rom_component(

.address(address),

.inclock(inclock),

.q(q));

//调用库函数lpm_rom,产生新的元件

defparam//参数重定义

lpm_rom_component.lpm_width=8,//8bit输出数据

lpm_rom_component.lpm_widthad=4,//4bit地址宽度可选择16个样点

lpm_rom_component.lpm_address_control="

REGISTERED"

//任意

lpm_rom_component.lpm_outdata="

UNREGISTERED"

//任意

lpm_rom_component.lpm_file="

sin16.mif"

;

//调用16个样点表,放在//文件sin16.mif中

//正弦表,一个周期16个样点值

DEPTH=16;

%Memorydepthandwidtharerequired%

WIDTH=8;

%Enteradecimalnumber%

ADDRESS_RADIX=DEC;

%Addressandvalueradixesareoptional%

DATA_RADIX=DEC;

%EnterBIN,DEC,HEX,orOCT;

unless%

%otherwisespecified,radixes=HEX%

--Specifyvaluesforaddresses,whichcanbesingleaddressorrange

CONTENT

BEGIN

0:

93779128176218246255246218176128793790;

END;

/////////////////////////////////////////////////////////////////////////

5、调制模块

将m序列信码作控制信号用来选择不同的载波,当m信码为“1”时选择载波f1,当m信码为“0”时,选择载波f2,从而产生调制信号。

该模块用8位2选1数据选择器实现,设计文件为mux.v,供参考。

///////////////////////////////////////////////////////////////////////////

//该模块对载波f1和载波f2进行选择

modulemux(q1,q2,out,m);

input[7:

inputm;

always@(q1orq2)

case({m})

1'

b1:

b0:

//2选1数据选择器

endcase

调制后的信号经D/A转换送到示波器,显示波形如下。

可清楚地看到调制信号波形。

6、A/D采样模块

将D/A输出信号连接到A/D的输入,通过FPGA采样模块转换成数字信号。

该模块由设计文件mx7821.v完成,设计如下供参考。

//该模块完成A/D采样

modulemx7821(clk,

din,

dout,

rd);

0]din;

0]dout;

outputrd;

regrd;

0]cot;

wire[3:

assigncount=cot[3:

//赋值语句

cot=cot+1;

//实现16进制计数器

if(count==0||count==1||count==2||count==3||count==4||count==5||count==6||count==7)

begin

rd=1;

//根据A/D时序图,产生读信号,送给A/D芯片

end

else

rd=0;

if(count>

=12)

dout=din;

//根据A/D时序图,在后4个时钟A/D芯片输出8bit数据

7、正弦波整形模块

该模块的作用是将正弦波整形成矩形,便于处理。

该模块由设计文件zx.v完成,设计如下供参考。

//该模块对输入正弦波信号进行整形

modulezx(a,b);

0]a;

outputb;

regb;

always@(a[7:

0])

case({a[7],a[6]})

2'

b11:

b=1;

b00:

b=0;

b10:

b01:

//按高两位进行判决

8、微分整流模块

该模块的作用是取出输入信号的上升延,从而完成微分整流操作。

该模块由设计文件wf.v完成,设计如下供参考。

//该模块进行微分操作

modulewf(

clk,

rz,

bit);

inputclk;

inputrz;

outputbit;

regbit;

reg[1:

0]pre;

pre[1]=pre[0];

pre[0]=rz;

if(pre==2'

b01)//上升边沿检测,即微分

bit=1;

bit=0;

9、脉冲展宽模块

该模块的作用是将微分后的波形延时一定的脉冲,展宽成接近原始信码的码流。

该模块由设计文件pulse.v完成,设计如下供参考。

//该模块实现脉冲展宽

modulepulse(clk,in,out);

inputin;

outputout;

regout;

reg[15:

0]q;

always@(posedgeclk)

q[15:

1]=q[14:

q[0]=in;

if(q[15:

0]==0)

out=0;

out=1;

//脉冲展宽16个输入时钟周期

10、低通滤波模块

该模块的作用是滤除波形中的毛刺,使处理后的码流更接近原始信码。

低通滤波采用了简便的方法,用做相关运算的方法代替复杂的抽头系数计算。

该模块由设计文件lpf.v完成,设计如下供参考。

//该模块实现低通滤波

modulelpf(clk,in,out);

reg[16:

0]add;

q[16:

1]=q[15:

add=q[0]+q[1]+q[2]+q[3]+q[4]+q[5]+q[6]+q[7]+q[8]+q[9]+q[10]+q[11]+q[12]+q[13]+q[14]+q[15]+q[16];

//做相关运算

if(add<

17)

out=0;

//滤波

out=1;

11、抽样判决模块

该模块的作用是根据恢复的符号时钟,经抽样判决后得到最后的解调信号。

该模块由设计文件pj.v完成,设计如下供参考。

//该模块对输出码元进行判决,得到最后的输出数据

modulepj(clk,in,out);

always@(negedgeclk)

out=in;

//按符号数据输出

12、位同步模块

根据位同步原理框图,分频器模值为N=16,即fb=16fs,N/2为8,因此预置模值为7、8和9。

该模块由设计文件dpll.v完成,设计如下供参考。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1