基于Matlab的MIMO通信系统仿真(上)

本文介绍了基于Matlab的MIMO通信系统仿真的上篇,主要包括信源生成和信道编码。利用Matlab函数生成二进制信源,并详细展示了卷积码和咬尾卷积码的实现过程。
摘要由CSDN通过智能技术生成

引言:

近日,博主与队友共同完成了小学期作业——“基于Matlab的MIMO通信系统仿真”,收获良多,特将其记录下来,与诸位分享。此主题分为上下两部分,第一部分主要涉及系统架构,第二部分侧重程序优化。若能帮助读者一二,实属万幸。

PS:信源、信道编码译码、调制解调由队友独立完成,特此声明。

系统结构:





















1、产生信源

function bit_in=bit_source(len)
% source generation
% this program generate the information source
% input:len ->the length of binary source which will be generate
% output:bit_in ->the binary source(01010....)
%% begin
bit_in=randi([0 1],1,len);
end

2、信道编码

  • 卷积码
    function code= codec2( m )
    % input:m -> bit source
    % output:code 
    g0=[1 0 1 1 0 1 1 1 1];
    %g0=[1 1 1 1 0 1 1 0 1];
    g1=[1 1 0 1 1 0 0 1 1];
    %g1=[1 1 0 0 1 1 0 1 1]
    g2=[1 1 1 0 0 1 0 0 1];
    %g2=[1 0 0 1 0 0 1 1 1];
    m0=conv(m,g0);
    m1=conv(m,g1);
    m2=conv(m,g2);
    l=length(m0);
    for i=1:l;
        code([3*i-2])=rem(m0([i]),2);
        code([3*i-1])=rem(m1([i]),2);
        code([3*i])=rem(m2([i]),2);  
    end      
    end


  • 咬尾卷积码
    function code= TailBiting_codec(m)
    num=length(m);
    constLen=7;
    fprintf('信号长度%d\n',length(m));  
    %1/2咬尾卷积码:先输入尾部的码6比特,再输入正常码 
    c = [m(end-(constLen-2):end),m];  
    fprintf('补充尾部后信号长度%d\n',length(c));   
    %打孔器设计  
    %信号的长度必须是打孔向量长度的整数倍  
    %打孔长度本来为num/2*4 比特,但是由于信号多输入了6比特,会多产生12比特,所以打孔向量的长度为num/2*4 +12 
    %这12比特需要被被完全打掉  
    g = [1 0 1 1 0 1 1 ;1 1 1 1 0 0 1;1 1 1 0 1 0 1];  
    g =reshape(g,1,21);  
    for i = 1:(num/2)-1
        g = [g,1 1 1 0 1 1 1 1 1 1 1 0 0 0 1 1 0 0 1 1 1];  
    end  
    %前面补0是为了打孔时,将前面的尾部生成的比特打掉(尾部本来是应该放在初始状态中的)  
    g = [zeros(1,12),g];  
    fprintf('打孔器的长度为 %d\n',length(g))  
    % 卷积编码  
    trellis = poly2trellis([7],[133 171 165]);
    code= convenc(c, trellis);  
    fprintf('卷积编码输出长度为 %d\n',length(code))  
    end
3、调制(QPSK)
function QPSK = QPSK_F( m )
%UNTITLED 此处显示有关此函数的摘要
%   此处显示详细说明
num=length(m);
QPSK_in=-2*m+1;% 转换成双极性非归零码
QPSK_in_I=QPSK_in(1:2: (num-1)); 
QPSK_in_Q=QPSK_in(2:2:num); 
QPSK_IQ=[QPSK_in_I;QPSK_in_Q];
p=[1,1i];
QPSK=p*QPSK_IQ;
end

4、stbc编码

function send = stbc( qpsk )
% stbc encoding for sending signal
% this pr
  • 17
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值