最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

基于verilog的FSK编码实现

来源:动视网 责编:小OO 时间:2025-10-01 09:47:50
文档

基于verilog的FSK编码实现

基于verilog实现m序列的fsk调制1、实验目的✧验证fsk调制原理✧用cpld实现m序列的fsk调制2、实验仪器✧JH5001(Ⅲ)通信原理基础实验箱✧电脑3、实验原理3.1fsk调制原理fsk是frequencyshiftkeying的缩写,意为频率键控。对于二进制频率键控2fsk来讲,调制信号的1码对应于频率为f1的正弦波,0码对应于频率为f2的正弦波,最后将两种频率的正弦波拼接后输出。fsk调制原理框图如下所示:图表1fsk调制原理框图如上图所示,两个振荡器(硬件电路)分别产生两种
推荐度:
导读基于verilog实现m序列的fsk调制1、实验目的✧验证fsk调制原理✧用cpld实现m序列的fsk调制2、实验仪器✧JH5001(Ⅲ)通信原理基础实验箱✧电脑3、实验原理3.1fsk调制原理fsk是frequencyshiftkeying的缩写,意为频率键控。对于二进制频率键控2fsk来讲,调制信号的1码对应于频率为f1的正弦波,0码对应于频率为f2的正弦波,最后将两种频率的正弦波拼接后输出。fsk调制原理框图如下所示:图表1fsk调制原理框图如上图所示,两个振荡器(硬件电路)分别产生两种
 基于verilog实现m序列的fsk调制

1、实验目的

✧验证fsk调制原理

✧用cpld实现m序列的fsk调制

2、实验仪器

✧JH5001(Ⅲ)通信原理基础实验箱

✧电脑

3、实验原理

    3.1    fsk调制原理

    fsk是frequency shift keying的缩写,意为频率键控。对于二进制频率键控2fsk来讲,调制信号的1码对应于频率为f1的正弦波,0码对应于频率为f2的正弦波,最后将两种频率的正弦波拼接后输出。fsk调制原理框图如下所示:

图表 1    fsk调制原理框图

    如上图所示,两个振荡器(硬件电路)分别产生两种不同频率的正弦波,调制信号二进制信息分成两路,一路直接对正弦波f1进行调制,另外一路经过倒相后对正弦波f2进行调制,最后将两个调制后的信号相加输出,得到2fsk信号。

    3.2    程序流程

要求根据输入的时钟信号(14.336MHz)产生一个m序列(8KHz),并产生两个不同频率的正弦波,两个正弦波信号的频率分别为16KHz和32KHz,再对该m序列进行fsk调制,最后将fsk调制信号输出。cpld需要完成的任务是生成m序列和两个正弦波(数字信号),并进行fsk调制,生成的数字信号要经过AD7528实现DA转换,经过滤波器实现波形整形,才能得到平滑的fsk信号。

1、正弦波信号产生

首先,我们对一个正弦波进行16点采样,可以得到16个采样值,将这16个采样值分别转换为8位无符号2进制数表示如下:

176218245255245218176128
1011000011011010111101011111111111110101110110101011000011011010
7937100103779127
0100111100100101000010100000000000001010001001010100111101111111
要用verilog产生频率为16KHz和32KHz的正弦波,有两种方案。一种方法是,都使用16点采样恢复,用不同的采样频率;另一种方法是,使用相同的采样频率,一个正弦波用16点采样恢复,一个正弦波用8点采样恢复,也就是只是用16点采样中的8个采样值。本实验中,我们使用方法二。

设采样频率为。对于16点采样,程序设计中,每一个的上升沿,输出一个采样值。这样,得到的信号的周期是采样周期的16倍,相应的,输出信号频率是采样频率的十六分之一。同理,8点采样得到信号的频率为的八分之一。根据上面的分析,可以计算出的值为16KHz*16=256KHz。16点采样得到16KHz信号sin1,8点采样得到32KHz信号sin2。 

2、fsk调制

得到m序列之后,需要判断码型为0或1。如果是0,输出sin1信号,如果是1,输出sin2信号。为了保证输出数据的灵敏性,需要将判决语句放在always@(posedge clk_c)下(clk_c是采样触发信号)而不是放在m序列触发信号下。

4、quartus编程、仿真及下载

    1、    码型变换源程序分析

/*===================================================================*|

|*========================m序列的fsk调制============================*|

|*================m序列8KHz,f116KHz,f232KHz=====================*|

|*===================================================================*/

//输入时钟信号clk为14.336MHz,输出[7:0]数字调制信号D和m序列

module fsk(clk,D,m);

input clk;

output reg [7:0] D;

output reg m;

reg clk_m;     //m序列时钟,8HKz

reg clk_c;     //采样信号,256KHz

reg [7:0] sin1;     //正弦波信号

reg [7:0] sin2;

reg [3:0] a;         //m序列移位寄存器

reg [3:0] count;    //采样计数

reg [9:0] num1;    //计数用,用来产生m序列时钟

reg [8:0] num2;    //计数用,用来产生采样时钟

initial

begin

            count=0;

end

//产生m序列时钟信号clk_m,14.336M/8K=1792

//所以num1从0计数到(1792/2-1)5,clk_m取反。

always@(posedge clk)

begin

if(num1==5)

  begin

     clk_m<=~clk_m;

      num1<=0;

  end

else

num1<=num1+4'b1;

end

        //产生采样信号clk_c,14.336M/256K=56

        //所以num2从0计数到(56/2-1)27,clk_c取反

always@(posedge clk)

begin

if(num2==27)

  begin

clk_c<=~clk_c;

      num2<=0;

  end

else

num2<=num2+4'b1;

end

//m序列产生

always@(posedge clk_m)

begin

 if(a==0)

     a<=~a;     //m序列移位寄存器初值不能为全0

 else

  begin

        a[0]<=a[1];

        a[1]<=a[2];

        a[2]<=a[3];

        a[3]<=a[0]^a[3]; 

        m<=a[0];

  end        

end

//产生两个频率的正弦信号

always@(posedge clk_c)

    begin

        //16为一个来回,循环输出count对应的采样值

        if(count==15)

            begin

            count<=0;

            end

        else

            begin

            count<=count+6'b1; 

            end

//sin1,count0~count15,分别取16个采样值

//sin2,count0~count7,分别取8个采样值,上述16个采样值每隔一个取一个

//sin2,count8~count15=count0~count7

case (count)

0:

begin

sin1=8'b10110000;//176

sin2=8'b10110000;//176

end

1:

begin

sin1=8'b11011010;//218

sin2=8'b11110101;//245

end

2:

begin

sin1=8'b11110101;//245

sin2=8'b11110101;//245

end

3:

begin

sin1=8'b11111111;//256

sin2=8'b10110000;//176

end

4:

begin

sin1=8'b11110101;//245

sin2=8'b01001111;//79

end

5:

begin

sin1=8'b11011010;//218

sin2=8'b00001010;//10

end

6:

begin

sin1=8'b10110000;//176

sin2=8'b00001010;//10

end

7:

begin

sin1=8'b10000000;//128

sin2=8'b01001111;//79

end

8:

begin

sin1=8'b01001111;//79

sin2=8'b10110000;//176

end

9://1

begin

sin1=8'b00100101;//37

sin2=8'b11110101;//245

end

10://2

begin

sin1=8'b00001010;//10

sin2=8'b11110101;//245

end

11://3

begin

sin1=8'b00000000;//0

sin2=8'b10110000;//176

end

12://4

begin

sin1=8'b00001010;//10

sin2=8'b01001111;//79

end

13://5

begin

sin1=8'b00100101;//37

sin2=8'b00001010;//10

end

14://6

begin

sin1=8'b01001111;//79

sin2=8'b00001010;//10

end

15://7

begin

sin1=8'b01111111;//127

sin2=8'b01001111;//79

end

endcase

//fsk判决输出

        if (m==1)

        D=sin1;

        else 

        D=sin2;

    end

endmodule

    2、    quartus仿真

先对源程序进行编译,编译通过后,建立wave文件,对输出进行仿真。仿真之前,先将end time设置为1ms,这样,就可以得到m序列和cmi码的周期性波形。

仿真得到的输出波形如下图所示:

图表 4    quartus仿真波形

在上图中,可以完整的看到m序列的一个周期,共有15位,对应的cmi编码信号与m序列相比,有一定时间的延时。1码对应得00或11交替显示,0码时钟对应于01。程序成功!

文档

基于verilog的FSK编码实现

基于verilog实现m序列的fsk调制1、实验目的✧验证fsk调制原理✧用cpld实现m序列的fsk调制2、实验仪器✧JH5001(Ⅲ)通信原理基础实验箱✧电脑3、实验原理3.1fsk调制原理fsk是frequencyshiftkeying的缩写,意为频率键控。对于二进制频率键控2fsk来讲,调制信号的1码对应于频率为f1的正弦波,0码对应于频率为f2的正弦波,最后将两种频率的正弦波拼接后输出。fsk调制原理框图如下所示:图表1fsk调制原理框图如上图所示,两个振荡器(硬件电路)分别产生两种
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top