基于Matlab的2ASK、2PSK性能仿真

这里我们将简单的在Matlab中进行2ASK与2PSK的仿真,比较实际误码率与理论误码率,最终做出相应的曲线。

2ASK的仿真:

我们首先来2ASK的看一下程序框图:

产生(0,1)随机数序列这里我们使用的是Matlab中randi([imin,imax],行数,列数)函数,通过设置随机产生的范围即可得到相应的随机数序列;

添加高斯白噪声,这里我们选用的是awgn(x,snr,’measured’),这里x为需要添加噪声的序列,snr为需要的信噪比,’measured’代表的是计算输入序列的平均功率之后,按照信噪比进行添加;

抽样判决,这里抽样判决的最佳门限为b*=a/2  这里a代表的是输入的幅值大小,所以这里a设置为1,最佳噪声门限为0.5,当添加噪声的序列>0.5时我们判决为1,小于等于0.5时,我们判决为0;

进行误码率的计算,这里我们选用的是Matlab中的biterr函数,[number,ratio] = biterr(x,y),进行比较的两个数组分别为x,y,经过比较后,numbers输出的是错误个数,ratio输出的是错误率,这样我们就得到了相应信噪比下的误码率,然后我们再进行多次循环,这样就能得到相应的误码率与信噪比的关系。

循环,我们需要改变噪声与信号的信噪比,以便做出相应的曲线,这里我们选择的是以1dB每信噪比进行步进。

2ASK的公式为:

式中r代表的是解调器输入端的信噪比。

那么我们最终的到的曲线如下:

实现代码如下:

%2ASK调制
%初始化定义
clc;
clear all;
n = 100000;%需要计算的数值
jungle = zeros(n,1);
ration = zeros(16,1);
%产生二进制信号源
source = randi([0,1],n,1);
EbN0_dB = 0:1:15;
EbN0 = 10.^(EbN0_dB/10);
for i=1:16
%添加高斯白噪声
Bit_Noise = awgn(source,EbN0_dB(i),'measured');
%判决
for j=1:n
    if(Bit_Noise(j)<0.5)
           jungle(j) = 0;
    else
           jungle(j) = 1;
    end  
end
%计算误码率
[number,ration(i)]=biterr(source,jungle);
end
%画出2ASK相干解调的理论值与实际值曲线
BER = 1/2.*erfc(sqrt(EbN0/4));
semilogy(EbN0_dB,BER,'-or',EbN0_dB,ration,'-*b')
grid on
ylabel('Pe')
xlabel('r/dB')
title('2ASK相干解调理论值曲线与实际值曲线')
legend('2ASK理论误码率曲线','2ASK实际误码率曲线')



2PSK的仿真:

同样的首先我们先来看一下2PSK的程序流程图:

其与2ASK不同的地方在于,多了一个2PSK调制,那么我们相应的程序流程图解读如下:

产生(0,1)随机数序列这里我们使用的是Matlab中randi([imin,imax],行数,列数)函数,通过设置随机产生的范围即可得到相应的随机数序列;

进行2PSK的调制,这里我们需要将产生的随机序列进行简单的调制,当产生的随机序列为1时,我们将其调制为-1,当其产生的随机序列为0时,我们将其调制为1,这样就实现了相位调制。

添加高斯白噪声,这里我们是通过计算整个序列的平均功率,然后在平均功率的基础上进行噪声的添加。

抽样判决,这里抽样判决的最佳门限为b*=0当添加噪声的序列>0时我们判决为0,小于等于0时,我们判决为1;

进行误码率的计算,这里我们选用的是Matlab中的biterr函数,[number,ratio] = biterr(x,y),进行比较的两个数组分别为x,y,经过比较后,numbers输出的是错误个数,ratio输出的是错误率,这样我们就得到了相应信噪比下的误码率,然后我们再进行多次循环,这样就能得到相应的误码率与信噪比的关系。

循环,我们需要改变噪声与信号的信噪比,以便做出相应的曲线,这里我们选择的是以1dB每信噪比进行步进。

2PSK的公式为:

式中r代表的是解调器输入端的信噪比。

那么最终我们得到的曲线图如下:

实现代码如下:

%2PSK调制
%初始化定义
clc;
clear all;
n = 1000000;%需要计算的数值
source = zeros(n,1);
jungle = zeros(n,1);
ration = zeros(10,1);
%产生二进制信号源
a = randi([0,1],n,1);
%调制
for k=1:n
if(a(k) == 1)
    source(k) = -1;
elseif (a(k) == 0)
    source(k) = 1;
end
end
EbN0_dB = 0:1:9;
EbN0 = 10.^(EbN0_dB/10);
for i=1:10
Average_Power = sum(abs(source).^2)/n;
Sigma = sqrt(Average_Power*10^(-(i-1)/10));
Noise =(randn(n,1)+1i*randn(n,1))/sqrt(2);
Bit_Noise = source+Noise*Sigma;
%判决
    for j=1:n
        if (Bit_Noise(j)<0)
           jungle(j) = 1;
        else
           jungle(j) = 0;
        end  
    end
%计算误码率
[number,ration(i)]=biterr(a,jungle);
end
%画出理论2PSK相干解调的理论值与实际值曲线曲线
BER = 0.5.*erfc(sqrt(EbN0));
semilogy(EbN0_dB,BER,'-or',EbN0_dB,ration,'-*b')
grid on
ylabel('Pe')
xlabel('r/dB')
title('2PSK相干解调理论值曲线与实际值曲线')
legend('2PSK理论值曲线','2PSK实际值曲线')


完。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值