山东大学qpsk monte carlo 仿真实验报告DOCWord文档下载推荐.docx
- 文档编号:20775086
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:21
- 大小:191.37KB
山东大学qpsk monte carlo 仿真实验报告DOCWord文档下载推荐.docx
《山东大学qpsk monte carlo 仿真实验报告DOCWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《山东大学qpsk monte carlo 仿真实验报告DOCWord文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
6、比较编码信号和为编码信号在随机信道中的传输,加深对纠错编码的理解;
二、实验原理及框图
1.未加信道纠错码的QPSK调制通信系统(见图
(一))
2比特符号
图一未加信道纠错码的QPSK调制通信系统框图
2.信道纠错编码(7,4)汉明码+QPSK调制的通信系统(见图
(二))
图二信道纠错编码(7,4)汉明码+QPSK调制的通信系统框图
三、实验内容
(1)未加信道纠错编码的QPSK调制通信系统
1)最大投影点准则进行判决
a,计算噪声方差分别为0、0.1、0.5、1.0时的符号差错概率和比特差错概率;
b,画出在每种方差时,在检测器输入端1000个接收到的信号加噪声样本(星座图);
c,分别画出数据点为1000,5000,10000,100000,时的MonteCarlo仿真误比特率曲线和理论误比特率曲线,比较区别,分析数据点的数量对仿真结果的影响。
2)将检测器的判决准则改为最小距离法(星座图上符号间的距离),比较与上面结果的区别
(2)信道纠错编码(7,4)汉明码+QPSK调制的通信系统
1)比较经过信道纠错编码的QPSK调制系统与未加信道调制编码的系统的传输性能。
四、程序及其注释
1、主函数(不包括MonteCarlo仿真部分)
clear;
clc;
N=5000;
sgm2=0.1;
gray_in=source(N);
%信源,用格雷码表示
s_in=gray2symbol(gray_in);
%变为四进制符号
[c]=mapping(s_in);
%星座图映射
n=orthogonal_gaussian(N,sgm2);
%产生两路正交的高斯噪声信号
cn=awgn_out(c,n);
%经过信道
s_out_distance=minimum_distance_judge(cn);
%最小距离法判决
s_out_projection=maximum_projection_judge(cn);
%最大投影判决
gray_out=s2gray(s_out_projection);
%把四进制码译为2进制格雷码
ser_distance=SER(s_in,s_out_distance);
%最小距离法误码率
ser_projection=SER(s_in,s_out_projection);
%最大投影法误码率
s_difference=SER(s_out_projection,s_out_distance);
%两种判决方法结果不同率
ber_distance=BER(s_in,s_out_distance);
%最小距离法误比特率,由四进制码计算二进制误比特率
ber_projection=SER(gray_in,gray_out);
%最大投影法误比特率,由二进制码套用误码率的函数计算
b_difference=BER(s_out_projection,s_out_distance);
%两种方法的不同比特率
constellaion_qpsk(s_in,cn);
%星座图
2、MonteCarlo仿真主函数
N=10000;
fori=1:
106
SNR(i)=(i-1)/5-10;
%信噪比范围
r=10^(SNR(i)/10);
sgm2(i)=1/(2*r);
%通过信噪比计算出噪声的方差
gray_in=source(N);
s_in=gray2symbol(gray_in);
[c]=mapping(s_in);
n=orthogonal_gaussian(N,sgm2(i));
cn=awgn_out(c,n);
s_out_projection=maximum_projection_judge(cn);
ber_projection(i)=BER(s_in,s_out_projection);
%仿真的误码率
theory(i)=0.5*erfc(sqrt(r));
%理论误码率
end
semilogy(SNR,ber_projection,'
o'
);
%画出log的图像holdon;
semilogy(SNR,theory)gridon;
xlabel('
Eb/N0(dB)'
ylabel('
BER'
holdoff;
3、测试(7,4)汉明码性能的主函数
HN=7*N/4;
%信源的格雷码
hn=hamming_encode(gray_in);
%汉明编码
s_in=gray2symbol(hn);
%星座映射
n=orthogonal_gaussian(HN,sgm2(i));
%产生两路正交的高斯信号
gray_out_74=s2gray(s_out_distance);
gray_out1=hamming_decode(gray_out_74);
%汉明解码和纠错
gray_out2=none_hamming_decode(gray_out_74);
%同一个信号没有汉明纠错
hamming_ber(i)=SER(gray_in,gray_out1);
%计算误码率
none_hamming_ber(i)=SER(gray_in,gray_out2);
end
semilogy(SNR,hamming_ber,'
*'
%画出两种方法的误码率图像holdon;
semilogy(SNR,none_hamming_ber,'
ro'
legend('
采用纠错码的BER'
'
未采用纠错码的BER'
gridon;
4、二进制的格雷码信源子函数
functiona=source(N)%N为四进制符号长度,a为输出的二进制格雷码
a=zeros(1,2*N);
x=rand(1,N);
N
if(x(i)<
=0.25)%根据四种符号产生格雷码
a(2*i-1)=0;
a(2*i)=0;
elseif(x(i)<
0.5&
x(i)>
0.25)
a(2*i)=1;
0.75&
0.5)
a(2*i-1)=1;
else
end
5、二进制信号变为四进制符号子函数
functionan=gray2symbol(bn)%bn为格雷码,输出an为四进制0到3
N=length(bn);
an=zeros(1,N/2);
N/2
if(bn(2*i-1)==0&
bn(2*i)==0)%两位二进制码换成一个四进制符号
an(i)=0;
elseif(bn(2*i-1)==0&
bn(2*i)==1)
an(i)=1;
elseif(bn(2*i-1)==1&
an(i)=2;
an(i)=3;
6、星座映射子函数
functiona=mapping(s)%s为四进制信号,a为2*n的矩阵表示星座映射坐标
length(s)
ifs(i)==0
a(1,i)=1;
a(2,i)=0;
elseifs(i)==1
a(1,i)=0;
a(2,i)=-1;
elseifs(i)==2
a(1,i)=-1;
a(2,i)=1;
Endend
7、产生两路正交高斯噪声信号子函数
functionn=orthogonal_gaussian(N,sgm2)%N为长度,sgm2为方差
fori=1:
a=rand;
r=sqrt(sgm2)*sqrt(2*log(1/(1-a)));
b=rand;
nc(i)=r*cos(2*pi*b);
ns(i)=r*sin(2*pi*b);
n=zeros(2,N);
n(1,:
)=nc;
n(2,:
)=ns;
8、最小距离判决子函数
functions_out=minimum_distance_judge(an)%an为输入要判决的2*n矩阵,s_out为判决输出的四进制信号
N=length(an);
s_out=zeros(1,N);
d=zeros(4,N);
md=zeros(1,N);
d(1,i)=(an(1,i)-1)^2+an(2,i)^2;
%计算距离
d(2,i)=an(1,i)^2+(an(2,i)+1)^2;
d(3,i)=(an(1,i)+1)^2+an(2,i)^2;
d(4,i)=an(1,i)^2+(an(2,i)-1)^2;
md(i)=min(d(:
i)'
%取最小点判决
if(md(i)==d(1,i))s_out(i)=0;
if(md(i)==d(2,i))s_out(i)=1;
if(md(i)==d(3,i))s_out(i)=2;
if(md(i)==d(4,i))s_out(i)=3;
9、最大投影点判决子函数
functions_out=maximum_projection_judge(an)%an为需要判决的序列,s_out为判决输出四进制信号
d(1,i)=an(1,i);
d(2,i)=-1*an(2,i);
d(3,i)=-1*an(1,i);
d(4,i)=an(2,i);
md(i)=max([d(1,i),d(2,i),d(3,i),d(4,i)]);
end
10、四进制信号变为二进制子函数
functionbn=s2gray(an)%an为四进制信号,bn为译出的格雷码
bn=zeros(1,2*N);
if(an(i)==0)
bn(2*i-1)=0;
bn(2*i)=0;
elseif(an(i)==1)
bn(2*i)=1;
elseif(an(i)==2)
bn(2*i-1)=1;
11、误符号率计算子函数
(也可输入二进制计算误比特率)
functionc=SER(an,bn)%an为原符号序列,bn为判决输出的符号序列,c为误符号率
cn=(an~=bn);
cn=double(cn);
numwrong=cn*cn'
;
c=numwrong/N;
12、通过符号计算误比特率子函数
functionc=BER(an,bn)%an,bn为原符号序列和判决出的序列,c为误比特率
cn=abs(an-bn);
num=0;
if(cn(i)==1)|(cn(i)==3)
num=num+1;
elseifcn(i)==2
num=num+2;
c=num/(2*N);
13、星座图子函数
functionconstellaion_qpsk(an,bn)%an为原信号,bn为接收到的信号
figure
length(an)
if(an(i)==0)
plot(bn(1,i),bn(2,i),'
holdon;
elseif(an(i)==1)
R*'
elseif(an(i)==2)
Y*'
elseif(an(i)==3)
G*'
endendendendend
14、汉明编码子函数
functionbn=hamming_encode(an)%an为二进制格雷码,bn为74汉明码
n=N/4;
bn=zeros(1,7*n);
n
bn(7*i-6)=xor(an(4*i),xor(an(4*i-2),an(4*i-3)));
bn(7*i-5)=xor(an(4*i),xor(an(4*i-1),an(4*i-3)));
bn(7*i-4)=xor(an(4*i),xor(an(4*i-1),an(4*i-2)));
bn(7*i-3)=an(4*i-3);
bn(7*i-2)=an(4*i-2);
bn(7*i-1)=an(4*i-1);
bn(7*i)=an(4*i);
15、汉明解码和纠错子函数
functionbn=hamming_decode(an)%an为收到的74汉明码,bn为译码输出的二进制码
N=length(an)/7;
bn=zeros(1,4*N);
s1=xor(xor(an(7*i),an(7*i-1)),xor(an(7*i-2),an(7*i-4)));
s2=xor(xor(an(7*i),an(7*i-1)),xor(an(7*i-3),an(7*i-5)));
s3=xor(xor(an(7*i),an(7*i-2)),xor(an(7*i-3),an(7*i-6)));
bn(4*i-3)=an(7*i-3);
bn(4*i-2)=an(7*i-2);
bn(4*i-1)=an(7*i-1);
bn(4*i)=an(7*i);
if(s1==0&
s2==1&
s3==1)
bn(4*i-3)=1-an(7*i-3);
elseif(s1==1&
s2==0&
bn(4*i-2)=1-an(7*i-2);
s3==0)
bn(4*i-1)=1-an(7*i-1);
bn(4*i)=1-an(7*i);
endendendendendEnd
16、从汉明码中提取原二进制码不纠错子函数
为了在同一次仿真过程中比较纠错和不纠错的差别,编写了这一子函数,直接取(7,4)汉明码中的思维二进制码出来。
从而可以和纠错的进行误码率比较。
functionbn=none_hamming_decode(an)%输入an为汉明码,输出为后四位
5、仿真结果和图形
噪声方差
0.1
0.5
1.0
误率比特BER
0.0185
0.1585
0.2470
误符号率SER
0.0370
0.2920
0.4220
表1不同噪声方差时的误符号率和误码率,信号长度N=1000
噪声方差σ2
最大投影点判决
最小距离判决
表2最大投影点和最小距离法的误码率误比特率比较
图1.1σ2=0的星座图,信号长度N=1000
图1.2σ2=0.1的星座图,信号长度N=1000
图1.3σ2=0.5的星座图,信号长度N=1000
图1.4σ2=1的星座图,信号长度N=1000
图2.1数据点为1000时的MonteCarlo仿真误比特率曲线和理论曲线
图2.2数据点为5000时的MonteCarlo仿真误比特率曲线和理论曲线
图2.3数据点为10000时的MonteCarlo仿真误比特率曲线和理论曲线
图2.4数据点为100000时的MonteCarlo仿真误比特率曲线和理论曲线
图3.1不同信噪比条件下使用纠错编码和未使用的误比特率比较,信号数目N=1000时
图3.2不同信噪比条件下使用纠错编码和未使用的误比特率比较,信号数目N=10000时
6、结果分析和结论
1、最大投影点准则在不同方差下的误码率和无比特率,观察表1可见
σ2=0时没有误码,因为没有噪声。
观察图1.1可见星座点集中在四个点上,没有误码。
σ2=0.1时,有了误码,而且误比特率严格为误符号率的一半,说明每个符号都只误到了相邻符号,没有出现一个符号两位都错。
星座图如图1.2,点已经开始分散,范围也变大,但还能大概看出边界,有的点越过了边界,产生误码。
σ2=0.5和1时,误比特率和误符号率进一步增大,BER>
SER/2,说明有了一个符号错两位的现象出现,但BER-SER/2还是很小,说明这种情况较一位出错很少出现。
星座图如图1.3和1.4,点更加散乱,有的点幅值甚至到了4,完全分不清边界,还有误到对面的情况出现,支持了误码率和无比特率的处分析。
2、MonteCarlo仿真
观察图2.1,2.2,2.3,2.4可见不同噪声方差下的仿真情况,可见仿真的误比特率一直大于理论数值。
随着数据点数变大,越接近理论数据,而且在SNR大的部分打的点数比小的时候多,而且越来越稳定,波动减小。
因为点数少时,有些误比特率已经降为0,只有点数增加才可测得误比特率,而且点数越多越逼近理论上的概论。
3、两种判决方法的比较
观察表2可见两种方法的误比特率和误符号率完全一样。
这两种方法是等价的。
4、采用信道纠错码的系统传输性能
观察图3.1和图3.2
其中3.2的信号点数多,所以比较平滑。
在噪声方差较小时,采用(7,4)汉明纠错码的误比特率明显小于不采用的,SNR在8dB时误比特率为不采用时的十分之一还少。
10dB附近时,采用汉明纠错已经没有误码,而不使用时还有。
此时汉明纠错码性能好于不使用,原因可能是此时误码率很小,几乎不存在连错,于是每个错误比特都能被纠正,所以汉明纠错码性能好。
在但噪声方差很大时,如SNR小于-5dB时,采用(7,4)汉明纠错码的误比特率略高于不采用时,原因可能为信噪比小时,连续误码多,7个比特中误比特超过了1位,导致无法纠错,还产生了新的错误,所以误比特率稍大。
7、遇到的问题、解决方法和收获
1、两路正交的高斯噪声信号不知道怎么生成,上网查了查。
2、(7,4)汉明码使用时,要先把信源的二进制格雷码换成(7,4)汉明码,再变成符号进行星座映射。
一开始设计时没有考虑到汉明码这块,产生信源时直接产生了四进制符号,除了计算误比特率之外根本没有用到格雷码。
于是又加了许多子函数。
3、使用纠错码的误比特率比不使用高,以为是连错比较多,可是找到了出错点发现没有连错,最后发现是译码部分写错了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 山东大学qpsk monte carlo 仿真实验报告DOC 山东大学 qpsk 仿真 实验 报告 DOC