你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

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

2021/12/25 2:40:55

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

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=0∑N−1​Q(i)p(z∣ai)
所以根据互信息的定义公式可以被写成下列的形式,并简化
∑ 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=0∑N−1​Q(k)∫−∞∞​p(z∣ak)log2​{∑i=0N−1​Q(i)p(z∣ai)p(z∣ak)​}dz=k=0∑N−1​Q(k)∫−∞∞​p(z∣ak){log2​p(z∣ak)−log2​[i=0∑N−1​Q(i)p(z∣ai))]}dz=k=0∑N−1​Q(k)∫−∞∞​p(z∣ak){log2​p(z∣ak)−log2​p(z)}dz=k=0∑N−1​∫−∞∞​Q(k)p(z∣ak)log2​p(z∣ak)dz−k=0∑N−1​∫−∞∞​Q(k)p(z∣ak)log2​p(z)dz=k=0∑N−1​∫−∞∞​Q(k)p(z∣ak)log2​p(z∣ak)dz−∫−∞∞​p(z)log2​p(z)dz​
其中, Q ( k ) p ( z ∣ a k ) Q(k)p(z|a^k) Q(k)p(z∣ak)可以看做是联合分布,所以我们有
∑ 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=0∑N−1​∫−∞∞​Q(k)p(z∣ak)log2​p(z∣ak)dz−∫−∞∞​p(z)log2​p(z)dz=h(Z)−h(Z∣A)=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(N−1)max​I(Z;A)=Q(0)…Q(N−1)max​k=0∑N−1​Q(k)∫−∞∞​p(z∣ak)log2​{∑i=0N−1​Q(i)p(z∣ai)p(z∣ak)​}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=0∑N−1​N1​∫−∞∞​p(z∣ak)log2​{∑i=0N−1​N1​p(z∣ai)p(z∣ak)​}dz=k=0∑N−1​N1​∫−∞∞​p(z∣ak){−log2​[i=0∑N−1​N1​p(z∣ak)p(z∣ai)​]}dz=k=0∑N−1​N1​∫−∞∞​p(z∣ak){log2​(N)−log2​p(z∣ak)∑i=0N−1​p(z∣ai)​}dz=log2​(N)k=0∑N−1​∫−∞∞​N1​p(z∣ak)dz−N1​k=0∑N−1​∫−∞∞​p(z∣ak)log2​p(z∣ak)∑i=0N−1​p(z∣ai)​dz=log2​(N)−N1​k=0∑N−1​∫−∞∞​p(z∣ak)log2​i=0∑N−1​p(z∣ak)p(z∣ai)​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(z∣ak)=exp[−∣z−ak∣/2σ2]⋅{​(2πσ2)−1/2one−dimension(2πσ2)−1two−dimension​

将公式(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)−N1​k=0∑N−1​∫−∞∞​p(z∣ak)log2​i=0∑N−1​p(z∣ak)p(z∣ai)​dz=log2​(N)−N1​k=0∑N−1​E{log2​i=0∑N−1​p(z∣ak)p(z∣ai)​}=log2​(N)−N1​k=0∑N−1​E{log2​i=0∑N−1​exp[2σ2−∣z−ai∣2+∣z−ak∣2​]}=log2​(N)−N1​k=0∑N−1​E{log2​i=0∑N−1​exp[2σ2−∣ak+w−ai∣2+∣w∣2​]}​
当 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} p0​⋯pM−1​. 接收到的symbol s s s在星座图上,存在两种形式. 它存在于最外层的两个星座点,或者属于内部的 M − 2 M-2 M−2个星座点. 假设 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′)=M2​Pr(d<2D​)+MM−2​[Pr(d<−2D​)+Pr(d>2D​)]=M2​Pr(N0​/2 ​d​<2N0​/2 ​D​)+M2(M−2)​Pr(N0​/2 ​d​<2N0​/2 ​D​)=M2(M−1)​Q(2N0​D​ ​)​
我们又有关于 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​​=(M2−1)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(M−1)​Q(M2−13SNR​ ​)​

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

6. 总结

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