自学内容网 自学内容网

matlab仿真 数字基带传输(上)

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真   刘学勇编著第六章内容,有兴趣的读者请阅读原书)

clear all
nsamp=10;%每个脉冲信号的抽样点数
s0=ones(1,nsamp);%基带脉冲信号,其中s0的信号为1,1,1,1,1,1,1,1,1,1
s1=[1 1 1 1 1 -1 -1 -1 -1 -1];%s1的信号为1,1,1,1,1,-1,-1,-1,-1,-1
nsymbol=100000;%每种信噪比下的发送符号数

EbN0=0:12;%信噪比
msg=randi([0,1],1,nsymbol);%消息比特
s00=zeros(nsymbol,1);
s11=zeros(nsymbol,1);
indx=find(msg==0);%比特0在发送消息中的位置

s00(indx)=1;%将含有信号0的位置设置为标志1
s00=s00*s0;%比特0影射为发送波形s0
indx1=find(msg==1);%比特1在发送消息中的位置
s11(indx1)=1;%将含有信号1的位置设置为标志1
s11=s11*s1;%比特1映射为发送波形s1(1)
s=s00+s11;%总的发送波形
s=s.';%数据转置,方便接收端处理

for indx=1:length(EbN0)
    decmsg=zeros(1,nsymbol);
    r=awgn(s,EbN0(indx)-7);%发送信号通过AWGN信道(2)
    r00=s0*r;%对s0进行互相关处理
    r11=s1*r;%与s1进行互相关处理
    indx1=find(r11>=r00);%当r11>r00时,证明判决结果是s1,当r11<r00时,证明判决结果是s0
    decmsg(indx1)=1;%判决(3)
    [err,ber(indx)]=biterr(msg,decmsg);%得到误比特率
end
semilogy(EbN0,ber,'-ko',EbN0,qfunc(sqrt(10.^(EbN0/10))));%(4)
title('二进制正交信号误比特率性能')
xlabel('EbN0');ylabel('误比特率Pe')
legend('仿真结果','理论结果')

 (1):映射规则如下:

(2)发射信号通过AWGN

(3)互相关处理

由图6-2,可知,得到信号r(t)后让r(t)对s0和s1做互相关,若一个位置s0的互相关结果比s1的互相关结果大,那么这个位置可以被判决为s0,反之可以判决为s1。

(4)这里计算差错概率时,我们已知的是信噪比是dB形式,而在计算时需要转化成倍数形式

公式为:    倍数=根号下(10^(分贝/10));(见公式6-11)

 

clear all
nsamp=10;
s0=ones(1,nsamp);
s1=-s0;%双极性信号,s1=-s0

nsymbol=100000;
EbN0=0:10;
msg=randi([0,1],1,nsymbol);%消息比特
s00=zeros(nsymbol,1);
s11=zeros(nsymbol,1);
indx=find(msg==0);
s00(indx)=1;
s00=s00*s0;
indx1=find(msg==1);
s11(indx1)=1;
s11=s11*s1;
s=s00+s11;
s=s';
for indx=1:length(EbN0)
    decmsg=zeros(1,nsymbol);
    r=awgn(s,EbN0(indx)-7);
    r00=s0*r;%只需要和s0进行相关
    indx1=find(r00<0);
    decmsg(indx1)=1;
    [err,ber(indx)]=biterr(msg,decmsg);
end
semilogy(EbN0,ber,'-ko',EbN0,qfunc(sqrt(10.^(EbN0/10))),'-k*',EbN0,qfunc(sqrt(2*10.^(EbN0/10))));
title('双极性信号误比特率性能')
xlabel('EbN0');ylabel('误比特率Pe')
legend('仿真结果','正交信号误理论误比特率','双极性信号误理论误比特率')

例6.4和6.1的区别是,因为s0和s1是双极性信号,所以判决时只需要求一个互相关的情况,然后与0比较即可得出结果。

clear all
nsamp=10;
s1=ones(1,nsamp);
s0=zeros(1,nsamp);

nsymbol=100000;
EbN0=0:10;
msg=randi([0,1],1,nsymbol);%消息比特
s00=zeros(nsymbol,1);
s11=zeros(nsymbol,1);
indx=find(msg==0);
s00(indx)=1;
s00=s00*s0;
indx1=find(msg==1);
s11(indx1)=1;
s11=s11*s1;
s=s00+s11;
s=s';
for indx=1:length(EbN0)
    decmsg=zeros(1,nsymbol);
    r=awgn(s,EbN0(indx)-7);
    r00=s1*r;%只需要和s0进行相关
    indx1=find(r00>5);
    decmsg(indx1)=1;
    [err,ber(indx)]=biterr(msg,decmsg);
end
semilogy(EbN0,ber,'-ko',EbN0,qfunc(sqrt(10.^(EbN0/10)/2)),EbN0,qfunc(sqrt(10.^(EbN0/10))),'-k*',EbN0,qfunc(sqrt(2*10.^(EbN0/10))));
title('单极性信号在AWGN信道下的误比特率性能')
xlabel('Eb/N0');ylabel('误比特率Pe')
legend('单极性信号仿真结果','单极性信号信号误理论误比特率','正交信号误理论误比特率','双极性信号误理论误比特率')

这里的s0设置成了0 0 0 0 0 0 0 0 0 0(即只有n(t))

s1为1 1 1 1 1 1 1 1 1 1(s(t)和n(t))

因为阈值是信号能量Eb/2,所以s(t)的能量=10*1的平方=10;10/2=5,所以阈值为5

clear all
nsymbol=100000;
nsamp=10;

M=4;
graycode=[0 1 3 2];
EsN0=0:15;
msg=randi([0,3],1,nsymbol);
msg1=graycode(msg+1);%格雷码映射
msg2=pammod(msg1,M);%4-PAM调制
s=rectpulse(msg2,nsamp);%矩形脉冲成形
for indx=1:length(EsN0)
    decmsg=zeros(1,nsymbol);
    r=awgn(real(s),EsN0(indx)-7,'measured');%(1)
    r1=intdump(r,nsamp);%相关器输出
    %y=intdump(x,nsamp)对信号x进行一个符号周期的积分,然后将平均值输出到y中。nsamp是每个符号的采样数。
    msg_demod=pamdemod(r1,M);%判决
    decmsg=graycode(msg_demod+1);%格雷码逆映射
    [err,ber(indx)]=biterr(msg,decmsg,log2(M));%求误比特率
    [err,ser(indx)]=symerr(msg,decmsg);
end
semilogy(EsN0,ber,'-ko',EsN0,ser,'-k*',EsN0,1.5*qfunc(sqrt(0.4*10.^(EsN0/10))));
title('4-PAM信号在AWGN信道下的性能')
xlabel('Es/N0');ylabel('误比特率和误符号率')
legend('误比特率','误符号率','理论误符号率')

 

 (1):

awgn函数默认对PAM信号添加的是复数噪声,因此,使用real函数说明添加的是实数噪声。

之前在信道仿真那篇文章中提到了QPSK信号的传输

再加上上题可以得到PSK类型信号的调制解调方法(文章链接见下)

http://t.csdnimg.cn/yzh6r

产生发送符号->格雷编码映射->使用pskmod函数进行调制->使用rectpulse进行矩形脉冲成形->加上干扰/噪声(传输过程)->采用intdump函数进行矩形脉冲成形的逆过程(相关器输出)->格雷码逆映射->恢复原信号


原文地址:https://blog.csdn.net/qq_55999494/article/details/140353404

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!