首页 > 其他分享 >m基于matlab的信息传输系统包括卷积编码,QPSK调制解调以及维特比译码

m基于matlab的信息传输系统包括卷积编码,QPSK调制解调以及维特比译码

时间:2022-12-25 18:44:06浏览次数:45  
标签:Information QPSK 10 卷积 路径 译码 matlab 信号

1.算法概述

        信息传输系统主要包括信号发送,信号传输模块,信号接收模块,其中信号发送包括信号的产生,信源的编码,信号的调制等模块,信号传输模块。主要设计了一个简单的信息传输系统,系统包括卷积编码,QPSK调制,信道传输,QPSK解调以及维特比译码。我们首先对系统做了简单的介绍,然后正对每个模块进行详细的理论分析,并利用MATLAB进行仿真与分析。得到了系统的误码率曲线和眼图变化图。最后我们以发送一个图像为例,来检测系统的性能。 整个系统的结构如下所示:

 

 

 

 

       卷积编码的过程就是编码器状态沿着时间轴一级一级跳转的过程。维特比译码算法则是在网格图上搜索最可能的状态跳转路径的过程。维特比译码算法先读取t时刻的所有状态的幸存路径度量,再根据t+1时刻的输入,算出跳转路径的度量:根据这两类度量算出t+1时刻到状态S的所有路径的度量,比较选出一个具有较小路径度量的路径作为t+l时刻状态S的幸存路径。这样对每个状态都得到一个幸存路径,根据这些幸存路径和最终编码器所处的状态就可以得到编码器的状态转移路径即译码结果。维特比译码结果的可信度取决于幸存路径的深度和它的路径度量值。幸存路径越深、路径度量值越高,那么译出信息的可信度就越高。在译码过程中有些路径被抛弃了,有些路径被保留了下来。被以为是幸存路径的,也可能会在后面的搜索过程中被抛弃掉。这样随着搜索的深度不断加深,最终正确的路径将会被保留下来,所有的幸存路径都将收敛于一条路径。

 

       QPSK调制方法十分简单,调制器的基本工作过程是:输入的数字码序列经过数据预处理单元完成信号的信道编码,生成两路信号。这个序列再经过多级内插把序列采样速率提高到后面的复数乘法器的工作频率上,以便进行载频调制。使用多级内插滤波器的原因是可以通过调整内插因子,使系统支持的调制符号速率能在一定的范围内变化。

 

      QPSK接收机由一对共输入地相关器组成。这两个相关器分别提供本地产生地相干参考信号1(t)和2(t)。相关器接收信号x(t),相关器输出地x1和x2被用来与门限值0进行比较。如果x1>0,则判决同相信道地输出为符号1;如果x1<0 ,则判决同相信道的输出为符号0;类似地,如果正交通道也是如此判决输出。最后同相信道和正交信道输出这两个二进制数据序列被复加器合并,重新得到原始的二进制序列。

 

 

 

 

QPSK信号的表达式如式所示:

 

 

 

 

       其中T_s表示四进制符号的间隔,θ_i (i=1,2,3,4)为正弦载波的相位,有四种可能性信息。若θ_i=(i-1)*π/2,则θ_i为0,π/2,π,3π/2,此时初始相位为0的QPSK信号的矢量图如图(a)所示。

 

 

 

 

 

 

QPSK是目前最常用的一种卫星数字信号调制方式。

 

        优点:频谱利用率高、传输速率快、抗干扰能力强、频谱特性好等。

 

        在前面我们介绍了BPSK,它是用两个相位(0° 和 180°)来表示 0、1,而QPSK,我们可以将其看作是两个独立的BPSK,它是用四个相位(45°、135°、225°、315° )来表示数字信号(00、01、11、10)。

 

2.仿真效果预览

matlab2022a仿真

 

 

 

 

 

 

 

 

从误码率仿真结果可知,当SNR大于10db之后,误码率可以快速下降到10-3以下。

 

3.MATLAB部分代码预览

 

......................................
for i=1:Frame
        Information=(sign(randn(1,Number_symble))+1)/2;%产生随机信号作为测试信源       
        Information=[Information 0 0 0] ;              %为了满足仿真需要补三个0使其长度=length
        
        JuanJi_Information = JuanJi_Encode(Information,Length);  %卷积编码
         
        QPSKCode = QPSK_encode(JuanJi_Information, Length);      %QPSK调制
        
        a = 1:-0.1:0.1;
        p = 10*log10(a);
        
        error = zeros(10,10);
 
        for k = 1:length(p)
            Noise_add = wgn(1,2*Length,p(k));              
            Receive_information = QPSKCode + Noise_add; 
            
              DQPSKCode = QPSK_Decode(Receive_information, Length);         
              Decoder = Viterbi(DQPSKCode, Length);    
              
              error(i,k) = sum(abs(Decoder-Information));
        end
end
 
%眼图仿真
eyediagram(Information,2)
eyediagram(JuanJi_Information,2);
eyediagram(QPSKCode,2);
eyediagram(Receive_information,2);
eyediagram(DQPSKCode,2);
eyediagram(Decoder,2);
 
Number_error = zeros(1,10);
for i = 1:10
    for j = 1:100
        Number_error(i) = Number_error(i) + error(j,i);
    end
end
x = 1:10;
plot(x,Number_error./Number_symble,'r-*');
xlabel('Eb/N0')
ylabel('Pe')
grid on  
01-24M

 

  

 

标签:Information,QPSK,10,卷积,路径,译码,matlab,信号
From: https://www.cnblogs.com/51matlab/p/17004380.html

相关文章