Matlab复现Ungerboeck的TCM经典论文(一)部分公式推导以及M-PAM在AWGN下的信道容量仿真

该博客介绍了如何使用MATLAB复现UNGERBOECK关于多电平/相位信号信道编码的论文,重点解析了信道容量公式及其在均匀概率分布下的特殊情况。通过蒙特卡洛方法仿真M-PAM在高斯白噪声信道下的信道容量,并给出了误码率公式和Gap。文章提供了MATLAB代码示例,展示了不同M值下的信道容量曲线。
摘要由CSDN通过智能技术生成

1.简介

本文主要针对的UNGERBOECK的论文是Channel Coding with Multilevel/Phase Signals ,对于其中的部分公式和部分结果进行了matlab仿真,最近比较忙,博客写的比较潦草,工作量不多,就当辅助理解,抛砖引玉了。

2. 信道容量公式

论文中的公式 (3),是互信息的变形公式,信息论中的互信息, I ( X ; Y ) I(X;Y) I(X;Y),其中 X X X Y Y Y均可以是离散和连续的,在本篇论文中,输入 a a a是离散的,输出 z z z是连续的。

p ( z ) = ∑ i = 0 N − 1 Q ( i ) p ( z ∣ a i ) p(z) = \sum_{i=0}^{N-1}Q(i)p(z|a^i) p(z)=i=0N1Q(i)p(zai)
所以根据互信息的定义公式可以被写成下列的形式,并简化
∑ k = 0 N − 1 Q ( k ) ∫ − ∞ ∞ p ( z ∣ a k ) log ⁡ 2 { p ( z ∣ a k ) ∑ i = 0 N − 1 Q ( i ) p ( z ∣ a i ) } d z = ∑ k = 0 N − 1 Q ( k ) ∫ − ∞ ∞ p ( z ∣ a k ) { log ⁡ 2 p ( z ∣ a k ) − log ⁡ 2 [ ∑ i = 0 N − 1 Q ( i ) p ( z ∣ a i ) ) ] } d z = ∑ k = 0 N − 1 Q ( k ) ∫ − ∞ ∞ p ( z ∣ a k ) { log ⁡ 2 p ( z ∣ a k ) − log ⁡ 2 p ( z ) } d z = ∑ k = 0 N − 1 ∫ − ∞ ∞ Q ( k ) p ( z ∣ a k ) log ⁡ 2 p ( z ∣ a k ) d z − ∑ k = 0 N − 1 ∫ − ∞ ∞ Q ( k ) p ( z ∣ a k ) log ⁡ 2 p ( z ) d z = ∑ k = 0 N − 1 ∫ − ∞ ∞ Q ( k ) p ( z ∣ a k ) log ⁡ 2 p ( z ∣ a k ) d z − ∫ − ∞ ∞ p ( z ) log ⁡ 2 p ( z ) d z \begin{aligned} &\sum_{k=0}^{N-1}Q(k)\int_{-\infty}^{\infty}p(z|a^k)\log_2\left\{ \frac{p(z|a^k)}{\sum_{i=0}^{N-1}Q(i)p(z|a^i)} \right\} dz \\ &=\sum_{k=0}^{N-1}Q(k)\int_{-\infty}^{\infty}p(z|a^k)\left\{ \log_2 p(z|a^k)-\log_2 \left[ \sum_{i=0}^{N-1}Q(i)p(z|a^i))\right] \right\} dz \\ &=\sum_{k=0}^{N-1}Q(k)\int_{-\infty}^{\infty}p(z|a^k)\left\{ \log_2 p(z|a^k)-\log_2 p(z) \right\} dz \\ &=\sum_{k=0}^{N-1}\int_{-\infty}^{\infty}Q(k)p(z|a^k)\log_2 p(z|a^k)dz -\sum_{k=0}^{N-1}\int_{-\infty}^{\infty}Q(k)p(z|a^k)\log_2 p(z)dz \\ &=\sum_{k=0}^{N-1}\int_{-\infty}^{\infty}Q(k)p(z|a^k)\log_2 p(z|a^k)dz -\int_{-\infty}^{\infty}p(z)\log_2 p(z)dz \end{aligned} k=0N1Q(k)p(zak)log2{i=0N1Q(i)p(zai)p(zak)}dz=k=0N1Q(k)p(zak){log2p(zak)log2[i=0N1Q(i)p(zai))]}dz=k=0N1Q(k)p(zak){log2p(zak)log2p(z)}dz=k=0N1Q(k)p(zak)log2p(zak)dzk=0N1Q(k)p(zak)log2p(z)dz=k=0N1Q(k)p(zak)log2p(zak)dzp(z)log2p(z)dz
其中, Q ( k ) p ( z ∣ a k ) Q(k)p(z|a^k) Q(k)p(zak)可以看做是联合分布,所以我们有
∑ k = 0 N − 1 ∫ − ∞ ∞ Q ( k ) p ( z ∣ a k ) log ⁡ 2 p ( z ∣ a k ) d z − ∫ − ∞ ∞ p ( z ) log ⁡ 2 p ( z ) d z = h ( Z ) − h ( Z ∣ A ) = I ( Z ; A ) \begin{aligned} &\sum_{k=0}^{N-1}\int_{-\infty}^{\infty}Q(k)p(z|a^k)\log_2 p(z|a^k)dz -\int_{-\infty}^{\infty}p(z)\log_2 p(z)dz \\ & = h(Z)- h(Z|A)\\ &= I(Z;A) \end{aligned} k=0N1Q(k)p(zak)log2p(zak)dzp(z)log2p(z)dz=h(Z)h(ZA)=I(Z;A)
因此我们可计算信道容量,和论文的公式 (3)一致
C = max ⁡ Q ( 0 ) … Q ( N − 1 ) I ( Z ; A ) = max ⁡ Q ( 0 ) … Q ( N − 1 ) ∑ k = 0 N − 1 Q ( k ) ∫ − ∞ ∞ p ( z ∣ a k ) log ⁡ 2 { p ( z ∣ a k ) ∑ i = 0 N − 1 Q ( i ) p ( z ∣ a i ) } d z \begin{aligned} C &= \max \limits_{Q(0)\dots Q(N-1)}I(Z;A) \\ &=\max \limits_{Q(0)\dots Q(N-1)} \sum_{k=0}^{N-1}Q(k)\int_{-\infty}^{\infty}p(z|a^k)\log_2\left\{ \frac{p(z|a^k)}{\sum_{i=0}^{N-1}Q(i)p(z|a^i)} \right\} dz \end{aligned} C=Q(0)Q(N1)maxI(Z;A)=Q(0)Q(N1)maxk=0N1Q(k)p(zak)log2{i=0N1Q(i)p(zai)p(zak)}dz

3. Q ( k ) = 1 N Q(k)= \frac{1}{N} Q(k)=N1下的信道容量公式

接下来是公式(5)的推导
C Q ( k ) = 1 / N ∗ = ∑ k = 0 N − 1 1 N ∫ − ∞ ∞ p ( z ∣ a k ) log ⁡ 2 { p ( z ∣ a k ) ∑ i = 0 N − 1 1 N p ( z ∣ a i ) } d z = ∑ k = 0 N − 1 1 N ∫ − ∞ ∞ p ( z ∣ a k ) { − log ⁡ 2 [ ∑ i = 0 N − 1 1 N p ( z ∣ a i ) p ( z ∣ a k ) ] } d z = ∑ k = 0 N − 1 1 N ∫ − ∞ ∞ p ( z ∣ a k ) { log ⁡ 2 ( N ) − log ⁡ 2 ∑ i = 0 N − 1 p ( z ∣ a i ) p ( z ∣ a k ) } d z = log ⁡ 2 ( N ) ∑ k = 0 N − 1 ∫ − ∞ ∞ 1 N p ( z ∣ a k ) d z − 1 N ∑ k = 0 N − 1 ∫ − ∞ ∞ p ( z ∣ a k ) log ⁡ 2 ∑ i = 0 N − 1 p ( z ∣ a i ) p ( z ∣ a k ) d z = log ⁡ 2 ( N ) − 1 N ∑ k = 0 N − 1 ∫ − ∞ ∞ p ( z ∣ a k ) log ⁡ 2 ∑ i = 0 N − 1 p ( z ∣ a i ) p ( z ∣ a k ) d z \begin{aligned} C_{Q(k)=1/N}^{*} &= \sum_{k=0}^{N-1}\frac{1}{N}\int_{-\infty}^{\infty}p(z|a^k)\log_2\left\{ \frac{p(z|a^k)}{\sum_{i=0}^{N-1}\frac{1}{N}p(z|a^i)} \right\} dz\\ &= \sum_{k=0}^{N-1}\frac{1}{N}\int_{-\infty}^{\infty}p(z|a^k)\left\{ -\log_2\left[ \sum_{i=0}^{N-1}\frac{1}{N}\frac{p(z|a^i)}{p(z|a^k)} \right]\right\} dz \\ &=\sum_{k=0}^{N-1}\frac{1}{N}\int_{-\infty}^{\infty}p(z|a^k)\left\{ \log_2 (N) - \log_2 \frac{\sum_{i=0}^{N-1}p(z|a^i)}{p(z|a^k)} \right\} dz \\ &=\log_2(N)\sum_{k=0}^{N-1}\int_{-\infty}^{\infty}\frac{1}{N}p(z|a^k)dz - \frac{1}{N}\sum_{k=0}^{N-1}\int_{-\infty}^{\infty}p(z|a^k)\log_2\frac{\sum_{i=0}^{N-1}p(z|a^i)}{p(z|a^k)}dz \\ &=\log_2(N) - \frac{1}{N}\sum_{k=0}^{N-1}\int_{-\infty}^{\infty}p(z|a^k)\log_2\sum_{i=0}^{N-1}\frac{p(z|a^i)}{p(z|a^k)}dz \end{aligned} CQ(k)=1/N=k=0N1N1p(zak)log2{i=0N1N1p(zai)p(zak)}dz=k=0N1N1p(zak){log2[i=0N1N1p(zak)p(zai)]}dz=k=0N1N1p(zak){log2(N)log2p(zak)i=0N1p(zai)}dz=log2(N)k=0N1N1p(zak)dzN1k=0N1p(zak)log2p(zak)i=0N1p(zai)dz=log2(N)N1k=0N1p(zak)log2i=0N1p(zak)p(zai)dz
论文中的公式(4)如下
p ( z ∣ a k ) = e x p [ − ∣ z − a k ∣ / 2 σ 2 ] ⋅ { ( 2 π σ 2 ) − 1 / 2 o n e − d i m e n s i o n ( 2 π σ 2 ) − 1 t w o − d i m e n s i o n p(z|a^k) = \mathrm{exp}[-|z-a^k|/2\sigma^2]\cdot\left\{\begin{aligned} &(2\pi\sigma^2)^{-1/2}\qquad one-dimension \\ &(2\pi\sigma^2)^{-1 } \qquad two-dimension\\ \end{aligned} \right. p(zak)=exp[zak/2σ2]{(2πσ2)1/2onedimension(2πσ2)1twodimension

将公式(4)代入,并且我们采用蒙特卡洛法进行模拟计算
log ⁡ 2 ( N ) − 1 N ∑ k = 0 N − 1 ∫ − ∞ ∞ p ( z ∣ a k ) log ⁡ 2 ∑ i = 0 N − 1 p ( z ∣ a i ) p ( z ∣ a k ) d z = log ⁡ 2 ( N ) − 1 N ∑ k = 0 N − 1 E { log ⁡ 2 ∑ i = 0 N − 1 p ( z ∣ a i ) p ( z ∣ a k ) } = log ⁡ 2 ( N ) − 1 N ∑ k = 0 N − 1 E { log ⁡ 2 ∑ i = 0 N − 1 e x p [ − ∣ z − a i ∣ 2 + ∣ z − a k ∣ 2 2 σ 2 ] } = log ⁡ 2 ( N ) − 1 N ∑ k = 0 N − 1 E { log ⁡ 2 ∑ i = 0 N − 1 e x p [ − ∣ a k + w − a i ∣ 2 + ∣ w ∣ 2 2 σ 2 ] } \begin{aligned} &\log_2(N) - \frac{1}{N}\sum_{k=0}^{N-1}\int_{-\infty}^{\infty}p(z|a^k)\log_2\sum_{i=0}^{N-1}\frac{p(z|a^i)}{p(z|a^k)}dz \\ &=\log_2(N) - \frac{1}{N}\sum_{k=0}^{N-1}E\left\{ \log_2\sum_{i=0}^{N-1}\frac{p(z|a^i)}{p(z|a^k)}\right\}\\ &=\log_2(N) - \frac{1}{N}\sum_{k=0}^{N-1}E\left\{\log_2\sum_{i=0}^{N-1} \mathrm{exp}\left[ \frac{-|z-a^i|^2+|z-a^k|^2}{2\sigma^2} \right] \right\} \\ &=\log_2(N) - \frac{1}{N}\sum_{k=0}^{N-1}E\left\{\log_2\sum_{i=0}^{N-1} \mathrm{exp}\left[ \frac{-|a^k+w-a^i|^2+|w|^2}{2\sigma^2} \right] \right\} \end{aligned} log2(N)N1k=0N1p(zak)log2i=0N1p(zak)p(zai)dz=log2(N)N1k=0N1E{log2i=0N1p(zak)p(zai)}=log2(N)N1k=0N1E{log2i=0N1exp[2σ2zai2+zak2]}=log2(N)N1k=0N1E{log2i=0N1exp[2σ2ak+wai2+w2]}
k k k确定时,其中 z = a k + w z = a^k +w z=ak+w

4. 使用蒙特卡洛法仿真M-PAM在AWGN下的信道容量

直接贴matlab代码了,这个就是论文中的Fig.2

clear
clc

% M-PAM
m_arr = [2,4,8,16,32,64];

%SNR
snr_dB=[-15:0.5:50];

%capacity for differenet SNR and M
c_plot = zeros(length(m_arr),length(snr_dB));

%iterations per M
iters=10; 

%symbols per iteration
sym_num=1000;


% for each M
for m_index = 1:length(m_arr)
    m = m_arr(m_index);
    m

    %assume E{|a|^2} =1
    d = sqrt(12/(m^2-1)); 
    constell = (1:m)*d;

    %generate constellation diagram
    constell = constell - mean(constell);
    %uniform distribution
    prop_constell=ones(1,length(constell)) * 1/ length(constell);
    power=sum(prop_constell.*constell.^2);  % =1
    for snr_index=1:length(snr_dB) 
        snr=10^(snr_dB(snr_index)/10); 
        %sigma of N
        sigma2=power/snr;  
        sigma=sqrt(sigma2);
        c_temp=zeros(1,iters);    
        for index_iters=1:iters
            %a before modualtion
            x=rand(1,sym_num);           
            pconstell=cumsum(prop_constell);
            a=zeros(1,sym_num);  
            a(x<=pconstell(1))=constell(1);     
            %  Modulation 
            for index_constell=2:length(constell)
                a(x>pconstell(index_constell-1)&x<=pconstell(index_constell))=constell(index_constell);    
            end           
            % Noise (0,sigma2)
            Noise=sigma*randn(1,sym_num); 
            % z
            z = a+Noise;
%             equation 5, the plot result is the same but slower while simulation
%             sum1=0;
%             for k =1:m
%                sum2=0;
%                for i = 1:m
%                    exp1 = exp(-(Noise).^2/(2*sigma2));
%                    inner = (Noise+constell(k)-constell(i));
%                    exp2 =exp((-(inner).^2)/(2*sigma2));
%                    sum2 = sum2+(exp2./exp1);
%                end
%                sum1 = sum1+ mean(log2(sum2));
%             end      
%             c_temp(index_iters)=log2(m) -(sum1/m);    
        
            %also equation 5 but much faster while simulation
            sum_tmp=0;
            for i = 1:m
                p1=exp(-(Noise).^2/(2*sigma2));
                p2 =exp(-(z-constell(i)).^2/(2*sigma2));
               sum_tmp = sum_tmp+ p2./p1;
            end
            c_temp(index_iters)=log2(m)-mean(log2(sum_tmp));         
        end  
        c(snr_index)=mean(c_temp);
    
    end
    %save the result
    c_plot(m_index,:) = c(:);
end

%ideal capacity
SNR = zeros(1,length(snr_dB));
targetC =zeros(1,length(snr_dB));

new_snr_dB=[-15:0.01:50];
for i =1:length(new_snr_dB)
    SNR(i) = 10^(new_snr_dB(i)/10);
    targetC(i) = 0.5*log2(1+SNR(i));
end

for i = 1:length(m_arr)
    plot(snr_dB,c_plot(i,:));
    hold on;
end
plot(new_snr_dB,targetC,'r');
grid on
legend(['Uniform ' num2str(m) '-constell']);
temp = c_plot(6,:);
xlabel('Signal to noise ratio [dB]');
ylabel('Capacity [b/dim]');
legend('2-PAM','4-PAM','8-PAM','16-PAM','32-PAM','64-PAM','1/2log2(1+SNR)')

画出来的图像应该如下所示
在这里插入图片描述

5. 误码率公式以及gap

在M-PAM的星座图中, 我们有 M M M个星座点 p 0 ⋯ p M − 1 p_0 \cdots p_{M-1} p0pM1. 接收到的symbol s s s在星座图上,存在两种形式. 它存在于最外层的两个星座点,或者属于内部的 M − 2 M-2 M2个星座点. 假设 d d d是symbol s s s距离它的正确点 p ′ p^{\prime} p 的距离。并且假设 D D D是星座点之间的距离。
P s = Pr ⁡ ( s ≠ p ′ ) = 2 M Pr ⁡ ( d < D 2 ) + M − 2 M [ Pr ⁡ ( d < − D 2 ) + Pr ⁡ ( d > D 2 ) ] = 2 M Pr ⁡ ( d N 0 / 2 < D 2 N 0 / 2 ) + 2 ( M − 2 ) M Pr ⁡ ( d N 0 / 2 < D 2 N 0 / 2 ) = 2 ( M − 1 ) M Q ( D 2 N 0 ) \begin{aligned} P_s &=\Pr(s \neq p^{\prime})\\ &=\frac{2}{M} \Pr(d < \frac{D}{2}) + \frac{M-2}{M}\left[ \Pr(d < -\frac{D}{2}) + \Pr(d>\frac{D}{2})\right]\\ &=\frac{2}{M}\Pr (\frac{d}{\sqrt{N_0/2}} <\frac{D}{2\sqrt{N_0/2}} )+\frac{2(M-2)}{M} \Pr( \frac{d}{\sqrt{N_0/2}} < \frac{D}{2\sqrt{N_0/2}})\\ &=\frac{2(M-1)}{M}Q(\sqrt{\frac{D}{2N_0}}) \end{aligned} Ps=Pr(s=p)=M2Pr(d<2D)+MM2[Pr(d<2D)+Pr(d>2D)]=M2Pr(N0/2 d<2N0/2 D)+M2(M2)Pr(N0/2 d<2N0/2 D)=M2(M1)Q(2N0D )
我们又有关于 S N R SNR SNR E S E_S ES的公式如下
S N R = E s N 0 / 2 E s = ( M 2 − 1 ) D / 12 \begin{aligned} SNR &=\frac{E_s}{N_0/2} \\ E_s &= (M^2-1)D/12 \end{aligned} SNREs=N0/2Es=(M21)D/12
所以误码率如下
P s = 2 ( M − 1 ) M Q ( 3 S N R M 2 − 1 ) \begin{aligned} P_s = \frac{2(M-1)}{M}Q(\sqrt{\frac{3SNR}{M^2-1}}) \end{aligned} Ps=M2(M1)Q(M213SNR )

由此,我们发现,在误码率 P e = 1 0 − 5 P_e = 10^{-5} Pe=105下,存在一个gap损失,如下图
在这里插入图片描述
我们接下来就需要TCM编码来缩小这一Gap的损失

6. 总结

这是在国外选修的第一门课的其中一次作业,所以代码注释是英语的,英文不好,见谅。马上圣诞节了,无心学习,所以写的很简略,见谅见谅。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值