77范文网 - 专业文章范例文档资料分享平台

基于matlab的QPSK与BPSK信号性能比较仿真(3)

来源:网络收集 时间:2019-03-27 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

瑞利频率选择性衰落

4.1.2 横向比较分析

相同信道下,BPSK调制的系统误码率小于QPSK调制。本次仿真过程中,莱斯平坦衰落信道下两者误码率差别显著。

4.2 仿真结果分析

4.2.1 误码率分析

由前面介绍的误码率内容可以看出,QPSK判决门限为90,BPSK的判决门限为180。因此相同系统情况下的误码率BPSK优于QPSK。

??4.2.2 频带利用率比较

在传码率相同的情况下,四进制数字调制系统的信息速率是二进制系统的2倍。频带利用率公式

??Rb B在相同信号速率的情况下,QPSK和BPSK系统的带宽是相同的,但是由于QPSK每个信号都是四进制的,QPSK每个信号包含2bit信息,所以比特率就是BPSK的两倍,因而其频带利用率即为BPSK的两倍。BPSK系统理论的频带利用率最大为1,但是在实际的实现中不能达到1,而在QPSK系统中,频带利用率可以超过1。

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

附 录

代码1

function qpskconstellationA(M) M=4;

x=[0:M-1];

scatterplot(pskmod(x,M)); % A方式QPSK信号 grid on;

return

function qpskconstellationB(M) M=4;

x=[0:M-1];

scatterplot(pskmod(x,M,pi/4)); % B方式QPSK信号 grid on;

return

代码2

function [x,bits]=random_binary(nbits,nsamples)

x=zeros(1,nbits*nsamples); bits=round(rand(1,nbits)); for m=1:nbits

for n=1:nsamples

index=(m-1)*nsamples+n; x(1,index)=(-1)^bits(m); end end return

function [c,lags]=vxcorr(a,b)

%计算a b 的互相关系数,返回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)];

[nr nc]=size(a); if(nr>nc) c=c';

lags=lags.'; end return

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

function BER_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; for k=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))));

end

% 产生复信号

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);

% 开始仿真循环

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

while TxSymSent

TxBitClock=TxBitClock+Ts; if TxBitClock>TSym

TxSymSent=TxSymSent+1;

TxBitClock=mod(TxBitClock,TSym);

TxOutput=TxBits(TxSymSent)*TxSigAmp; end

%信号经过信道滤波器

[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))); if RxBitClock>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; end end

% 差分解码

SinkBitsI=SourceBitsI*0; SinkBitsQ=SourceBitsQ*0;

for k=2: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))));

end

%在输入和输出100字节中寻找最佳时延

[C,Lags]=vxcorr(SourceBitsI(10:110),SinkBitsI(10:110)); [MaxC,LocMaxC]=max(C); BestLag=Lags(LocMaxC); % 调整时延 if BestLag>0

SourceBitsI=SourceBitsI(BestLag+1:length(SourceBitsI)); SourceBitsQ=SourceBitsQ(BestLag+1:length(SourceBitsQ)); elseif BestLag<0

SinkBitsI=SinkBitsI(-BestLag+1:length(SinkBitsI)); SinkBitsQ=SinkBitsQ(-BestLag+1:length(SinkBitsQ)); end

% 将序列调整成相同长度

TotalBits=min(length(SourceBitsI),length(SinkBitsI)); TotalBits=TotalBits-20;

SourceBitsI=SourceBitsI(10:TotalBits); SourceBitsQ=SourceBitsQ(10:TotalBits); SinkBitsI=SinkBitsI(10:TotalBits); SinkBitsQ=SinkBitsQ(10:TotalBits);

Errors=sum(SourceBitsI ~= SinkBitsI)+sum(SourceBitsQ ~= SinkBitsQ); BER_MC=Errors/(2*length(SourceBitsI));

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

return

function MCQPSKBER

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)); for k=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']); end

figure(1);

semilogy(EbN0dB,BER_MC,'o',EbN0dB,2*BER_T,'-'); xlabel('Eb/N0(dB)'); ylabel('bit error rate');

legend('MC BER Estimate','Theoretical BER');grid; return

代码3

function [peideal,pesystem]=qpsk_berest(xx,yy,ebn0db,eb,tb,nbw)

%xx为输入序列,yy为输出序列,ebn0db为信噪比,eb为单个信号能力,tb信号周期,nbw噪声带宽 [n1 n2]=size(xx); nx=n1*n2;

[n3 n4]=size(yy); ny=n3*n4;

[n5 n6]=size(ebn0db); neb=n5*n6;

%接收机带宽设定为rs/2 nbwideal=1/(2*tb*2); for m=1: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); for n=1:nx

theta=angle(xx(n)); if(theta<0)

theta=theta+2*pi; end

%接收信号的相位旋转

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));

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于matlab的QPSK与BPSK信号性能比较仿真(3)在线全文阅读。

基于matlab的QPSK与BPSK信号性能比较仿真(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/546516.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: