重庆邮电大学本科毕业设计(论文)
else
end
begin
D16QAM_Output=cacheout[3]; cnt=0; end
begin dcki=0; if(dckm==0) else
begin cnt=cnt+1; if(cnt==1)
begin
cachein=D16QAM_Input; case(cachein)
16'b0110000001100000: begin cacheout[3:0]=4'b1010;end 16'b0110000000100000: begin cacheout[3:0]=4'b1011;end 16'b0110000011100000: begin cacheout[3:0]=4'b1001;end 16'b0110000010100000: begin cacheout[3:0]=4'b1000;end 16'b0010000001100000: begin cacheout[3:0]=4'b1110;end 16'b0010000000100000: begin cacheout[3:0]=4'b1111;end
begin
D16QAM_Output=0;
cachein[15:0]=16'b0000000000000000; cacheout[3:0]=4'b0000; D16QAM_Opten=0; end
- 31 -
重庆邮电大学本科毕业设计(论文)
16'b0010000011100000: begin cacheout[3:0]=4'b1101;end 16'b0010000010100000: begin cacheout[3:0]=4'b1100;end 16'b1110000001100000: begin cacheout[3:0]=4'b0110;end 16'b1110000000100000: begin cacheout[3:0]=4'b0111;end 16'b1110000011100000: begin cacheout[3:0]=4'b0101;end 16'b1110000010100000: begin cacheout[3:0]=4'b0100;end 16'b1010000001100000: begin cacheout[3:0]=4'b0010;end 16'b1010000000100000: begin cacheout[3:0]=4'b0011;end 16'b1010000011100000: begin cacheout[3:0]=4'b0001;end 16'b1010000010100000: begin cacheout[3:0]=4'b0000;end default
begin cacheout[3:0]=4'b0000;end endcase
D16QAM_Output=cacheout[0]; end
else if(cnt==2)
begin
D16QAM_Output=cacheout[1]; end
else if(cnt==3) else
begin
D16QAM_Output=cacheout[2]; end
- 32 -
重庆邮电大学本科毕业设计(论文)
end
end
dckm=dckm-1; end
endmodule
第三节 DDS载波恢复模块设计
载波恢复又称载波同步(carrier restoration),即在接收设备中产生一个和接收信号的载波同频同相的本地振荡(local oscillation),供给解调器作相干解调用。当接收信号中包含离散的载频分量时,在接收端需要从信号中分离出信号载波作为本地相干载波;这样分离出的本地相干载波频率必然与接收信号载波频率相同,但为了使相位也相同,可能需要对分离出的载波相位作适当的调整。 QAM信号可表示为:
s(t)?A(t)c?os(?t??)Bt(?)si?nt? ( (4.1) 用两个正交载波cc(t)?cos(?t??)和cs(t)?sin(?t??)来解调,s(t)和cc(t)相乘再经过低通滤波,得到同相分量:
yI(t)?1/2At()?co?s?(? s i (4.2) )B1/t2?(?)?同样的,s(t)和cs(t)相乘再经过低通滤波,得到正交分量:
yQ(t)?1/2Bt()?co?s?(? s i (4.3) )A1/t2?(?)?由表达式(4-2)和表达式(4-3)可以看出,在QAM的信号解调过程中,相位误差带来的影响十分严重,会导致正交分量和同相分量之间的相互干扰。因此,在这些接收设备中需要有载波同步电路,以提供相干解调所需要的相干载波;相干载波必须与接收信号的载波严格地同频同相。
载波恢复模块的设计有两种选择,一种是直接提取法,即发送端不专门向接收端传输载波信息,接收端直接从收到的已调信号中提取载波信息。直接提取法适用于抑制载波的双边带调幅系统、残留边带调幅系统和二相多相调相系统。另一种是插入导频法,即发送端在发送信息的同时还发送载波或与其有关的导频信号。
由于直接提取法的实现比较复杂,导频插入法由于工作稳定性好,不存在相位误差问题,本文采用的是导频插入法实现的载波恢复。载波由发射端的DDS振荡直接提供。
- 33 -
重庆邮电大学本科毕业设计(论文)
直接数字式频率合成器DDS(Direct Digital Synthesizer)技术是一项关键的数字化技术。一般来说,DDS的设计主要由相位累加器、频率控制寄存器和正弦计算器三个主要部分[8]。相位累加器根据频率控制码在每个时钟周期内进行相位相加,得到一个相位值;频率控制寄存器采用串行或并行的方式装载并寄存用户输入的频率控制码;而正弦计算器则对相位累加器产生的相位值进行计算得到二进制的正弦波幅度值(一般通过查表的方法得到)。DDS输出的是二进制的正弦波,因此输出还要经过D/A转换器才能转换成一个可用的模拟信号。本文没有牵涉到D/A转换的控制模块,因此输出波形只能通过仿真波形查看。
K为频率控制字,因为f0?fcK/2N,所以可以根据K的值来调节频率。K增
大输出频率增大,只要N增大,输出频率减小。相位累加器由加法器和寄存器组成,当来了一个时钟脉冲,那么加法器就可以把K和输出的累加相位数据相加,再送到数据的输入端。这里相当于一个周期性动作,只要相位加满,就会产生一次溢出。P为相位控制字,当相位控制字改变时,这样就能使最后输出的信号产生相移了。W为波形控制字,波形存储器中的波形是分块存储的,当改变W时,这样波形存储器的输入为改变相位后的地址和波形控制字,这样输出的信号就改变了。fc为参考信号频率,此处以FPGA开发板50MHz系统频率为参考,N为相位累加器的位宽,D为ROM数据位及D/A转换器的位宽,波形存储ROM中有D位数据位,就会有相应的样值的幅值在相应的ROM中,这样只要根据D,就可以输出相应的相位的的正弦信号的幅值了。相位累加器在fc的控制下以K作累加,输出N位二进制码和相位控制字P、波形控制字W相加后作为波形存储ROM的地址,波形存储ROM输出D位的幅度码经过D/A转换(把合成的正弦波数字量转换成模拟量)再经过滤波形成阶梯波,这个波形的形状跟ROM中存放的幅度码有关。所以可以根据这点产生任意的波形。
DDS模块源代码
// 名称:mif文件制作(C语言)
// 功能描述:产生256个正弦波形8位数据值。
#include \
int main(int argc,char* argv[]) { int i; double s; for(i=0;i<256;i++) {
- 34 -
重庆邮电大学本科毕业设计(论文)
s=sin(atan(1)*8*i/256);
printf(\ } return 0; }
// 编译环境:DEV C++软件
// 将sin改成cos就能输出余弦波形ROM值
// 模块名称:DDS(DDS主程序) // 功能描述:输出两路正交波形 module dds(data,we,clk,ce,reset,sine,cose); input[15:0] data; input we; input clk; input ce; input reset; output[7:0] sine; output[7:0] cose; reg[15:0] ADD_A; reg[15:0] ADD_B; reg[7:0] cose_DR; reg[7:0] sine_DR; wire[15:0] data; wire[7:0] ROM_A; wire[7:0] cose_D; wire[7:0] sine_D; assign cose=cose_DR; assign sine=sine_DR;
assign ROM_A=ADD_B[15:8];
always@(posedge clk or negedge reset) begin if(~reset)
- 35 -
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库基于FPGA的16QAM调制解调电路设计(8)在线全文阅读。
相关推荐: