您的位置 首页 厂商

QPSK数字调制解调的FPGA完成,包含源程序

随着FPGA技术的发展,数字通信技术与FPGA的结合体现了现代数字通信系统发展的一个趋势。为了使高速通信系统更加紧凑、成本更低、减小功耗,特别是提高设备的可靠性,可采用Q P S K数字调制技术来实现

摘要:跟着FPGA技能的开展,数字通讯技能与FPGA的结合表现了现代数字通讯体系开展的一个趋势。为了使高速通讯体系愈加紧凑、本钱更低、减小功耗,特别是进步设备的可靠性,可选用Q P S K数字调制技能来完结,其具有频谱运用率高、频谱特性好、抗搅扰功用强、传输速率快等特色。运用verilog编写在QPSK调制解调代码以及ISE自带的IP CORE在Xilinx公司的FPGA平台上测验,成果表明体系可彻底完结调制解调功用,并具有集成度高和可软件晋级等长处。

导言:四相肯定移相键控(QPSK)技能以其抗搅扰功用强、误码功用好、频谱运用率高级长处,广泛运用于数字通讯体系。跟着超大规模集成电路的呈现,FPGA在数字通讯体系中的运用日益广泛,现在已提出了多种根据FPGA完结QPSK的办法。本文根据FPGA完结直接数字频率组成(DDS),通过对DDS信号(载波信号)输出相位的操控完结调相,除DA转化外,其它进程均能够FPGA完结。QPSK调制信号是按捺载波的信号,无法用惯例的锁相环或窄带滤波器直接提取参阅载波,但它又不同于一些接连相位调制信号,其载波相位改变只能取有限的几个离散值,这就隐含了参阅载波的相位信息。所以,能够通过非线性处理,消除信号中的调制信息,发生与原载波相位有必定联系的重量,然后再提纯该信号,康复已被按捺的载波信号,从而完结信号的相干解调。本文所规划的QPSK调制解调器因为具有较好的频带运用率,具有体积小、功耗低、集成度高、软件可移植性强、扰搅扰能力强的特色,契合未来通讯技能规划的方向。

1.QPSK调制的基本原理

四相肯定移相键控QPSK是MPSK的一种特殊情况,它运用载波的四种不同相位来表征数字信息。因为每一种载波相位代表两个比特信息,故每个四进制码元又被称为双比特码元。咱们把组成双比特码元的前一信息比特用a表明,后一比特信息用b表明。双比特码元中两个信息比特ab通常是按格雷码(即反射码)摆放的,当ab为00时,载波相位为0°,当ab为01时,载波相位为90°,当ab为11时,载波相位为180°,当ab为10时,载波相位为270°。

QPSK信号的发生分为调相法和相位挑选法。因为调相法比较常用,且实践操作性更强,故在本文中,挑选调相法。用调相法发生QPSK信号的组成方框图如图1所示。图中,串/并改换器将输入的二进制序列顺次分为两个并行的双极性序列。设两个序列中的二进制数字别离为a和b,每一对ab称为一个双比特码元。双极性的a和b脉冲通过两个平衡调制器别离对同相载涉及正交载波进行二相调制。将ab两路输出叠加,得到四相移相信号,其相位编码逻辑联系为:当双比特码元ab为11时,输出相位为315°的载波;ab为01时,输出相位为225°的载波;ab为00时,输出相位为135°的载波;ab为10时,输出相位为45°的载波,相应的对照联系如下表所示。

数据与相位的对照联系

传统的QPSK模仿调制器结构,一般选用正交调制办法。全数字调制器的完结仍选用正交调制办法,仅仅将模仿处理单元选用数字信号处理的算法实。QPSK选用四种不同的载波相位来表明数字信息,每个载波相位代表2比特信息,其完结有两种办法,相位挑选法与正交调制法,相位挑选法又分为A、B两种办法。本文选用相位挑选法B办法来完结QPSK信号,如图1所示。

图1 QPSK调制框图

2.QPSK调制的MATLAB仿真

QPSK调制的MATLAB仿真相关的代码网上有许多,本文作者自己编写了一段代码,能够简略的表明调制的原理,在此仅将代码罗列如下,相的注释现已很清楚,不再赘述。代码要归纳解调部分一同研读。

clear all;

clc

M=4;

Ts=1;

fc=5;

N_sample=8;%每个正弦波采样点数

N_num=300;%I Q路别离100个bit

dt=1/fc/N_sample;

t=0:dt:N_num*Ts-dt;

T=dt*length(t);

Noise=(1/500)*randn(1,length(t))*32767;%参加噪声

py1f=zeros(1,length(t));

py2f=zeros(1,length(t));

for PL=1:1:700%参加噪声强度加大

d1=sign(randn(1,N_num));

d2=sign(randn(1,N_num));

d=[d1;d2];

D=reshape(d,1,[]);%D是输入的信息序列

gt=ones(1,fc*N_sample);

s1=sigexpand(d1,fc*N_sample);%此为符号位扩展函数,相关函数在原代码中可见

s2=sigexpand(d2,fc*N_sample);

b1=conv(s1,gt);

b2=conv(s2,gt);

s1=b1(1:length(s1));

s2=b2(1:length(s2));

st_qpsk_1=s1.*round(cos(2*pi*fc*t)*32767);

st_qpsk_2=s2.*round(sin(2*pi*fc*t)*32767);

st_qpsk=st_qpsk_1+st_qpsk_2;%定点量化后的数据

%———————————————————–

% 发射信号的功率谱

%plot((abs(fft(st_qpsk,2048))).^2);

3.QPSK调制的FPGA完结

QPSK的FPGA规划内部逻辑联系如下图2所示,规划最高发送信息速率为2.5Mbit/s,首要通过一个串并改换模块将信息速率折半至1.25Mbit/s,然后通过相位挑选模块别离挑选45 135 225 315度相角中的一个作为正弦波的初始相位,每个码片继续5个正弦波周期,因为在每个码片的开端和完毕会跟其相邻的码片的相位存在差异,导致输出的信号频谱发生严峻的混跌,不便于后续处理,所以在输出端口参加FIR型带通滤波器,让带外信号赶快的衰减至最小。

输出的信号通过AD改换,转化成模仿信号,此刻的信号能够输出到后续相关芯片进行处理,本文不再做介绍。

图2 体系框图

调制代码文件之间的逻辑联系入下图所示:

各个文件的逻辑联系

其间QPSK_CODING.V文件是调制的最上层文件其对外端口如下所示,

module QPSK_CODING(clk_2_5M,clk_50M,clk_1_25M,EN,din,ready,dataout,count);

input clk_2_5M,clk_50M,clk_1_25M,EN,din;

output ready;

output [15:0]dataout;

output [5:0]count;

本规划用到3种时钟,他们之间的联系如下所示,时钟在详细的硬件完结是要有2个DCM单元组成。

数字时钟办理单元

各时钟之间的联系图

下图所作的仿真是假设有14bit的数据输入到改调制模块,最终通过调制器后的输出成果如下所示:

通过调制后的QPSK信号波形图(未加滤波器前的输出)

改规划的其他相关模块的规划上层逻辑模块如下所示:

数据通过串并改换模块module serial_to_parallel(clk_2_5M,EN,din,ready,dataout);

然后再通过发生正弦波模块module Produce_Sin(EN,clk_2_5M,clk_50M,datain,ready,addr,count);

4.QPSK解调的基本原理

在全数字完结Q P S K解调的进程中,与AD接口的前端需求很高的处理速度,可是这些处理的算法又比较简略,FPGA器材共同的并行实时处理的特色刚好能够在这里得到表现,因而,A D C今后的数字信号处理悉数由FPGA来完结。考虑到QPSK相干检测比差分检测有2.3dB功率增益,挑选用相干解调算法完结解调。解调方框图如下图2:

本文选用的解调计划是将A/D量化得到的数字信号x(n)与NCO发生的一对彼此正交的本地载波相乘,然后别离通过低通滤波器滤波得到基带信号,从中提取为同步信息,并通过载波同步模块对NCO的输出进行调整,最终通过解差分与并串转化得到调制信息。

图2 QPSK解调框图

如上图所示,载波康复电路从接纳到的Q P S K信号中,康复出与原传输载波频率和相位相干的载波振动信号,一起将接纳的Q P S K信号分红两路,一路与康复的载波直接相乘;另一路与移相9 0°的康复载波相乘,乘积项别离积分,康复的位时钟对成果进行抽样,经判定再生出原I、Q数据比特,并、串改换器将并行的I、Q数据变成串行二进制输出数据。

卡斯特环法提取载波的一个办法入下图所示:

卡斯特环法提取载波原理图

5.QPSK解调的MATLAB仿真

此代码上接QPSK调制代码,

%—————————————————-

% 信道传输

st_qpsk=st_qpsk+Noise*(PL-1);%参加噪声

st_qpsk=round(st_qpsk/max(abs(st_qpsk))*32767);%AD采样后的数据 16比特

%—————————————————-

% 解调 将32位宽截取到16位

decode_qpsk_s1=round((st_qpsk.*round(cos(2*pi*fc*t)*32767))/(2^16));

decode_qpsk_s2=round(st_qpsk.*round((sin(2*pi*fc*t))*32767)/(2^16));

%——————————————————–

% 定点FIR滤波器

Num_fix=[106,372,745,1024,1024,745,372,106;];

Num_fix_2=[1,8,23,55,109,189,298,431,581,732,867,969,1024,1024,969,867,732,581,431,298,189,109,55,23,8,1;];

fir_output_s1=filter(Num_fix,1,decode_qpsk_s1);

fir_output_s1=round(fir_output_s1/(2^10));%截取

subplot(2,1,1); plot(t,fir_output_s1);

fir_output_s2=filter(Num_fix_2,1,decode_qpsk_s2);

fir_output_s2=round(fir_output_s2/(2^10));%截取

subplot(2,1,2); plot(t,fir_output_s2);

%————————————————————-

% 判定decode_s1 decode_s2

for(k=20:40:(N_num*N_sample*fc))

if(fir_output_s1(k)>0)

decode_s1(round((k)/40))=1;

else

decode_s1(round((k)/40))=-1;

end

if(fir_output_s2(k)>0)

decode_s2(round((k)/40))=1;

else

decode_s2(round((k)/40))=-1;

end

end

%—————————————————————

% 误码率剖析

c=[decode_s1;decode_s2];

C=reshape(c,1,[]);

compare=C>D;

Error=find(compare);

E(PL)=length(Error)/N_num;%E(PL)中寄存误码率

end

figure(2);

plot(E);

完好的调制解调及误码率剖析可见本文顺便MATLAB代码文件(QPSK_fir_compare.m)

其间的滤波器的挑选不同会直接影响到相同信噪比下的误码率参数。

6.QPSK解调的FPGA完结

通过调制后的数据具有50Mbit/s的信息速率,通过有符号数乘法模块,数据别离与彼此正交的两正弦波相乘,相乘后的数据再通过FIR低通滤波器模块,滤除去高频信号,经守时抽判模块生成码率为1.25Mbit/s的两列数据,最终通过并串改换模块合并为原先的2.5Mbit/s的符号速率。

体系框图

Verilog代码各个文件的逻辑联系入下图所示:

各个文件的逻辑联系

其间TEST_QPSK.V文件是测验文件,用来测验编写的Verilog代码是否正确,其间ROM文件中寄存的通过MATLAB定点数仿真生成的QPSK调制数据,共有1K字节的数据量。测验文件通过没个时钟周期将ROM中寄存的调制数据输出到编写的QPSKR文件中,完结解调测验。

QPSK.V文件是用到的解调文件的最上层文件,其对外端口如下:

module QPSKR(clk, en, DIN, dout, ready

);

input clk;

input en;

input [15:0]DIN;

output [1:0]dout;

output ready;

用两路正交的相干载波去解调,能够很容易地别离这两路正交的2PSK信号。相干解调后两路并行码元a和b,通过并/串改换后,成为串行数据输出。

输入的数据与现已确定的正交载波相乘后的输出成果如下图所示,图中只列出了一路信号的输出成果。

未滤波前的输出数据

本文的一个规划要点在于滤波器的规划,运用MATLAB中滤波器协同规划单元,如下图所示,能够生成7阶滤波器,其系数为[0.0195568849377802 0.0684534436681266 0.136904053813160 0.188242810004127 0.188242810004127 0.136904053813160 0.0684534436681266 0.0195568849377802];

通过定点量化后得到0,23170,32767,23170,0,42366,32769,42366;将其写入到coe文件中作为滤波器的抽头系数。

FDATOOL东西输出成果

通过FIR低通滤波器后的输出成果如下图所示:

FIR滤波器输出的两路信号

通过滤波器后的频谱如下所示,从图中能够看出带外信号现已衰减到很小值。

通过滤波器后的信号频谱

通过守时提取模块的抽判最终两路信号的输出成果如下,从图中咱们能够看到dout输出的数据速率为1.25Mbit/s。

两路解调后的数据输出

总上所述,当顶层模块检测到有有用数据抵达时,en信号被置为高电平,此刻信号输入到后解调模块,在输出端口,当ready信号有用时,在dout端口会有有用的数据输出。输出的数据如下所示:

上层模块中包括了如下个模块

MUL_QPSKR mul1(clk, p1, data_out1, DIN, ce, ready1);

MUL_QPSKR mul2(clk, p2, data_out2, DIN, ce, ready2);

ROM_SIN sin0(clk,addr,en,ready0,data_out1, data_out2);

FIR fir1(rfd1, rdy1, ~ready1, clk, dout1, p1[31:16]);

FIR fir2(rfd2, rdy2, ~ready2, clk, dout2, p2[31:16]);

judgebit judge0(clk, dout1[34], dout2[34], rdy1, rdy2, dout, ready);

其间MUL_QPSKR是乘法器单元,完结有符号数乘法;ROM_SIN模块寄存的正弦波数据,此模块最终可用DDS模块替代,最终是滤波器模块。本规划中最重要的一个模块CASTA载波提取还在编写中,暂时还不能提交相关代码。

滤波器模块是本规划的要害,假如进步相同信噪比条件下的误码率能够进步滤波器的阶数,但会相应的进步器材完结的复杂度,也即进步FPGA器材的面积。

7.结语

现在,全数字调制解调器使得通讯设备紧凑、本钱低、功耗小,且可靠性高。高速数字通讯体系多选用Q P S K调制办法,可获得较高的信噪比,又有较高的频带功率。但专用Q P S K芯片的通用性较差,价格较贵。通用Q P S K芯片大多根据D S P芯片,运算量较大和受硬件的约束。用FPGA是完结通用Q P S K的最佳途径,一切参数均由用户设置,进步了通讯设备的灵活性和通用性。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/189827.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部