D8PSK

我所调试的部分是一个D8PSK的收发系统。按理说,D8PSK在本科通信原理学习中也是一个可以说是最简单的系统了,可是实现起来并没有那么简单。当然当时学通信原理时就知道事情没有那么简单,但是却不知道怎样开始做一个系统,现在算是补足学习通信原理时的遗憾。
言归正传,D8PSK系统,就是将3个二进制数映射为一个符号,采用格雷码映射,相邻相位之间只有一个比特不同,好处是即使解调错误,很可能只会产生一比特的误判。然后就是D8PSK中的D,表示的是,发送信号代表的是原始信号的差分值(调制信号前后码元之间载波相对相位的变化来传递信息。)。首先拿简单的D2PSK来说,如果原始信号是01100101,那么发送信号的相位就是首先一个初相比如0,然后0,pi,0,0,0,pi,pi,0。
D8PSK的话,

switch b_123
        case '000'
            delta_phi(i)=0;
        case '001'
            delta_phi(i)=pi/4;
        case '011'
            delta_phi(i)=pi/2;
        case '010'
            delta_phi(i)=3*pi/4;
        case '110'
            delta_phi(i)=pi;
        case '111'
            delta_phi(i)=5*pi/4;
        case '101'
            delta_phi(i)=3*pi/2;
        case '100'
            delta_phi(i)=7*pi/4;
  end

然后

for i=1:M
    phi(i+1)=phi(i)+delta_phi(i);
end
phi=phi(2:end);
data_symbols=exp(1i*phi);

成型滤波

data_ups=upsample([data_symbols(end-20:end),zeros(1,13),data_symbols,zeros(1,13),data_symbols(1:20)],4);%后面加10个零是因为MATLAB上经过升余弦滤波器后报文末端数据会有部分丢失
% rcos_filter=rcosfir(0.6,3,4,1,'sqrt');
rcos_filter=rcosfir(0.6,3,4,1);
data_tx=filter(rcos_filter,1,data_ups);

再然后,梳状滤波,再然后上变频

 begin
    VDB_DUC_I<={VDB_tx_I_cos[23],VDB_tx_I_cos}+{VDB_tx_Q_sin[23],VDB_tx_Q_sin};
	VDB_DUC_Q<={VDB_tx_Q_cos[23],VDB_tx_Q_cos}-{VDB_tx_I_sin[23],VDB_tx_I_sin};
  end

再iq支路进入dac。dac里我猜i路信号(cospi/4)乘以coswt - q路信号(sinpi/4)乘以sinwt=>cos(wt+pi/4)发送出去。
ps:
在这里插入图片描述
如果不是再dac里做,而是只matlab仿真的话,就直接用复数就行
在这里插入图片描述
接收端:adc模块cos(wt+pi/4)。然后 在这里插入图片描述
在这里插入图片描述。。。。。。
再然后
在这里插入图片描述

for i=2:L_effect
 Ikk(i-1)=QQ(i)*QQ(i-1)+II(i)*II(i-1);
 Qkk(i-1)=QQ(i)*II(i-1)-II(i)*QQ(i-1);
end

for i=1:L_effect-1
    ag=atan2(Qkk(i),Ikk(i));
    if (Ikk(i)>0&&Qkk(i)/Ikk(i)>-0.4142&&Qkk(i)/Ikk(i)<0.4142)
        Output_123(i*3-2:i*3)=[0 0 0];
        elseif (Ikk(i)>0&&Qkk(i)/Ikk(i)>0.4142&&Qkk(i)/Ikk(i)<2.4142)
        Output_123(i*3-2:i*3)=[0 0 1];
        elseif (Qkk(i)>0&&Ikk(i)/Qkk(i)>-0.4142&&Ikk(i)/Qkk(i)<0.4142)
        Output_123(i*3-2:i*3)=[0 1 1];
        elseif (Ikk(i)<0&&Qkk(i)/Ikk(i)>-2.4142&&Qkk(i)/Ikk(i)<-0.4142)
        Output_123(i*3-2:i*3)=[0 1 0];
        elseif (Ikk(i)<0&&Qkk(i)/Ikk(i)>-0.4142&&Qkk(i)/Ikk(i)<0.4142)
        Output_123(i*3-2:i*3)=[1 1 0];
        elseif (Ikk(i)<0&&Qkk(i)/Ikk(i)>0.4142&&Qkk(i)/Ikk(i)<2.4142)
        Output_123(i*3-2:i*3)=[1 1 1];
        elseif (Qkk(i)<0&&Ikk(i)/Qkk(i)>-0.4142&&Ikk(i)/Qkk(i)<0.4142)
        Output_123(i*3-2:i*3)=[1 0 1];
        elseif (Ikk(i)>0&&Qkk(i)/Ikk(i)>-2.4142&&Qkk(i)/Ikk(i)<-0.4142)
        Output_123(i*3-2:i*3)=[1 0 0];
    end

关于为什么用D,即相位模糊问题,首先如果是2PSK
在这里插入图片描述
发送0101,而接受可能译为1010。这就是倒pi现象。我在想为什么不直接和接收端商量好发送的前几个码字比如前几个码字就发送0101,接收端一看是1010就知道倒pi了。可是写到这接发现,首先发送了冗余信息,这个就没必要,然后如果在这规定的码字中出现了错误,可能导致整个数据全部译码错误,所以就用D了。
如果是D8PSK的话,
接收cos(wt+pi/4)时,i支路乘以coswt后低通后得cospi/4,q支路得到sinpi/4.
现在只看i支路,如果有相位模糊乘以了cos(wt+pi),得到了cos5pi/4;
同理q支路,得到sin5pi/4;
即发送pi/4译码得5pi/4;
发送0 pi/4 2pi/4 3pi/4 4pi/4 5pi/4 6pi/4 7pi/4
译码pi 5pi/4 6pi/4 7pi/4 0 pi/4 2pi/4 3pi/4
发送000 001 011 010 100 101 111 110
译码100 101 111 110 000 001 011 010
出现了倒pi现象
关于为什么会出现本地载波是cos(wt+pi)的情况
相偏估计对180°不敏感。
在这里插入图片描述

D:就是调制信号前后码元之间载波相对相位的变化来传递信息。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值