基于matlab的QPSK与BPSK信号性能比较仿真Word文档格式.docx
《基于matlab的QPSK与BPSK信号性能比较仿真Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于matlab的QPSK与BPSK信号性能比较仿真Word文档格式.docx(26页珍藏版)》请在冰点文库上搜索。
![基于matlab的QPSK与BPSK信号性能比较仿真Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/8/b945d7e3-3328-4f6a-bd2e-00a8bf0b78a8/b945d7e3-3328-4f6a-bd2e-00a8bf0b78a81.gif)
a
b
A方式
B方式
1
表中
-一组间隔均匀的受调制相位
2.3QPSK解调原理及误码率分析
2.3.1QPSK解调方法
由于QPSK信号可以看作两个正交2PSK信号的叠加,解调框图如图2.6,用相干解调方法,即用两路正交的相干载波,可以很容易的分离出这两路正交的2PSK信号。
解调后的两路基带信号码元a和b,经过并串变换后,成为串行数据输出。
图2.4A方式信号星座图图2.5B方式信号星座图
2.3.2QPSK系统误码率
在QPSK体制中,由其矢量图(图2.7)可以看出,因噪声的影响使接收端解调时发生错误判决,是由于信号矢量的相位发生偏离造成的。
例如,设发送矢量的相位为
,它代表基带信号码元“11”,若因噪声的影响使接收矢量的相位变成
,则将误判为“01”。
当各个发送矢量以等概率出现时,合理的判决门限应该设在和相邻矢量等距离的位置。
在图中对于矢量“11”来说,判决门限应该设在
和
。
当发送“11”时,接收信号矢量的相位若超出这一范围(图
图2.6QPSK信号解调原理框图图2.7QPSK噪声容限
中阴影区),则将发生错判。
设
为接收矢量(包括信号和噪声)相位的概率密度,则发生错误的概率为:
省略计算
和Pe的繁琐过程,直接给出计算结果:
上式计算出的是QPSK信号的误码率。
若考虑其误比特率,正交的两路相干解调方法和2PSK中采用的解调方法一样。
所以其误比特率的计算公式也和2PSK的误码率公式一样。
2.4QPSK信号在AWGN信道下仿真
仿真代码见附录代码2。
运行结果如图2.8:
图2.8AWGN环境下QPSK系统的仿真和理论结果
由运行结果可以看出,仿真值与理论值基本吻合,误码率值随信噪比增大而下降。
第三章BPSK通信系统原理与仿真
3.1BPSK信号的调制原理
图3.1模拟调制方法
图3.2键控调制方法
BSPK信号通常有2种调制方式,分别如图3.1、3.2所示。
在2PSK中,通常用初始相位0和p分别表示二进制“1”和“0”。
因此,2PSK信号的时域表达式为
式中,
表示第n个符号的绝对相位:
因此,上式可以改写为
3.2BPSK解调原理及误码率分析
BPSK信号的解调器原理方框图3.3和波形图3.4,这里给出的解调框图采用相干解调的接收方法。
图3.3BPSK信号相干解调框图
波形图中,假设相干载波的基准相位与2PSK信号的调制载波的基准相位一致(通常默认为0相位)。
但是,由于在2PSK信号的载波恢复过程中存在着的相位模糊,即恢复的本地载波与所需的相干载波可能同相,也可能反相,这种相位关系的不确定性将会造成解调出的数字基带信号与发送的数字基带信号正好相反,即“1”变为“0”,“0”变为“1”,判决器输出数字信
图3.4相干解调波形示意图
号全部出错。
这种现象称为2PSK方式的“倒π”现象或“反相工作”。
这也是2PSK方式在实际中很少采用的主要原因。
另外,在随机信号码元序列中,信号波形有可能出现长时间连续的正弦波形,致使在接收端无法辨认信号码元的起止时刻。
第四章QPSK与BPSK性能比较
4.1QPSK与BPSK在多信道下比较仿真
QPSK仿真程序见代码3。
BPSK仿真程序见代码4。
下面对QPSK与BPSK在多信道下的BER-SNR曲线进行横向及纵向的比较,如表4-1所示。
4.1.1纵向比较分析
图中依次给出LOS信道、莱斯平坦衰落信道、莱斯频率选择性衰落、瑞利平坦衰落信道、瑞利频率选择性衰落。
比较频率选择性衰落和其相应的平坦衰落,可发现频率选择性衰落比相应的平坦衰落的性能差。
比较莱斯信道和瑞利信道,可发现不存在视距分量的瑞利信道比存在视距分量的任何莱斯信道的性能差。
表4-1QPSK与BPSK在多信道下性能比较
信道
QPSK
BPSK
LOS
莱斯平坦衰落
莱斯频率选择性衰落
瑞利平坦衰落
瑞利频率选择性衰落
4.1.2横向比较分析
相同信道下,BPSK调制的系统误码率小于QPSK调制。
本次仿真过程中,莱斯平坦衰落信道下两者误码率差别显著。
4.2仿真结果分析
4.2.1误码率分析
由前面介绍的误码率内容可以看出,QPSK判决门限为
,BPSK的判决门限为
因此相同系统情况下的误码率BPSK优于QPSK。
4.2.2频带利用率比较
在传码率相同的情况下,四进制数字调制系统的信息速率是二进制系统的2倍。
频带利用率公式
在相同信号速率的情况下,QPSK和BPSK系统的带宽是相同的,但是由于QPSK每个信号都是四进制的,QPSK每个信号包含2bit信息,所以比特率就是BPSK的两倍,因而其频带利用率即为BPSK的两倍。
BPSK系统理论的频带利用率最大为1,但是在实际的实现中不能达到1,而在QPSK系统中,频带利用率可以超过1。
附录
代码1
functionqpskconstellationA(M)
M=4;
x=[0:
M-1];
scatterplot(pskmod(x,M));
%A方式QPSK信号
gridon;
return
functionqpskconstellationB(M)
scatterplot(pskmod(x,M,pi/4));
%B方式QPSK信号
代码2
function[x,bits]=random_binary(nbits,nsamples)
x=zeros(1,nbits*nsamples);
bits=round(rand(1,nbits));
form=1:
nbits
forn=1:
nsamples
index=(m-1)*nsamples+n;
x(1,index)=(-1)^bits(m);
end
end
function[c,lags]=vxcorr(a,b)
%计算ab的互相关系数,返回C是列向量,长度为ab的长度和减1
a=a(:
);
b=b(:
M=length(a);
maxlag=M-1;
lags=[-maxlag:
maxlag]'
;
A=fft(a,2^nextpow2(2*M-1));
%快速傅立叶变换
B=fft(b,2^nextpow2(2*M-1));
c=ifft(A.*conj(B));
%快速傅立叶反变换
c=[c(end-maxlag+1:
end,1);
c(1:
maxlag+1,1)];
[nrnc]=size(a);
if(nr>
nc)
c=c'
lags=lags.'
functionBER_MC=MCQPSKrun(N,Eb,N0,ChanAtt,TimingBias,TimingJitter,PhaseBias,PhaseJitter)
fs=1e+6;
%采样速率
SymRate=1e+5;
%信号速率
Ts=1/fs;
%采样周期
TSym=1/SymRate;
%信号周期
SymToSend=N;
%发送信号数
ChanBW=4.99e+5;
%带宽
MeanCarrierPhaseError=PhaseBias;
%载波相位均值
StdCarrierPhaseError=PhaseJitter;
%相位误差标准差
MeanSymbolSyncError=TimingBias;
%符号同步误差均值
StdSymbolSyncError=TimingJitter;
%符号同步误差标准差
ChanGain=10^(-ChanAtt/20);
%信道增益
TxBitClock=Ts/2;
%发送机时钟
RxBitClock=Ts/2;
%接收机时钟
%接收机输入端噪声标准差和信号幅度
RxNoiseStd=sqrt((10^((N0-30)/10))*(fs/2));
TxSigAmp=sqrt(10^((Eb-30)/10)*SymRate);
%分配缓存
SampPerSym=fs/SymRate;
probe1=zeros((SymToSend+1)*SampPerSym,1);
probe1counter=1;
probe2=zeros((SymToSend+1)*SampPerSym,1);
probe2counter=1;
%计已传输信号的个数
TxSymSent=1;
RxSymDemod=0;
%发送和接收数据缓冲区
[unused,SourceBitsI]=random_binary(SymToSend,1);
[unused,SourceBitsQ]=random_binary(SymToSend,1);
%差分编码
TxBitsI=SourceBitsI*0;
TxBitsQ=SourceBitsQ*0;
fork=2:
length(TxBitsI)
TxBitsI(k)=or(and(not(xor(SourceBitsI(k),SourceBitsQ(k))),xor(SourceBitsI(k),TxBitsI(k-1))),and(xor(SourceBitsI(k),SourceBitsQ(k)),xor(SourceBitsQ(k),TxBitsQ(k-1))));
TxBitsQ(k)=or(and(not(xor(SourceBitsI(k),SourceBitsQ(k))),xor(SourceBitsQ(k),TxBitsQ(k-1))),and(xor(SourceBitsI(k),SourceBitsQ(k)),xor(SourceBitsI(k),TxBitsI(k-1))));
%产生复信号
TxBits=((TxBitsI*2)-1)+(sqrt(-1)*((TxBitsQ*2)-1));
RxIntegrator=0;
%初始化接收机积分器
TxBitClock=2*TSym;
%初始化发送机
%设计信道滤波器,产生滤波器参数序列
[b,a]=butter(2,ChanBW/(fs/2));
b=[1];
a=[1];
[junk,FilterState]=filter(b,a,0);
%开始仿真循环
whileTxSymSent<
SymToSend
TxBitClock=TxBitClock+Ts;
ifTxBitClock>
TSym
TxSymSent=TxSymSent+1;
TxBitClock=mod(TxBitClock,TSym);
TxOutput=TxBits(TxSymSent)*TxSigAmp;
%信号经过信道滤波器
[Rx,FilterState]=filter(b,a,TxOutput,FilterState);
%加高斯白噪声
Rx=(ChanGain*Rx)+(RxNoiseStd*(randn(1,1)+sqrt(-1)*randn(1,1)));
%基于接收机载波同步误差的相位旋转
PhaseRotation=exp(sqrt(-1)*2*pi*(MeanCarrierPhaseError+(randn(1,1)*StdCarrierPhaseError))/360);
Rx=Rx*PhaseRotation;
probe1(probe1counter)=Rx;
probe1counter=probe1counter+1;
%更新接收机积分清除器
RxIntegrator=RxIntegrator+Rx;
probe2(probe2counter)=RxIntegrator;
probe2counter=probe2counter+1;
%更新接收机时钟,判断是不是适合采样
RxBitClock=RxBitClock+Ts;
RxTSym=TSym*(1+MeanSymbolSyncError+(StdSymbolSyncError*randn(1,1)));
ifRxBitClock>
RxTSym%解调信号
RxSymDemod=RxSymDemod+1;
RxBitsI(RxSymDemod)=round(sign(real(RxIntegrator))+1)/2;
RxBitsQ(RxSymDemod)=round(sign(imag(RxIntegrator))+1)/2;
RxBitClock=RxBitClock-TSym;
RxIntegrator=0;
%差分解码
SinkBitsI=SourceBitsI*0;
SinkBitsQ=SourceBitsQ*0;
RxSymDemod
SinkBitsI(k)=or(and(not(xor(RxBitsI(k),RxBitsQ(k))),xor(RxBitsI(k),RxBitsI(k-1))),and(xor(RxBitsI(k),RxBitsQ(k)),xor(RxBitsQ(k),RxBitsQ(k-1))));
SinkBitsQ(k)=or(and(not(xor(RxBitsI(k),RxBitsQ(k))),xor(RxBitsQ(k),RxBitsQ(k-1))),and(xor(RxBitsI(k),RxBitsQ(k)),xor(RxBitsI(k),RxBitsI(k-1))));
%在输入和输出100字节中寻找最佳时延
[C,Lags]=vxcorr(SourceBitsI(10:
110),SinkBitsI(10:
110));
[MaxC,LocMaxC]=max(C);
BestLag=Lags(LocMaxC);
%调整时延
ifBestLag>
SourceBitsI=SourceBitsI(BestLag+1:
length(SourceBitsI));
SourceBitsQ=SourceBitsQ(BestLag+1:
length(SourceBitsQ));
elseifBestLag<
SinkBitsI=SinkBitsI(-BestLag+1:
length(SinkBitsI));
SinkBitsQ=SinkBitsQ(-BestLag+1:
length(SinkBitsQ));
%将序列调整成相同长度
TotalBits=min(length(SourceBitsI),length(SinkBitsI));
TotalBits=TotalBits-20;
SourceBitsI=SourceBitsI(10:
TotalBits);
SourceBitsQ=SourceBitsQ(10:
SinkBitsI=SinkBitsI(10:
SinkBitsQ=SinkBitsQ(10:
Errors=sum(SourceBitsI~=SinkBitsI)+sum(SourceBitsQ~=SinkBitsQ);
BER_MC=Errors/(2*length(SourceBitsI));
functionMCQPSKBER
Eb=22:
0.5:
26;
N0=-50;
ChannelAttenuation=70;
EbN0dB=(Eb-ChannelAttenuation)-N0;
EbN0=10.^(EbN0dB./10);
BER_T=0.5*erfc(sqrt(EbN0));
N=round(100./BER_T);
BER_MC=zeros(size(Eb));
fork=1:
length(Eb)
BER_MC(k)=MCQPSKrun(N(k),Eb(k),N0,ChannelAttenuation,0,0,0,0);
disp(['
simulation'
num2str(k*100/length(Eb)),'
%complate'
]);
figure
(1);
semilogy(EbN0dB,BER_MC,'
o'
EbN0dB,2*BER_T,'
-'
xlabel('
Eb/N0(dB)'
ylabel('
biterrorrate'
legend('
MCBEREstimate'
'
TheoreticalBER'
grid;
代码3
function[peideal,pesystem]=qpsk_berest(xx,yy,ebn0db,eb,tb,nbw)
%xx为输入序列,yy为输出序列,ebn0db为信噪比,eb为单个信号能力,tb信号周期,nbw噪声带宽
[n1n2]=size(xx);
nx=n1*n2;
[n3n4]=size(yy);
ny=n3*n4;
[n5n6]=size(ebn0db);
neb=n5*n6;
%接收机带宽设定为rs/2
nbwideal=1/(2*tb*2);
neb
peideal(m)=0.0;
%初始化
pesystem(m)=0.0;
%计算n0和噪声方差
string1=['
Eb/N0='
num2str(ebn0db(m))];
disp(string1)
ebn0(m)=10^(ebn0db(m)/10);
n0=eb/ebn0(m);
%噪声功率
sigma=sqrt(n0*nbw*2);
%方差
sigma1=sqrt(n0*nbwideal*2);
%理想方差
b=sqrt(2*eb/tb)/sqrt(sum(abs(xx).^2)/nx);
nx
theta=angle(xx(n));
if(theta<
0)
theta=theta+2*pi;
%接收信号的相位旋转
xxx(n)=b*xx(n)*exp(-i*(theta-(pi/4)));
yyy(n)=yy(n)*exp(-i*(theta-(pi/4)));
d1=real(xxx(n));
d2=imag(xxx(n));
d3=real(yyy(n));
d4=imag(yyy(n));
pe1=q(d1/sigma1)+q(d2/sigma1);
pe2=q(d3/sigma)+q(d4/sigma);
peideal(m)=peideal(m)+pe1;
pesystem(m)=pesystem(m)+pe2;
peideal=(1/2)*peideal./nx;
pesystem=(1/2)*pesystem./nx;
functionQPSKThreeray(p0,p1,p2,delay)
NN=256;
%发送的信号数
tb=0.5;
%信号周期
fs=16;
%每信号的采样数
ebn0db=[1:
2:
14];
%信噪比矢量
%产生QPSK信号
x=random_binary(NN,fs)+i*random_binary(NN,fs);
delay0=0