空时分组编码matlab,LTE概述-09-空时分组编码

ps:我还没看内容。

空时分组编码和空分复用是LTE里主要的两种传输方式。由于在LTE中频域分配资源,因此空时编码在LTE变形为空频编码,主要用于提高可靠性和覆盖范围;空分复用主要用于提高传输效率。具体原理相信书上都讲了不少,网上的程序很多,这里提供一个简单的验证过的空时分组编码的仿真程序供大家学习基本原理。同时提出一堆待解决的问题,希望谁能慷慨解决一下。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% CopyRight by flysmoke,

ltestudy.com, All Right Reserved

% Filename:

Alamouti_scheme_2x2.m

% Verision:

0.1

%

Description:

% --Space Time B Code

Simulation.

% Edit

History:

% --Create by

flysmoke---2013-09-01

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

close all;

clear all;

clc

%sim frame number and frame

bit length

L_frame=130;

N_frame=1e3;

%number of tx and rx antenna,

support MRC:1x1,1x2,1x4, and STBC: 2x1,2x2

NT=2; NR=2;

%modulation type, and

bitPerSym, only support bitPerSym=4

bitPerSym=4;

M=2^bitPerSym;

EbN0dBs=[0:2:20];

%constant to

cal

sq_NT=sqrt(NT);

sqb=sqrt(bitPerSym);

for

i_EbN0=1:length(EbN0dBs)

EbN0dB=EbN0dBs(i_EbN0);

sigma=sqrt(bitPerSym/2/(10^(EbN0dB/10)));

% simple H and

H =ones(NR,NT);

H_en = sum(sum(abs(H).^2));

numBitErr = 0;

for i_packet=1:N_frame

% Tx----

generate bits, modulation and STBC

msg_bits=randi([0 1],L_frame,bitPerSym*NT);

X =

[];

for

nT=1:NT

for

i=1:L_frame

X(nT,i) =

QAM16_mod(msg_bits(i,nT*bitPerSym+[-bitPerSym+1:0])');

end

end

X1=X;

if(NT==2)

X2=[-conj(X(2,:));

conj(X(1,:))];

end

% Channel

and Rx----

if(NT==2)

R1 = H*X1 +

sigma*(randn(NR,L_frame)+1i*randn(NR,L_frame));

R2 = H*X2 +

sigma*(randn(NR,L_frame)+1i*randn(NR,L_frame));

Z(1,:) = H(:,1)'*R1 +

H(:,2).'*conj(R2);

Z(2,:) = H(:,2)'*R1 -

H(:,1).'*conj(R2);

softbits0 =

QAM16_slicer_soft_ml(Z(1,:)./H_en);

softbits1 =

QAM16_slicer_soft_ml(Z(2,:)./H_en);

msg_hat_bits = [softbits0

softbits1]>0;

else

R1 = H*X1 +

sigma*(randn(NR,L_frame)+1i*randn(NR,L_frame));

Z = H'*R1;

softbits0 =

QAM16_slicer_soft_ml(Z./H_en);

msg_hat_bits = softbits0

>0;

end

numBitErr

= numBitErr + sum(sum(msg_bits~=msg_hat_bits));

if

numBitErr>10000,  break;

end

end % End of FOR loop for

i_packet

BER(i_EbN0) =

numBitErr/(i_packet*L_frame*bitPerSym*NT);

disp(strcat(num2str(EbN0dBs(i_EbN0)),',simPackNum=',num2str(i_packet),',

BER=',num2str(BER(i_EbN0))));

end  % End of FOR loop for i_EbN0

semilogy(EbN0dBs,BER,'r'),

axis([EbN0dBs([1 end]) 1e-6 1e0]);

grid on;

xlabel('EbN0[dB]'); ylabel('BER');

hold on

仿真结果如下:

a4c26d1e5885305701be709a3d33442f.png

有两个文件需要提供一下才能仿真,modulation 和

slice函数。这里将slice做成P文件了,原因是这个模块的实现可以琢磨琢磨。

为了让讨论积极些,这里先抛几块砖。

1.

信道的功率没有归一化,噪声的功率是否正确

2.

程序的信道相当的简单,如果是衰落信道,该程序是否适用

3.

软信息在这里基本无用,因为是硬判决,谁慷慨的补上viterbi或turbo功能

4.

软判决的程序缺少,谁慷慨的补一下,并且加上编解码后性能要能超越原程序

5.

目前是理想信道估计,实际信道估计的程序缺少。。。。。

6.

目前是支持1×1,1×2,1×4,2×2,谁慷慨的补上4×2等天线组合

7.

目前是支持QPSK,16QAM,谁慷慨的补上64QAM

8.

现有的程序架构并不是很好,谁慷慨的优化一下

9.

上面这些都有同学慷慨的做完后,我可以负责总结一下,再发一篇总结文章。呵呵

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值