BPSK误码率实验 matlab源码

    在信道编码和误码课上,需要编一个bpsk的误码率的matlab程序,于是在参考了网上大神的代码之后,有了我现在这个版本。。。

    加了一些注释,会更好理解吧。以下正文。

  • 实验目的

探究在不同信噪比的环境下BPSK(Binary Phase Shift Keying)二进制相移键控系统的误码率的计算,以及与实际误码率之间的对比。

  • 实验过程
  1. 产生10^7个随机码,随机取+1,-1。

假设发送了10^7个bit的数据,我们把这些数据作为数据样本进行接下来的调制和解调,以及统计误码率等操作。

 

  1. 产生高斯白噪声,利用randn函数产生10^7个伪随机数,服从高斯分布。

randn(random normal distribution)是一种产生标准正态分布的随机数或矩阵的函数,属于MATLAB函数。返回一个n*n的随机项的矩阵,根据实验的要求我们产生10^7个服从高斯分布的伪随机数。

 

  1. 确定由0db~10db十一种信噪比。

便于对比在不通过的信噪比下的误码率。准备进行调制。

图1 BPSK调制系统原理

 

  1. 对信号进行调制,加入高斯白噪声。

在仿真时,假设R=1,M=2,Eb=1。

同时,针对以上十一种不同信噪比的情况,我们将高斯白噪声加入其中。由于我们需要将BPSK的标准差乘上到标准正态分布中以得到调制后的信号,基于正态分布的性质:

如果 https://gss3.bdstatic.com/7Po3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D91/sign=770b4b4a3d7adab439d017428bd4bc17/b3119313b07eca80ea2ac1859a2397dda14483a1.jpg 且a与b是实数,那么 https://gss0.bdstatic.com/-4o3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D175/sign=3ec38e4466224f4a539977143cf69044/11385343fbf2b2111f2b7d2cc18065380cd78e4f.jpg 。

我们可以推得方差:

于是,进行化简:

再进一步化简,有:

得到标准差后,由性质就可以将高斯白噪声加入调制中。

 

  1. 对收到的信号进行解调,统计误码数和误码率。

图2 BPSK解调系统原理框图

在AWGN信道中,BPSK信号相干的解调的理论误码率为:

其中,r为信噪比:

  1. 作图比较实际误码率和理论误码率的曲线。

 

 

  • 实验结果   

图3 理论误码率与仿真误码率对比

  • 实验程序

clc;

clear all;

% 产生10^7bit个随机的+1,-1

N = 10000000;

for i=1:N

if rand <.5

 s(i)=-1;

else

s(i)=1;

 end

end

% 产生高斯白噪声,randn函数产生10^7个正态分布的伪随机数

b=randn(1,N);

% 信噪比

EbNo=[0:1:10];

% 针对以上的情况的11种信噪比加入白噪声

for j = 1:11

sigma(j) = power(10,(-EbNo(j)/20))/ sqrt (2);

 for i = 1:N

n(i)=sigma(j)*b(i);

y(i)=s(i)+n(i); % Si)是输入的码,n(i)为噪声

 end

 % 解码,demo为解码后的结果

ER(j) = 0;

for i=1:N

 if y(i) > 0

 Demo(i) = 1;

else

Demo(i) = -1;

 end

 % 统计误码数,算出误码率,BER意为bit error ratio,比特出错概率,TBER意为理论比特出错概率,erfc为单调增函数,计算误码率和信噪比的关系

if Demo(i) ~= s(i)

 ER(j) = ER(j) + 1;

 end

end

BER(j) = ER(j) / N;

TBER(j) = erfc(sqrt(power(10,EbNo(j)/10)))/2;

end

 % semilogy函数可以使用y轴的对数刻度绘制数据

figure

semilogy(EbNo,BER,'B-V',EbNo,TBER,'M-X');

grid on;

legend('仿真误码率曲线','理论误码率曲线');

 

 

你可能感兴趣的:(matlab,matlab算法)