概述
在信道编码和误码课上,需要编一个bpsk的误码率的matlab程序,于是在参考了网上大神的代码之后,有了我现在这个版本。。。
加了一些注释,会更好理解吧。以下正文。
- 实验目的
探究在不同信噪比的环境下BPSK(Binary Phase Shift Keying)二进制相移键控系统的误码率的计算,以及与实际误码率之间的对比。
- 实验过程
- 产生10^7个随机码,随机取+1,-1。
假设发送了10^7个bit的数据,我们把这些数据作为数据样本进行接下来的调制和解调,以及统计误码率等操作。
- 产生高斯白噪声,利用randn函数产生10^7个伪随机数,服从高斯分布。
randn(random normal distribution)是一种产生标准正态分布的随机数或矩阵的函数,属于MATLAB函数。返回一个n*n的随机项的矩阵,根据实验的要求我们产生10^7个服从高斯分布的伪随机数。
- 确定由0db~10db十一种信噪比。
便于对比在不通过的信噪比下的误码率。准备进行调制。
图1 BPSK调制系统原理
- 对信号进行调制,加入高斯白噪声。
在仿真时,假设R=1,M=2,Eb=1。
同时,针对以上十一种不同信噪比的情况,我们将高斯白噪声加入其中。由于我们需要将BPSK的标准差乘上到标准正态分布中以得到调制后的信号,基于正态分布的性质:
如果 且a与b是实数,那么 。
我们可以推得方差:
于是,进行化简:
再进一步化简,有:
得到标准差后,由性质就可以将高斯白噪声加入调制中。
- 对收到的信号进行解调,统计误码数和误码率。
图2 BPSK解调系统原理框图
在AWGN信道中,BPSK信号相干的解调的理论误码率为:
其中,r为信噪比:
- 作图比较实际误码率和理论误码率的曲线。
- 实验结果
图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); % S(i)是输入的码,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('仿真误码率曲线','理论误码率曲线');
最后
以上就是害怕乌冬面为你收集整理的BPSK误码率实验 matlab源码的全部内容,希望文章能够帮你解决BPSK误码率实验 matlab源码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复