仿真比照4ASK信号、8PSK信号、4FSK信号在AWGN信道下的传输功用,一个经典的通讯原理仿真标题。假定符号周期为1s,载波频率为10Hz,每个符号周期内采样100个点。目标首要重视误码率和误比特率功用,同时核算理论值。

仿真结束

直接上代码

clear all;close all;clc;
gray_rule = [0 1 3 2 4 5 7 6 12 13 15 14 8 9 11 10];    %格雷编码规则
n_symbol = 100000;  %传输的符号样例数目(足够多的样本使仿真趋近理论曲线)
Ts = 1;                                         %符号周期
fc = 10;                                        %载波频率
n_sample = 100;                                 %每个符号周期内采样点数
EsN0_dB = 0:15;                                 %信噪比(dB)
%数字频带崎岖调制的已调信号能够表达称PAM信号与载波的乘积
% 下面生成PAM信号
M = 4;                                          %M进制
xn = randi([0, M - 1], 1, n_symbol); %可能的信号崎岖,在编码中对应M位二进制序列
xn_gray = gray_rule(xn + 1);                    %将原码映射为格雷码
xn_gray_pam = pammod(xn_gray, M);               %PAM调制
xn_gray_pam = xn_gray_pam';
%下面生成载波信号
T_sample = 1/n_sample;                          %采样周期
t_xct = 0:T_sample:Ts-T_sample;                 %符号周期内时间序列
sct = sqrt(2/Ts)*cos(2*pi*fc*t_xct);            %载波信号,也是信号空间的基信号
% 已调信号
st = xn_gray_pam*sct;                           %已调信号
P_symbol = norm(st)^2/length(st);               %符号功率
Pb = zeros(size(EsN0_dB));                      %误比特率
Ps = zeros(size(EsN0_dB));                      %误符号率
%下面进行信道及接收的仿真
EsN0 = 10.^(EsN0_dB/10);
snr = 2*EsN0;                                   %核算SNR
for i=1:length(EsN0_dB)
    Pn = P_symbol/snr(i);                       %核算噪声功率
    nt = sqrt(Pn) * randn(size(st));            %根据测量的信号功率运用randn函数发生噪声
    y_noise = st + nt;                          %叠加高斯白噪声
    y_downsamp = (y_noise*sct')/length(sct);    %相关器
    %一个码元周期内作相关运算,某种程度上也是在做降采样
    yn = pamdemod(y_downsamp, M);               %断定器
    yn0 = gray_rule(yn + 1);                    %将格雷码映射为原码
    [~, Pb(i)] = biterr(xn, yn0, log2(M));      %误比特率
    [~, Ps(i)] = symerr(xn, yn0);               %误符号率
end
Ps_th = 2*(M-1)/M*qfunc(sqrt(6*EsN0/(M^2-1)));
Pb_th = Ps_th/log2(M);
semilogy(EsN0_dB, Ps, 'k-*', EsN0_dB, Pb,'k-o', EsN0_dB, Ps_th, 'r-*', EsN0_dB, Pb_th, 'r-o');
xlabel('$E_s/{N_0}(dB)$', 'Interpreter','latex');
ylabel('过错概率');
legend('误符号率', '误比特率', '理论误符号率', '理论误比特率');
title('4ASK信号在AWGN信道下的传输功用');

仿真比照4ASK信号、8PSK信号、4FSK信号在AWGN信道下的传输功用

clear all;close all;clc;
gray_rule = [0 1 3 2 4 5 7 6 12 13 15 14 8 9 11 10];    %格雷编码规则
n_symbol = 100000;      %传输的符号样例数目(足够多的样本使仿真趋近理论曲线)
Ts = 1;                 %符号周期
n_sample = 100;         %每个符号周期内采样点数
EsN0_dB = 0:15;         %信噪比(dB)
%多进制PSK信号不能运用一个载波调制(相位含糊)需要两个正交的相干载波
% 分同相、正交两路调制
M = 8;                    %M进制
xn = randi([0,7], 1, n_symbol);
xn_gray = gray_rule(xn + 1);        %格雷映射
xn_gray_psk = pskmod(xn_gray, M);   %8PSK调制
xn_gray_psk = xn_gray_psk';
T_sample = 1/n_sample;                  %采样周期
t_xct = 0:T_sample:Ts-T_sample;         %时间向量
fc = 10;                                %载波频率
xct = sqrt(2/Ts)*exp(1j*2*pi*fc*t_xct); %载波
xct_I = sqrt(2/Ts)*cos(2*pi*fc*t_xct);  %同相载波
xct_Q = sqrt(2/Ts)*sin(2*pi*fc*t_xct);  %正交载波
st = real(xn_gray_psk*xct);             %已调信号   
%对各符号周期内信号整形为一维度以出现在时间向量上
st_tran = reshape(st.',1,length(xn_gray_psk)*length(xct)); 
P_symbol = norm(st_tran).^2/n_symbol;   %符号功率
Pb = zeros(size(EsN0_dB));              %误比特率
Ps = zeros(size(EsN0_dB));              %误符号率
EsN0 = 10.^(EsN0_dB/10);                %信噪比
snr = 2*EsN0;                           %核算SNR
for i=1:length(EsN0_dB)
    Pn = P_symbol/snr(i);               %核算噪声功率
    nt = sqrt(Pn) * randn(size(st_tran));           %根据测量的信号功率运用randn函数发生噪声
    y_tran_noise = st_tran + nt;                    %叠加高斯白噪声
    y_noise = reshape(y_tran_noise, length(xct), length(xn_gray_psk));
    y_downsamp_I = (xct_I*y_noise)/length(xct_I);   %相关运算
    y_downsamp_Q = (xct_Q*y_noise)/length(xct_Q);   %相关运算
    yt = y_downsamp_I + 1j*y_downsamp_Q;            %将两个支路信号送入断定器
    yn = pskdemod(yt, M);                           %断定器
    yn0 =gray_rule(yn + 1);                         %逆格雷映射
    [~, Pb(i)] = biterr(xn, yn0, log2(M));          %误比特率
    [~, Ps(i)] = symerr(xn, yn0);                   %误符号率
end
Ps_th = 2*qfunc(sqrt(2*EsN0)*sin(pi/M));
Pb_th = Ps_th/log2(M);
semilogy(EsN0_dB, Ps, 'k-*', EsN0_dB, Pb, 'k-o', EsN0_dB, Ps_th, 'r-*', EsN0_dB, Pb_th, 'r-o');
xlabel('$E_s/{N_0}(dB)$', 'Interpreter','latex');
ylabel('过错概率');
legend('误符号率', '误比特率', '理论误符号率', '理论误比特率');
title('8PSK信号在AWGN信道下的误比特率功用');

仿真比照4ASK信号、8PSK信号、4FSK信号在AWGN信道下的传输功用

clear all;close all; clc;
%MFSK星座图没有简略错为相邻信号点的特色,故而FSK不必选用格雷编码规则
M = 4;                      %M进制
n_symbol = 100000;          %传输的符号样例数目(足够多的样本使仿真趋近理论曲线)
freq_sep = 1;              %符号速率
nsamp = 100;                 %每个符号的取样点数
Fs = nsamp*freq_sep;        %采样频率
xn = randi([0, M-1], 1, n_symbol);              %消息数据
xn_fsk = fskmod(xn, M, freq_sep, nsamp, Fs);    %生成4FSK基带信号
fc = 10;                    %载波频率(严格来说,应该是FSK调制的中心频率)
t_xct = 0:length(xn_fsk)-1; %载波时序
xct = cos(2*pi*fc*t_xct);   %载波
st = xn_fsk.*xct;           %已调信号
P_symbol = norm(st).^2/n_symbol;                %符号功率
EsN0_dB = 0:15;             %信噪比(dB)
EsN0 = 10.^(EsN0_dB/10);    %信噪比
snr = 2*EsN0;               %核算SNR
Pb = zeros(size(EsN0_dB));  %误比特率
Ps = zeros(size(EsN0_dB));  %误符号率
Ps_th = Ps;                 %理论误符号率
for i = 1:length(EsN0_dB)
    Pn = P_symbol/snr(i);   %噪声功率
    %根据测量的信号功率运用randn函数发生噪声
    nt = sqrt(Pn)*(randn(1, length(st))+1j*randn(1,length(st)));
    y_noise = st + nt;      %叠加高斯白噪声
    y_demod = y_noise.*cos(2*pi*fc*t_xct);      %解调
    yn = fskdemod(y_demod, M, freq_sep, nsamp, Fs); %断定器
    [~, Pb(i)] = biterr(xn, yn, log2(M));       %误比特率
    [~, Ps(i)] = symerr(xn, yn);                %误符号率
    %核算理论误符号率(最佳接收机)
    for j = 1:M-1
    Ps_thj(j) = (-1)^(j+1)*nchoosek(M-1, j)*(1/(j+1))*exp(-(j/(j+1))*EsN0(i));
    end
    Ps_th(i) = sum(Ps_thj);
end
Pb_th = Ps_th*M/2/(M-1);
semilogy(EsN0_dB, Ps, 'k-*', EsN0_dB, Pb, 'k-o', EsN0_dB, Ps_th, 'r-*', EsN0_dB, Pb_th, 'r-o');
xlabel('$E_s/{N_0}(dB)$', 'Interpreter','latex');
ylabel('过错概率');
legend('误符号率', '误比特率', '理论误符号率', '理论误比特率');
title('4FSK信号在AWGN信道下的误比特率功用');

仿真比照4ASK信号、8PSK信号、4FSK信号在AWGN信道下的传输功用

信号仿真剖析

  1. 关于ASK信号的生成,可将数字频带崎岖调制的已调信号表达为PAM信号与载波的乘积,即
s(t)=b(t)cos2fcts\left(t\right)=b\left(t\right)\mathrm{cos2}\pi f_c t

其间以PAM信号b(t)表明离散序列。故而在实验中,通过分别生成PAM信号与载波信号结束MASK信号。

  1. 关于PSK信号的生成,因为关于多进制PSK信号,其信号码元可视作由正弦和余弦两个正交重量组成的信号,故而在调制仿真与仿真中,MPSK信号码元能够看作是两个特定的MASK信号码元之和,其处理与MASK是相似的。
  2. 关于FSK信号的生成,MFSK信号可表明为M个等能量、频率不同的正交信号组合而成,有各码元信号为
sm(t)=2ETcos(2fct+2f  t)s_m \left(t\right)=\sqrt{2\frac{E}{T}}\mathrm{cos}\left(2\pi f_c t+2\pi \Delta f\;t\right)

而由MATLAB函数fskmod生成的信号为基带FSK信号,可理解其体现信号点的频率与中心频率的差值,可通过将其与载波相乘将其搬移至中心频率fcf_c上。

特别地,由FSK信号的信号空间的特色可知(各信号点正交,信号点相互完全对称),不存在某个信号点更简略错称相邻信号点的特色,故而没有必要采纳格雷编码。

信道仿真

关于信道的仿真,实验中采纳的是核算信号的符号功率,通过运用函数randn和根据snr生成噪声。留意此处涉及到snr与EsN0\frac{E_s }{N_0 }之间的转化联系:

snr=PsPn=EbRbRbN02=2EbN0\mathrm{snr}=\frac{P_s }{P_n }=\frac{E_b R_b }{R_b \frac{N_0 }{2}}=2\frac{E_b }{N_0 }

理论剖析

从误符号率曲线可见,三个信号在AWGN信道中的传输功用仿真成果,与理论的预估值是基本相符的。在足够大的样本个数下,仿真曲线与理论曲线的违背很少。

其间:

  • 关于MASK信号,有其误符号率为

    Ps  MASK=2(M−1)MQ(6Es(M2−1)N0)P_{s\;\mathrm{MASK}} =2\frac{\left(M-1\right)}{M}Q\left(\sqrt{6\frac{E_s }{\left(M^2 -1\right)N_0 }}\right)
  • 关于MPSK信号,有其误符号率为

    Ps  MPSK=2Q(2EsN0sinM)P_{s\;\mathrm{MPSK}} =2Q\left(\sqrt{\frac{2E_s }{N_0 }}\mathrm{sin}\frac{\pi }{M}\right)
  • 关于MFSK信号,若解调选用最佳接收结构时,有其误符号率能够表明为

    Ps  FSK=∑n=1M−1(−1)n+1CM−1n1n+1e−nn+1  EsN0P_{s\;\mathrm{FSK}} =\sum_{n=1}^{M-1} {\left(-1\right)}^{n+1} C_{M-1}^n \frac{1}{n+1}e^{-\frac{n}{n+1}\;\frac{E_s }{N_0 }}

在仿真中,最佳接收结构中的相关器(以及后续的断定器-最佳检测器)是由MATLAB函数fskdemod结束的。

值得弥补的是误比特率的核算,关于FSK信号,因为其发生误码时每种样式出现的概率相等,故而可确认一次误码形成的平均过错比特数,有误比特率

Pe  MFSK=M2(M−1)Ps  MFSKP_{e\;\mathrm{MFSK}} =\frac{M}{2\left(M-1\right)}{P_s }_{\;\mathrm{MFSK}}

可是关于MASK信号与MPSK信号,其误比特率的预算是通过

Pb≈Pslog2MP_b \approx \frac{P_s }{{\mathrm{log}}_2 M}

选用这样的预算的成果是:仿真的误比特率与预估的理论误比特率存在误差,一般使得仿真曲线高于理论预算的误比特率曲线(在MPSK的仿真中犹为显着)。这是因为这一预算实则包含了这样一个前提:每个过错码元只错了一个比特。而实际上,过错接收的比特数在传输总比特数中所占的份额要比这种简化的谈论来得更杂乱。