2FSK在瑞利衰落信道下的相干与非相干解调误码率-MATLAB基带仿真

2FSK在瑞利衰落信道下的相干与非相干解调误码率-MATLAB基带仿真


发送信号

在基带上,2FSK看作两路正交信号:

s 1 = ( E , 0 ) s_{1}=(\sqrt{\mathcal{E}}, 0) s1=(E ,0)
s 2 = ( 0 , E ) s_{2}=(0, \sqrt{\mathcal{E}}) s2=(0,E )

相当于向量的两个位置代表两个频率。
MFSK请参考:MFSK调制与解调-MATLAB基带仿真

瑞利衰落信道
瑞利衰落信道的核心在于乘性衰落因子 h h h

h = (randn(2,L)+1j*randn(2,L))/sqrt(2);	% L为信号长度,两行表示信号为2维

其中 2 \sqrt2 2 为归一化系数,使得 h h h方差为1。

这里解释几个问题:

Q:为什么 h h h服从瑞利分布?
A:在此篇仿真中,我们认为信道不存在多普勒频移,即FDT=0,同时来波的方向是均匀分布且无穷多的,没有直射分量(若有直射分量,信道衰落系数变为莱斯分布),此时信道衰落系数可等效为瑞利分布。若要考虑多普勒频移的影响,需要建立时间选择性衰落信道,此篇文章方法不适用。

Q:为什么仿真中 h h h的方差设置为1?
A:设AWGN信道下2FSK系统平均信噪比为 E b N 0 \frac{E_b}{N_0} N0Eb,则瑞利衰落信道下2FSK系统平均信噪比为

γ ˉ b = E b N 0 E ( h 2 ) \bar{\gamma}_{b}=\frac{{E}_{b}}{N_{0}} E\left(h^{2}\right) γˉb=N0EbE(h2)

为了公平地在一张图中比较2FSK系统在两种信道下的性能差异,要使得仿真中的横坐标,也就是平均信噪比相同,因此设置 h h h的方差为1

D ( h 2 ) = E ( h 2 ) − E 2 ( h ) = E ( h 2 ) − 0 = E ( h 2 ) D(h^2)=E(h^2)-E^2(h)=E(h^2)-0=E(h^2) D(h2)=E(h2)E2(h)=E(h2)0=E(h2)

Q:为什么在仿真中,每一个发送符号都乘了不同的信道衰落系数,信道不是分快衰落和慢衰落吗?
A:实际上,一个相同的 h h h持续几个符号,对仿真结果没有影响。我们考察的是统计误码率,只要统计样本足够多,结果是没有变化的。当然在实际问题中,需要考虑信道衰落的平坦与否。

简单评价一下: h h h n n n对信号的影响有着本质的区别。后者是加性信号,前者是乘性信号,存在对原始信号的放缩作用,因此在利用门限进行判别星座点时,非常容易发生误判。对抗衰落信道的方法有很多,典型的方法有分集等。

相干调制与解调

相干调制:

r ( t ) = ∣ h ∣ ⋅ s ( t ) + n ( t ) r(t)=|h|\cdot s(t)+n(t) r(t)=hs(t)+n(t)

相干解调:

s ^ ( t ) = arg ⁡ min ⁡ 1 ≤ m ≤ M ∥ r ( t ) − s m ( t ) ∥ 2 2 \hat{s}(t)=\underset{1 \leq m \leq M}{\arg \min}{\|r(t)-s_m(t)\|_2^{2}} s^(t)=1mMargminr(t)sm(t)22

2FSK在AWGN信道下的相干解调理论误比特率:

P b , A W G N = Q ( E b N 0 ) P_{b,AWGN}=Q(\sqrt{\frac{\mathcal{E}_b}{N_0}}) Pb,AWGN=Q(N0Eb )

2FSK在瑞利衰落信道下的相干解调理论误比特率:

γ ˉ b = E b N 0 E ( h 2 ) \bar{\gamma}_{b}=\frac{\mathcal{E}_{b}}{N_{0}} E\left(h^{2}\right) γˉb=N0EbE(h2)
P b = 1 2 ( 1 − γ ˉ b 2 + γ ˉ b ) P_{b}=\frac{1}{2}(1-\sqrt{\frac{\bar{\gamma}_{b}}{2+\bar{\gamma}_{b}}}) Pb=21(12+γˉbγˉb )

非相干调制与解调

非相干调制:

r ( t ) = h ⋅ s ( t ) + n ( t ) = ∣ h ∣ e j ϕ ⋅ s ( t ) r(t)=h\cdot s(t)+n(t)=|h|e^{j\phi}\cdot s(t) r(t)=hs(t)+n(t)=hejϕs(t)

其中 ϕ \phi ϕ服从在[0,2π]上的均匀分布。

非相干解调:

s ^ ( t ) = arg ⁡ max ⁡ 1 ≤ m ≤ M ∣ r ( t ) ⋅ s m ( t ) ∣ \hat{s}(t)=\underset{1 \leq m \leq M}{\arg \max}{|r(t)\cdot s_m(t)|} s^(t)=1mMargmaxr(t)sm(t)

2FSK在AWGN信道下的非相干解调理论误比特率:

P b , A W G N = 1 2 e − E b 2 N 0 P_{b,AWGN}=\frac{1}{2}e^{-\frac{\mathcal{E}_{b}}{2N_0}} Pb,AWGN=21e2N0Eb

BPSK在瑞利衰落信道下的非相干解调理论误比特率:

γ ˉ b = E b N 0 E ( h 2 ) \bar{\gamma}_{b}=\frac{\mathcal{E}_{b}}{N_{0}} E\left(h^{2}\right) γˉb=N0EbE(h2)
P b = 1 2 + γ ˉ b P_{b}=\frac{1}{2+\bar{\gamma}_{b}} Pb=2+γˉb1

仿真结果
2FSK在瑞利衰落信道下的相干与非相干解调误码率-MATLAB基带仿真_第1张图片

MATLAB基带仿真程序

clc
clear
close all
% Title: 2FSK的在瑞利衰落信道下的相干与非相干检测误码率仿真 %
% Data:  2020.05.04 %
% Author: K.X.Song

L = 10000000;                % 蒙特卡洛仿真次数
data = round(rand(1,L));    % 生成长度为L的仿真数据
send = zeros(2,L);        % 预置调制后的发送数据,每列为一个符号,行表示M维信号。

% 2FSK调制
for q = 1:L
    if (data(q) == 1)
        send(1,q) = 1;
    else
        send(2,q) = 1;
    end
end
h = (randn(2,L)+1j*randn(2,L))/sqrt(2);         % 瑞利衰落信道系数

% 设置信噪比
EbN0_dB = 0:2:50;
EbN0 = 10.^(EbN0_dB/10);
Eb = 1;                 % 2FSK的每比特能量
N0 = Eb ./ EbN0;
error_coherent = zeros(1,length(EbN0_dB));
error_noncoherent = zeros(1,length(EbN0_dB));
ser_coherent = zeros(1,length(EbN0_dB));
ser_noncoherent = zeros(1,length(EbN0_dB));
tser_coherent_AWGN = zeros(1,length(EbN0_dB));
tser_coherent_fading = zeros(1,length(EbN0_dB));
tser_noncoherent_AWGN = zeros(1,length(EbN0_dB));
tser_noncoherent_fading = zeros(1,length(EbN0_dB));
for q = 1:length(EbN0_dB)
    detect_coherent = zeros(1,L);
    detect_noncoherent = zeros(1,L);
    noise_coherent = sqrt(N0(q)/2) * randn(2,L);                                % 相干调制噪声
    noise_noncoherent = (sqrt(N0(q)/2) + 1j * sqrt(N0(q)/2)) * randn(2,L);      % 非相干调制噪声
    receive_coherent = abs(h).*send + noise_coherent;                           % 瑞利衰落信道相干调制
    receive_noncoherent = h.*send + noise_noncoherent;                          % 瑞利衰落信道相干调制
    % 相干解调
    for w = 1:L
        if (receive_coherent(1,w) > receive_coherent(2,w))
            detect_coherent(w) = 1;                                 % argmin判决,相干解调
        end
        % 统计错误数
        if (detect_coherent(w) ~= data(w))
            error_coherent(q) = error_coherent(q) + 1;
        end
    end
    % 非相干解调
    for w = 1:L
        r_1 = abs(dot(receive_noncoherent(:,w),[1;0]));
        r_2 = abs(dot(receive_noncoherent(:,w),[0;1]));
        if (r_1 > r_2)
            detect_noncoherent(w) = 1;                                 % argmin判决,相干解调
        end
        % 统计错误数
        if (detect_noncoherent(w) ~= data(w))
            error_noncoherent(q) = error_noncoherent(q) + 1;
        end
    end
    ser_coherent(q) = error_coherent(q) / L;
    ser_noncoherent(q) = error_noncoherent(q) / L;
    % 2FSK在AWGN信道下相干解调理论误码率
    tser_coherent_AWGN(q) = qfunc(sqrt(EbN0(q)));
    % 2FSK在瑞利衰落信道下相干解调理论误码率
    tser_coherent_fading(q) = 1/2*(1-sqrt(EbN0(q)/(2+EbN0(q))));
    % 2FSK在AWGN信道下非相干解调理论误码率
    tser_noncoherent_AWGN(q) = 1/2*exp(-EbN0(q)/2);
    % 2FSK在瑞利衰落信道下相干解调理论误码率
    tser_noncoherent_fading(q) = 1/(2+EbN0(q));
end

% 画图
semilogy(EbN0_dB,ser_coherent,'o',EbN0_dB,ser_noncoherent,'o',EbN0_dB,tser_coherent_AWGN,'b',EbN0_dB,tser_noncoherent_AWGN,'m',EbN0_dB,tser_coherent_fading,'r',EbN0_dB,tser_noncoherent_fading,'k');
grid on;
xlabel('Eb/N0 (dB)');
ylabel('SER');
legend('2FSK在瑞利衰落信道下的相干检测仿真误码率','2FSK在瑞利衰落信道下的非相干检测仿真误码率','2FSK在AWGN信道下的相干检测理论误码率',...
       '2FSK在AWGN信道下的非相干检测理论误码率','2FSK在瑞利衰落信道下的相干检测理论误码率','2FSK在瑞利衰落信道下的非相干检测理论误码率');
axis([0 50 10^-5 10^-1]);

你可能感兴趣的:(2FSK在瑞利衰落信道下的相干与非相干解调误码率-MATLAB基带仿真)