文档库 最新最全的文档下载
当前位置:文档库 › BPSK调制的MATLAB仿真毕业论文_实验报告

BPSK调制的MATLAB仿真毕业论文_实验报告

北京邮电大学

移动通信课程设计

实验报告

目录

一、背景 (4)

二、基本要求 (4)

三、设计概述 (4)

四、Matlab设计流程图 (5)

五、Matlab程序及仿真结果图 (6)

1、生成m序列及m序列性质 (6)

2、生成50位随机待发送二进制比特序列,并进行扩频编码 (7)

3、对扩频前后信号进行BPSK调制,观察其时域波形 (9)

4、计算并观察扩频前后BPSK调制信号的频谱 (10)

5、仿真经awgn信道传输后,扩频前后信号时域及频域的变化 (11)

6、对比经信道前后两种信号的频谱变化 (12)

7、接收机与本地恢复载波相乘,观察仿真时域波形 (14)

8、与恢复载波相乘后,观察其频谱变化 (15)

9、仿真观察信号经凯萨尔窗低通滤波后的频谱 (16)

10、观察经过低通滤波器后无扩频与扩频系统的时域波形 (17)

11、对扩频系统进行解扩,观察其时域频域 (18)

12、比较扩频系统解扩前后信号带宽 (19)

13、比较解扩前后信号功率谱密度 (20)

14、对解扩信号进行采样、判决 (21)

15、在信道中加入2040~2050Hz窄带强干扰并乘以恢复载波 (24)

16、对加窄带干扰的信号进行低通滤波并解扩 (25)

17、比较解扩后信号与窄带强干扰的功率谱 (27)

六、误码率simulink仿真 (28)

1、直接扩频系统信道模型 (28)

2、加窄带干扰的直扩系统建模 (29)

3、用示波器观察发送码字及解扩后码字 (30)

4、直接扩频系统与无扩频系统的误码率比较 (31)

5、不同扩频序列长度下的误码率比较 (32)

6、扩频序列长度N=7时,不同强度窄带干扰下的误码率比较 (33)

七、利用Walsh码实现码分多址技术 (34)

1、产生改善的walsh码 (35)

2、产生两路不同的信息序列 (36)

3、用两个沃尔什码分别调制两路信号 (38)

4、两路信号相加,并进行BPSK调制 (39)

5、观察调制信号频谱,并经awgn信道加高斯白噪和窄带强干扰 (40)

6、接收机信号乘以恢复载波,观察时域和频域 (42)

7、信号经凯萨尔窗低通滤波器 (43)

8、对滤波后信号分别用m1和m2进行解扩 (44)

9、对两路信号分别采样,判决 (45)

八、产生随机序列Gold码和正交Gold码 (47)

1、产生Gold码并仿真其自相关函数 (48)

2、产生正交Gold码并仿真其互相关函数 (50)

九、实验心得体会 (51)

直接序列扩频系统仿真

一、背景

直接序列扩频通信系统(DSSS)是目前应用最为广泛的系统。在发送端,直扩系统将发送序列用伪随机序列扩展到一个很宽的频带上去,在接受端又用相同的扩频序列进行解扩,回复出原有信息。由于干扰信息与伪随机序列不相关,扩频后能够使窄带干扰得到有效的抑制,提高输出信噪比。系统框图如下图所示:

二、基本要求:

1.通过matlab建模,对直扩系统进行仿真,数据调制方式可以自由选择,可以

使用基带信号,但最好能使用频带信号,信道为高斯白噪信道。要仿真出扩频前的信号的频偏,扩频后的信号频谱,过信道之后的频谱以及解扩之后的频谱。

2.研究并仿真产生m序列,写出生成m序列的算法。

3.验证直扩系统对窄带干扰的抑制能力,在信道中加入一个窄带强干扰,仿真

出加了干扰后的频谱图和解扩后的频谱图,给出误码率等仿真图。

4.在以上基础上仿真实现码分多址技术,使用Walsh码进行复用,实现多个信

号同时传输。(选做)

可选项:

1.在信道中加入多径,使用rake接收来抗多径效应。

2.产生除m序列之外的其他随机序列,如Gold码,正交Gold码等等。

3.对比无扩频的系统的误码率。

三、设计概述

本次课设完成基本要求,并选作了可选项码分多址,Gold码及误码率对比。通过matlab建模仿真了直扩系统BPSK调制的各点频偏及时域信号,并仿真了窄带强干扰对直扩系统的影响以及利用改善的WALSH码实现码分多址技术。另外,通过matlab的simulink工具盒bertool工具仿真对比了直扩系统和无扩频系统的误码率。

四、matlab设计流程图

基本扩频系统仿真流程图

五、matlab程序及仿真结果图

1、生成m序列及m序列性质

实验产生7位m序列,频率100Hz,模拟线性反馈移位寄存器序列,原理图如下:

clear all;

clc;

X1=0;X2=0;X3=1;

m=350; %重复50遍的7位单极性m序列

for i=1:m

Y3=X3; Y2=X2; Y1=X1;

X3=Y2; X2=Y1;

X1=xor(Y3,Y1);

L(i)=Y1;

end

for i=1:m

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

end

k=1:1:m;

figure(1)

subplot(3,1,1) %做m序列图

stem(k-1,M);

xlabel('k');

ylabel('M序列');

title('移位寄存器产生的双极性7位M序列') ;

subplot(3,1,2)

ym=fft(M,4096);

magm=abs(ym); %求双极性m序列频谱

plot(fm,magm(1:2048)*24096);

title('双极性7位M序列的频谱')

[a,b]=xcorr(M,'unbiased');

subplot(3,1,3) %求双极性m序列自相关函数

plot(b,a);

title('双极性7位M序列的自相关函数');

由上图可以看出,7位m序列为1,-1,-1,-1,1,-1,1。另外,自相关函数的图形比较尖锐,最大值为1,最小值为-17,符合理论结果。

2、生成50位随机待发送二进制比特序列,并进行扩频编码

生成的信息码频率为1007Hz,利用m序列编码后,频率变为100Hz。

N=50;a=0;

x_rand=rand(1,N); %产生50个0与1之间随机数

for i=1:N

if x_rand(i)>=0.5 %大于等于0.5的取1,小于0.5的取0

x(i)=1;a=a+1;

else x(i)=0;

end

end

t=0:N-1;

figure(2) %做信息码图

subplot(2,1,1)

stem(t,x);

title('扩频前待发送二进制信息序列');

tt=0:349;

subplot(2,1,2)

l=1:7*N;

y(l)=0;

for i=1:N

k=7*i-6;

y(k)=x(i);

k=k+1;y(k)=x(i);k=k+1;y(k)=x(i);k=k+1;y(k)=x(i);k=k+1;y(k)=x(i);k=k+1;y(k)=x(i); k=k+1;y(k)=x(i);

end

s(l)=0;

for i=1:350 %扩频后,码率变为1007*7=100Hz

s(i)=xor(L(i),y(i));

end

tt=0:7*N-1;

stem(tt,s);

title('扩频后的待发送序列码');

3、对扩频前后信号进行BPSK调制,观察其时域波形

BPSK调制采用2kHz信号cos(2*2000*t)作为载波

figure(3)

subplot(2,1,2)

fs=2000;

ts=0:0.00001:3.5-0.00001;%为了使信号看起来更光滑,作图时采样频率为100kHz % ps=cos(2*pi*fs*ts);

s_b=rectpulse(s,1000); %将冲激信号补成矩形信号

s_bpsk=(1-2.*s_b).*cos(2*pi*fs*ts);%扩频后信号BPSK调制时域波形,(1-2.*s_b)

是1,-1序列

plot(ts,s_bpsk);

xlabel('s');

axis([0.055,0.085,-1.2,1.2])

title('扩频后bpsk信号时域波形');

subplot(2,1,1)

s_bb=rectpulse(x,7000);

s_bpskb=(1-2.*s_bb).*cos(2*pi*fs*ts);%无扩频信号BPSK调制时域波形

plot(ts,s_bpskb);

xlabel('s');

axis([0.055,0.085,-1.2,1.2]);

title('扩频前bpsk信号时域波形')

可以看出,1007Hz的无扩频信号每0.07s时由于序列极性变换产生相位变换,100Hz的扩频后调制信号每0.01s由于序列极性变换产生相位变换。

4、计算并观察扩频前后BPSK调制信号的频谱

对信号采用400000点fft计算,得到频谱

figure(4)

N=400000;

ybb=fft(s_bpskb,N); %无扩频信号BPSK调制频谱

magb=abs(ybb);

fbb=(1:N2)*100000N;

subplot(2,1,1)

plot(fbb,magb(1:N2)*2N);

title('扩频前调制信号频谱');

xlabel('Hz');

subplot(2,1,2)

yb=fft(s_bpsk,N); %扩频信号BPSK调制频谱

mag=abs(yb);

fb=(1:N2)*100000N;

plot(fb,mag(1:N2)*2N);

title('扩频后调制信号频谱');

xlabel('Hz');

如图,扩频前信号主瓣宽度约为2*1007=28Hz,扩频后,信号频谱展宽,主瓣1900~2100Hz约为200Hz,为无扩频信号频谱宽度的N=7倍,符合理论推算。

5、仿真经awgn信道传输后,扩频前后信号时域及频域的变化

awgn信道模拟了真实的信道,为传输信号增加了高斯白噪声。在本次仿真中,设定信道信噪比为3dB,即信噪比约为2。

figure(5)

subplot(2,2,1)

s_bpskba=awgn(s_bpskb,3,'measured');%经过信道加高斯白噪,信噪比为3dbw plot(ts,s_bpskb,ts,s_bpskba);

axis([0,0.005,-1.2,1.2]);

xlabel('t');

title('经过信道加噪后的信号与原信号时域波形对比');

subplot(2,2,3)

s_bpska=awgn(s_bpsk,3,'measured');

plot(ts,s_bpsk,ts,s_bpska);

title('扩频后经加噪过信道后的信号与原信号时域波形对比');

xlabel('t');

subplot(2,2,2)

ybba=fft(s_bpskba,N); %无扩频调制信号经信道后频谱分析

magba=abs(ybba);

plot(fbb,magba(1:N2)*2N);

title('扩频前经信道调制信号频谱');

xlabel('Hz');

subplot(2,2,4)

yba=fft(s_bpska,N); %扩频调制信号经信道后频谱分析

maga=abs(yba);

fb=(1:N2)*100000N;

plot(fb,maga(1:N2)*2N);

xlabel('Hz');

title('扩频后经信道调制信号频谱');

可以看出,蓝色为光滑余弦调制信号,绿色为加噪声后时域波形,出现较大锯齿。至于频谱变化,这张图并不明显,于是我在下一张图继续比较了加入高斯噪声后的频谱变化。

6、对比经信道前后两种信号的频谱变化

figure(6)

title('对比经信道前后的信号频谱');

subplot(2,2,1)

plot(fbb,magb(1:N2)*2N);

title('扩频前调制信号频谱');

xlabel('Hz');

subplot(2,2,2)

plot(fbb,magba(1:N2)*2N);

title('扩频前经信道调制信号频谱');

xlabel('Hz');

subplot(2,2,3)

plot(fb,mag(1:N2)*2N);

title('扩频后调制信号频谱');

xlabel('Hz');

subplot(2,2,4)

plot(fb,maga(1:N2)*2N);

title('扩频后经信道调制信号频谱');

xlabel('Hz');

由上图可以清楚地对比经高斯白噪声信道前后的频谱对比。虽然整体的幅度趋势不变,但是能看出,经过信道加噪后,在所有的频率点上都产生了一定的振幅,符合高斯白噪声的原理。此处的信噪比为3dB。另外可以看出,BPSK调制将信号频谱搬移到了以2000Hz为中心频率的频段上。

下面,我将分别仿真解调解扩后译码输出及加入窄带强干扰后解调解扩译码

输出的时域和频谱。

(1)不加窄带强干扰

7、接收机与本地恢复载波相乘,观察仿真时域波形

figure(7)

subplot(2,1,1)

reb=s_bpskba.*cos(2*pi*fs*ts); %无扩频系统接收信号乘以本地恢复载波信号plot(ts,reb);

axis([0.055,0.085,-1.5,1.5]);

xlabel('t');

title('扩频前接收信号乘以恢复载波');

subplot(2,1,2)

re=s_bpska.*cos(2*pi*fs*ts); %扩频系统接收信号乘以本地恢复载波信号

plot(ts,re);

axis([0.055,0.085,-1.5,1.5]);

xlabel('t');

title('扩频后接收信号乘以恢复载波');

可以看出,接收信号乘以恢复载波后,已经能大致恢复出信号的变化。同时,无扩频系统符号速率仍然是1007Hz即0.07s出现符号变化,扩频系统100Hz即0.01s出现符号变化。

8、与恢复载波相乘后,观察其频谱变化

figure(8)

subplot(2,1,1)

yreb=fft(reb,N);

magreb=abs(yreb);

freb=(1:N2)*100000N;

plot(freb,magreb(1:N2)*2N);

title('扩频前乘以恢复载波后信号频谱');

subplot(2,1,2)

yre=fft(re,N);

magre=abs(yre);

plot(freb,magre(1:N2)*2N);

title('扩频后乘以恢复载波后信号频谱');

可以看出,信号乘以频率为2kHz的恢复载波后,在基带和4kHz处存在频谱分量,则下一步需要对信号进行低通滤波。

9、仿真观察信号经凯萨尔窗低通滤波后的频谱

figure(9)

subplot(2,1,1)

fp=100;

fc=200;

as=100;ap=1; %衰减100dB

fsw=22000;

wp=2*fpfsw;

wc=2*fcfsw;

Nw=ceil((as-7.95)(14.36*(wc-wp)2))+1; %求凯萨尔窗低通滤波器阶数

beta=0.1102*(as-8.7);

window=kaiser(Nw+1,beta);

b=fir1(Nw,wc,window);%返回截止频率为wc的Nw阶的低通滤波器系数向量plot(bs)

magrebl=bs.*magreb; %频谱与低通滤波器相乘

plot(freb,magrebl(1:N2)*2N);

title('扩频前:信号经过凯萨尔窗函数低通滤波');

xlabel('Hz');

subplot(2,1,2)

magrel=bs.*magre;

plot(freb,magrel(1:N2)*2N);

title('扩频后:信号经过凯萨尔窗函数低通滤波');

xlabel('Hz');

10、观察经过低通滤波器后无扩频与扩频系统的时域波形

figure(10)

subplot(2,1,1)

tm=(1:N)N*4;

plot(tm,yrebl);

xlabel('t');

title('扩频前经过凯萨尔窗函数滤波后时域波形');

subplot(2,1,2)

plot(tm,yrel);

xlabel('t');

title('扩频后经过凯萨尔窗函数滤波后时域波形');

如图,经过低通滤波器后,高频分量基本消失,剩下的信号已经能够进行采样判决,时域波形与原信息基本吻合。

11、对扩频系统进行解扩,观察其时域频域

figure(11)

subplot(2,1,1)

jj=rectpulse(M,1000); %扩频信号乘以解扩序列

yrej=jj.*yrel(1:350000);

plot(ts(1:350000),yrej);

xlabel('t');

axis([0,4,-0.5,0.5]);

title('解扩后信号波形');

subplot(2,1,2)

yj=fft(yrej,N);

magj=abs(yj);

plot(freb,magj(1:N2)*2N);

title('解扩后信号频谱');

xlabel('Hz');

由于扩频信号与m序列具有良好的相关性,故乘以m序列以后,能基本还原出原信号波形。同时可以看出,频谱已经由扩展带宽再次缩短,还原出原信号频谱。

figure(12)

title('解扩前后信号频偏对比');

subplot(2,1,1)

plot(freb,magrel(1:N2)*2N);

title('解扩前信号频偏');

subplot(2,1,2)

plot(freb,magj(1:N2)*2N);

title('解扩后信号频偏');

可以清楚看出,解扩前信号主瓣约为100Hz,解扩后恢复为1007Hz,与发送信息吻合。

figure(13)

subplot(2,1,1)

yjb=fft(yrel,N);

prelb=yjb.*conj(yjb)N;

plot(freb,prelb(1:N2)*2N);

title('解扩前信号功率谱');xlabel('Hz');

subplot(2,1,2)

yj=fft(yrej,N);

prel=yj.*conj(yj)N;

plot(freb,prel(1:N2)*2N);

title('解扩后信号功率谱');

xlabel('Hz');

如图,解扩后信号的频谱被压缩,功率幅度增加,符合理论分析结果。

14、对解扩信号进行采样、判决figure(14)

subplot(2,1,1)

for i=1:1:350

ss(i)=yrej(ij);

end

stem(ss);

title('解扩信号采样');

subplot(2,1,2)

for i=1:1:350 %判决信号算法if ss(i)>0.2

ss(i)=1;

elseif ss(i)<-0.2

ss(i)=-1;

else ss(i)=0;

end

end

for i=1:1:50

ij=7*i-6;

if ss(ij)==0

ss(ij)=ss(ij+4);

end

end

for i=1:1:348

if ss(i)==0

ss(i)=ss(i+2);

end

end

for i=1:1:50

S(i)=ss(i*7-3);

if S(i)==0

S(i)=S(i)+1;

end

S(i)=(1-S(i))2;

end

stem(S);

title('判决后的最终信号');

相关文档
相关文档 最新文档