Matlab通信仿真系列——载波相位调制(PSK)仿真

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等
在这里插入图片描述
本节目录

一、载波PSK信号的产生
二、载波PSK信号的解调
三、载波PSK信号的Matalb仿真
四、Matlab源码

本节内容
载波相位调制是用已调信号中载波的多种不同相位或相位差来表示数字信息的。通常称为相移键控PSK。
一、载波PSK信号的产生
在数字相位调制中,M个信号波形为
在这里插入图片描述

上式中g(t)表示信号脉冲形状;θm=2πm/M表示载波的M个可能的相位,用于传送发送信息。
信号波形的能量相等,表达式为:
在这里插入图片描述

Es表示每个传输符号的能量
相位调制信号可以看作是两个正交载波,其幅度取决于在每个信号区间内传输的相位。
在这里插入图片描述

二、载波PSK信号的解调
在awgn信道中,一个信号区间内接收到的带通信号表达式:
在这里插入图片描述

上式中nc(t)和ns(t)是加性噪声的两个正交分量,是零均值且互不相关的高斯随机过程,方差为N0/2。
PSK的awgn信道的最佳检测计算相关度量,表达式为:
在这里插入图片描述

将接收信号矢量r=[r1,r2]投影到M个可能发送的信号矢量上,再根据最大的投影分量判决发送信号。相当于一个相位检测器,计算接收信号r的相位,再选择相位最接近r的矢量sm,r的相位为:
在这里插入图片描述

PSK的符合差错概率:
在这里插入图片描述

若采用Gray编码是,误比特率为Pb=PM/k,k=log2(M),每个符号传输的比特数。
三、载波PSK信号的Matlab仿真

matlab代码示例:
仿真8-PSK载波调制信号在awgn信道下的误码率和误比特率性能,
绘制误比特率随Eb/N0的变化情况,
Eb/N0的范围为0-10dB,0-15dB,0-20dB,
将理论值与Matlab仿真值比较。
其中符号周期为1s,载波频率为10Hz,
每个符合周期内采样100个点。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

从图中对比,可以看出,仿真得到的误符号率在不同信噪比情况下与理论值均比较吻合,而误比特率在低信噪比时,与理论值误差较大,信噪比较高时,误差明显缩小。
四、Matlab源码

clear all;
clc;
close all;
%采样点数
numsamp=10;
%发送符合数
num_symbol=100000;
%符号后期
T=1;
%每个符号的采样点数
fs=100;
%采样时间间隔
ts=1/fs;
%时间矢量
t=0:ts:T-ts;
%载波频率
fc=10;
%载波信号
c=sqrt(2/T)*exp(j*2*pi*fc*t);
%同相载波
c1=sqrt(2/T)*cos(2*pi*fc*t);
%正交载波
c2=-sqrt(2/T)*sin(2*pi*fc*t);
%信噪比
%EsN0=0:20;
%EsN0=0:15;
EsN0=0:10;
%信噪比转化为线性值
snrl=10.^(EsN0/10);
%8-PSK
M=8;
%Gray编码规则
graycode=[0 1 2 3 6 7 4 5];
%消息数据
msg=randi([0,7],1,num_symbol);
%Gray映射
msg1=graycode(msg+1);
%8-PSK调制
msgmod=pskmod(msg1,M).';
%载波调制
tx=real(msgmod*c);
tx1=reshape(tx.',1,length(msgmod)*length(c));
%求每个符号的平均功率
spow=norm(tx1).^2/num_symbol;
for indx=1:length(EsN0)
    %根据符号功率求噪声功率
    sigma=sqrt(spow/(2*snrl(indx)));
    %加入高斯白噪声
    rx=tx1+sigma*randn(1,length(tx1));
    rx1=reshape(rx,length(c),length(msgmod));    
    %相关运算
    r1=(c1*rx1)/length(c1);
    r2=(c2*rx1)/length(c2);    
    r=r1+j*r2;
    %PSK解调
    y1=pskdemod(r,M);
    %Gray逆映射
    decmsg=graycode(y1+1);
    %求误比特率和误符号率
    [err,ber(indx)]=biterr(msg,decmsg,log2(M));
    [err,ser(indx)]=symerr(msg,decmsg);
end
%理论误符号率
ser1=2*qfunc(sqrt(2*snrl)*sin(pi/M));
%理论误比特率
ber1=1/log2(M)*ser1;


semilogy(EsN0,ber,'-ko',EsN0,ser,'-k*',EsN0,ber1,'-r',EsN0,ser1,'-b');
%title('8-PSK载波信号在awgn信道下的性能(0-20dB)');
%title('8-PSK载波信号在awgn信道下的性能(0-15dB)');
title('8-PSK载波信号在awgn信道下的性能(0-10dB)');
xlabel('Es/N0');
ylabel('误比特率和误符号率');
legend('误比特率','误符号率','理论误比特率','理论误符号率');
  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小灰灰的FPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值