通信工程实验报告西南交通大学.docx

上传人:b****7 文档编号:9408051 上传时间:2023-02-04 格式:DOCX 页数:27 大小:463KB
下载 相关 举报
通信工程实验报告西南交通大学.docx_第1页
第1页 / 共27页
通信工程实验报告西南交通大学.docx_第2页
第2页 / 共27页
通信工程实验报告西南交通大学.docx_第3页
第3页 / 共27页
通信工程实验报告西南交通大学.docx_第4页
第4页 / 共27页
通信工程实验报告西南交通大学.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

通信工程实验报告西南交通大学.docx

《通信工程实验报告西南交通大学.docx》由会员分享,可在线阅读,更多相关《通信工程实验报告西南交通大学.docx(27页珍藏版)》请在冰豆网上搜索。

通信工程实验报告西南交通大学.docx

通信工程实验报告西南交通大学

 

通信工程实验报告

 

班级:

姓名:

学号:

 

实验一BDPSK调制解调器设计

一、实验目的

1.掌握BDPSK的调制和解调原理。

2.掌握倍频和分频的概念以及分频的实现方法。

3.用VerilogHDL硬件描述语言建模,实现BDPSK基带调制解调系统。

二、实验说明

由于在BPSK解调中,相干载波恢复时可能出现相位模糊,所以在实际应用中经常采用BDPSK(二进制差分相移键控)方式。

BDPSK方式不需要在解调端恢复相干参考信号,非相干接收机容易制造而且成本低,因此在无线通信系统中被广泛使用。

1.BDPSK基带调制系统结构

在BDPSK调制系统中,输入的二进制序列先进行差分编码,然后再用BPSK调制器调制。

一个基带的BDPSK调制系统如图1所示。

2.差分编码差分编码原理为:

设计一个模二加法器和一个延迟单元,将当前时钟周期的绝对码信号和上一时钟周期经过一个码元延时的相对码信号进行模二加法(异或),得到当前时钟周期的相对码,并反复进行。

延迟单元的功能可以用硬件电路中的寄存器来实现,用它作为保存上一次生成的相对码的容器,然后在下个时序到来时与当前的绝对码进行模二加得到输出。

图2差分编码原理

三、实验结果

1.调制系统中各子模块的VerilogHDL代码及注释。

差分编码:

moduleChafen(dataPN,clk1,reset_n,dataCF);

inputclk1;

inputdataPN;

inputreset_n;

outputdataCF;

regc;

always@(posedgeclk1ornegedgereset_n)

begin

if(!

reset_n)

begin

c<=1'b0;

end

else

begin

c<=c^dataPN;

end

end

assigndataCF=c;

endmodule

时钟分频器:

modulediv(

clk,

reset_n,

clk1

);

inputclk;

inputreset_n;

outputclk1;

reg[5:

0]c;

regout;

always@(posedgeclkornegedgereset_n)

begin

if(!

reset_n)

begin

out<=0;

c=6'b000000;

end

else

begin

out<=c[5];

c<=c+1;

end

end

assignclk1=out;

endmodule

伪随机序列发生器:

modulePN_Seq(

clk1,

reset_n,

dataPN

);

inputclk1;

inputreset_n;

outputdataPN;

reg[7:

1]c;

always@(posedgeclk1ornegedgereset_n)

begin

/*YourDesign*/

if(!

reset_n)

begin

c<=7'b0001111;

end

else

begin//7级M序列编码

c[1]<=c[2]^c[3]^c[4]^c[7];

c[7]<=c[6];

c[6]<=c[5];

c[5]<=c[4];

c[4]<=c[3];

c[3]<=c[2];

c[2]<=c[1];

end

end

assigndataPN=c[7];

endmodule

2.调制系统顶层模块的VerilogHDL代码及注释。

moduleBPSK(

clk,

reset_n,

clk_DA,

blank_DA_n,

sync_DA_n,

dataout

);

inputclk;

inputreset_n;

outputclk_DA;

outputblank_DA_n;

outputsync_DA_n;

output[7:

0]dataout;

wire[4:

0]address;

ControllerCONTROLLER(

.clk(clk),

.reset_n(reset_n),

.dataCF(dataCF),

.address(address),

.clk_DA(clk_DA),

.blank_DA_n(blank_DA_n),

.sync_DA_n(sync_DA_n)

);

LookUpTableLOOKUPTABLE(

.clk(clk),

.reset_n(reset_n),

.address(address),

.dataout(dataout)

);

ChafenCHAFEN(

.dataPN(dataPN),

.clk1(clk1),

.reset_n(reset_n),

.dataCF(dataCF)

);

PN_SeqPN_SEQ(

.clk1(clk1),

.reset_n(reset_n),

.dataPN(dataPN)

);

divDIV(

.clk(clk),

.reset_n(reset_n),

.clk1(clk1)

);

Endmodule

3.功能仿真和时序仿真结果的波形,至少要同时显示出伪随机序列、差分编码结果和

BDPSK调制信号。

功能仿真:

时序仿真:

 

实验二CDMA调制与解调

一、实验目的:

1、了解CDMA的原理和调制解调过程。

2、用MATLAB进行CDMA的调制解调过程的仿真。

二、实验原理:

扩频通信用伪随机编码把基带信号的频谱进行扩展,形成相当宽带的低功率谱密度的信号发射,接收端使用相关处理方式,也要把接受的宽带扩频信号恢复成基带信号。

图1为典型扩频通信的基本原理图。

图1典型扩频通信的基本原理图

三、报告要求

1.所有程序完整的源代码(.m文件)以及注释。

2.仿真结果。

对于所有的图形结果(包括波形与仿真曲线等),将图形保存成.tif

或者.emf的格式并插入word文档。

四、实验结果

1.

shiyan2.m

clearall;

closeall;

C2=1;C1=0;C0=1;%m序列初值

N=10^4;

MN=7*N;%重复MN遍的7位单极性m序列

EbNo=-20:

5;%信噪比

L(MN)=0;

M(MN)=0;

reds_sample(1:

MN)=0;

reds_judge(1:

N)=0;

err(length(EbNo))=0;

message_ds(1:

MN)=0;

ds(1:

MN)=0;

fori=1:

MN

TC0=C0;TC1=C1;TC2=C2;

C0=C1;C1=C2;

C2=xor(TC0,TC1);

L(i)=TC0;

end

fori=1:

MN

M(i)=1-2*L(i);%将单极性m序列变为双极性m序列

end

M_ds=rectpulse(M,1000);%双极性m序列的扩频序列

message=rand(1,N)>0.5;%产生二进制随机数

fori=1:

N

k=7*i-6;

message_ds(k)=message(i);k=k+1;

message_ds(k)=message(i);k=k+1;

message_ds(k)=message(i);k=k+1;

message_ds(k)=message(i);k=k+1;

message_ds(k)=message(i);k=k+1;

message_ds(k)=message(i);k=k+1;

message_ds(k)=message(i);

end

fori=1:

MN

ds(i)=xor(L(i),message_ds(i));

end

fs=2000;

ts=0:

0.00001:

MN/100-0.00001;%为了使信号看起来更光滑,作图时采样频率为100kHz

ds_b=rectpulse(ds,1000);%将冲激信号补成矩形信号?

ds_bpsk=(1-2.*ds_b).*cos(2*pi*fs*ts);

[b,a]=tf(lpf);%得到传递函数,b=Num;a=1;

fork=1:

length(EbNo)

ds_bpsk_awgn=awgn(ds_bpsk,EbNo(k),'measured');

ds_re=ds_bpsk_awgn.*cos(2*pi*fs*ts);

ds_lpf=filter(b,a,ds_re);

%解扩

reds=M_ds.*ds_lpf(1:

1000*MN);

%抽样

fori=1:

MN

j=1000*i-500;

reds_sample(i)=reds(j);

end

%判决

fori=1:

MN

if(reds_sample(i)>0.2)

reds_sample(i)=1;

elseif(reds_sample(i)<-0.2)

reds_sample(i)=-1;

elsereds_sample(i)=0;

end

end

fori=1:

N

j=7*i-6;

if(reds_sample(j)==0)

reds_sample(j)=reds_sample(j+4);

end

end

fori=1:

MN-2

if(reds_sample(i)==0)

reds_sample(i)=reds_sample(i+2);

end

end

fori=1:

N

reds_judge(i)=reds_sample(i*7-3);

if(reds_judge(i)==0)

reds_judge(i)=reds_judge(i)+1;

end

reds_judge(i)=(1-reds_judge(i))/2;

end

err(k)=length(find((reds_judge-message)~=0));%计算误码个数

end

err=err./N;

figure

(1)

plot(EbNo,err);xlabel('EbNo/dB');ylabel('误码率');title('BPSK调制的CDMA误码率')

lpf.m

functionHd=lpf

%LPFReturnsadiscrete-timefilterobject.

%MATLABCode

%GeneratedbyMATLAB(R)9.0andtheDSPSystemToolbox9.2.

%Generatedon:

26-Oct-201622:

33:

44

%FIRWindowLowpassfilterdesignedusingtheFIR1function.

%AllfrequencyvaluesareinHz.

Fs=2000;%SamplingFrequency

N=30;%Order

Fc=10;%CutoffFrequency

flag='scale';%SamplingFlag

Beta=0.5;%WindowParameter

%Createthewindowvectorforthedesignalgorithm.

win=kaiser(N+1,Beta);

%CalculatethecoefficientsusingtheFIR1function.

b=fir1(N,Fc/(Fs/2),'low',win,flag);

Hd=dfilt.dffir(b);

%[EOF]

2.仿真结果

 

MATLAB实验基于导频的信道估计仿真分析1

一、实验目的

1、了解信道估计的作用、在无线通信中的地位以及基本原理;

2、掌握LS信道估计的原理;

3、用MATLAB对基于导频的信道估计进行仿真,在瑞利平坦信道下分析其MSE性能。

二、实验原理:

如图为纯导频信道估计实验流程框图。

图1纯导频信道估计实验流程框图

二、报告要求

1.所有程序完整的源代码(.m文件)以及注释。

2.仿真结果。

对于所有的图形结果(包括波形与仿真曲线等),将图形保存成.tif

或者.emf的格式并插入word文档。

三、实验结果

1.

shiyan3.m

clearall;closeall;

NUM=10^5;

EbNo=0:

30;%信噪比

datastream(1:

NUM)=1;%全1数据

MSE(1:

length(EbNo))=0;

%h瑞利分布

hb=unifrnd(0,2*pi,1,NUM);

ha=raylrnd(1,1,NUM);

h=ha.*exp(1i.*hb);

data_r=datastream.*h;%通过瑞利信道

fork=1:

length(EbNo)

data_ra=awgn(data_r,EbNo(k),'measured');%加高斯白噪声

h_est=data_ra./datastream;

%计算MSE

fori=1:

NUM

MSE(k)=MSE(k)+(abs(h(i)-h_est(i)))^2;

end

MSE(k)=MSE(k)/NUM;

end

plot(EbNo,MSE);xlabel('EbNo/dB');ylabel('MSE');title('基于导频信道的SNR与MSE的关系曲线')

 

2.仿真结果

 

实验四基于导频的信道估计仿真分析2

一、实验目的

1、了解数据与导频同时发送时如何进行信道估计。

2、用MATLAB对基于导频的信道估计进行仿真,在瑞利平坦信道下分析其MSE性能。

二、实验原理

图为导频与数据同时发送时进行信道估计的实验流程框图。

具体内容及信道估计准则请见前一实验。

帧结构:

红色部分为导频符号,有m个导频,用以估计系统信道响应;蓝色部分为数据部分,有n个数据,通过导频处的信道响应推出数据位置的信道响应,完成均衡处理,解调数据位信号,提升系统性能。

三、报告要求

1.所有程序完整的源代码(.m文件)以及注释。

2.仿真结果。

对于所有的图形结果(包括波形与仿真曲线等),将图形保存成.tif

或者.emf的格式并插入word文档。

三、实验结果

1.

shiyan4.m

clearall;closeall;

Nbit=2*10^4;%帧数

N=2*7*Nbit;%二进制比特流个数

M=3*Nbit;%导频个数

EbNo=0:

35;%信噪比

err(length(EbNo))=0;%误码率

MSE(length(EbNo))=0;%信道估计MSE

message=rand(1,N)>0.5;%二进制比特流

pf(1:

M)=1+i;%导频信号

%生成二进制比特流并qpsk调制

qpsk_IQ=[-11];

qpsk_I=qpsk_IQ(message(1:

2:

end)+1);

qpsk_Q=qpsk_IQ(message(2:

2:

end)+1);

qpsk=(qpsk_I+1j.*qpsk_Q);

MN=M+length(qpsk);

frame(1:

MN)=0;%帧信号

%组帧

k=1;

j=1;

fori=1:

length(qpsk)

frame(j)=qpsk(i);

j=j+1;

if(mod(i,7)==0)

frame(j)=pf(k);j=j+1;k=k+1;

frame(j)=pf(k);j=j+1;k=k+1;

frame(j)=pf(k);j=j+1;k=k+1;

end

end

frame_rayl(1:

length(frame))=0;%通过瑞利信道后的帧信号

%产生瑞利分布

hb=unifrnd(0,2*pi,1,Nbit);

ha=raylrnd(1,1,Nbit);

h=ha.*exp(1i.*hb);

%帧通过瑞利信道

j=1;

fori=1:

length(h)

fork=1:

10

frame_rayl(j)=h(i)*frame(j);j=j+1;

end

end

pf_awgn(1:

M)=0;%加高斯白噪声导频信号部分

qpsk_awgn(1:

length(qpsk))=0;%加高斯白噪声qpsk信号部分

h_est(1:

Nbit)=0;%根据导频信号计算出的信道估计

qpsk_est(1:

length(qpsk))=0;%根据计算出的信道估计得到接收到的qpsk信号

%计算误码率与信道估计的MSE

forkk=1:

length(EbNo)

frame_awgn=awgn(frame_rayl,EbNo(kk),'measured');%加高斯白噪声

%分离组帧中的数据信号与导频信号

jj=1;ii=1;

forj=1:

length(frame_awgn)

if(mod(j,10)==0||mod(j,10)==8||mod(j,10)==9)

pf_awgn(jj)=frame_awgn(j);jj=jj+1;

else

qpsk_awgn(ii)=frame_awgn(j);ii=ii+1;

end

end

%根据导频信号计算信道估计

h_awgn=pf_awgn./pf;

forjjj=1:

length(h_est)

h_est(jjj)=(h_awgn(jjj*3-2)+h_awgn(jjj*3-1)+h_awgn(jjj*3))/3;

end

k=1;

%根据计算出的信道估计,计算接收到的qpsk信号

foriii=1:

length(qpsk_est)

qpsk_est(iii)=qpsk_awgn(iii)/h_est(k);

if(mod(iii,7)==0)

k=k+1;

end

end

%qpsk解调

qpsk_est_re=real(qpsk_est);

qpsk_est_im=imag(qpsk_est);

qpsk_IQD=[01];

qpsk_est_re(find(qpsk_est_re>1))=1;

qpsk_est_re(find(qpsk_est_re<-1))=-1;

qpsk_est_im(find(qpsk_est_im>1))=1;

qpsk_est_im(find(qpsk_est_im<-1))=-1;

qpsk_de=[zeros(1,N)];

qpsk_de(1:

2:

end)=qpsk_IQD(round((qpsk_est_re+1)/2)+1);

qpsk_de(2:

2:

end)=qpsk_IQD(round((qpsk_est_im+1)/2)+1);

%计算误码率

err(kk)=length(find((qpsk_de-message)~=0));

err(kk)=err(kk)./N;

%计算信道估计的MSE

forimse=1:

length(h)

MSE(kk)=MSE(kk)+(abs(h(imse)-h_est(imse)))^2;

end

MSE(kk)=MSE(kk)/length(h);

end

plot(EbNo,err);xlabel('EbNo/dB');ylabel('误码率');

figure

(2)

plot(EbNo,MSE);xlabel('EbNo/dB');ylabel('MSE');

2.仿真结果

MSE曲线

BER曲线

实验五FPGA实验HDB3编码器设计

一、实验目的

⒈深入理解HDB3编码原理。

⒉学习用VerilogHDL硬件描述语言建模较复杂时序逻辑电路。

⒊学习FPGA设计中的Testbench(测试平台)技术。

⒋掌握FPGA设计中仿真与综合的概念。

⒌学习编写仿真测试代码与可综合代码。

二、报告要求

⒈输入信号为全全0码时,以下各时序仿真结果:

(ModelSim中截图)

⑴加V后;

⑵补B后;

⑶最终得到的HDB3码。

2.改写HDB3编码器的测试文件代码,使测试文件能连续产生伪随机序列,将改写后的

测试文件代码写在实验报告中。

(可以参考教师提供的VerilogHDL教程中的第10章

10.3.8部分的内容)

3.思考:

测试文件代码和编码器模块代码都是用VerilogHDL语言编写的,这两种代码在

语法上有什么区别?

分别举一个例子进行比较。

三、实验结果

1.

data_v:

加V信号

data_b:

加B信号

dataout:

最终信号

2.

测试文件

timescale 1ns/100ps 

module HDB3_encoder_test; 

reg clk; 

reg reset_n;

reg datain; 

wire [2:

0] dataout; 

HDB3_encoder DESIGN ( 

.clk (clk), 

.reset_n (reset_n), 

.datain (datain),

.dataout (dataout) 

); 

initial 

begin 

clk=1'b0;

end 

always 

begin 

#5 clk=~clk;

end 

initial 

begin 

#0 reset_n=1'b0; 

#20 reset_n=1'b1; 

end 

datain=$dist_uniform(12,start,end);

endmodule

3.

不允许在可综合的设计代码中使用`Define来定义参数,应该使用参数Parameter来定义。

例如`Define只用于编写

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

当前位置:首页 > 自然科学 > 化学

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

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