【多载波系统】基于多载波系统分析等比合并EGC,最大比合并MRC,正交恢复合并ORC以及最小均方误差合并MMSE的matlab仿真

1.软件版本

MATLAB2019a

2.本算法理论知识

在传统的多址接入方式中,常用的技术是FDM,即频分多址技术。其主要功能就是将整个带宽分为多个频率互不重叠的子信道,然后单独对每个信号进行独立的调制。这种技术的特点是频率上的互不重叠从而防止了信道间干扰,但这降低了频谱利用率,浪费了大量的带宽资源。针对这个问题,为了提高频谱的利用率,可以考虑将频谱进行重叠,但是为了防止互相干扰,必须让每个子信道之间是正交的。从而发展处了OFDM技术,这就是多载波调制技术,即OFDM技术。

       在OFDM中,整个带宽被分为N个正交子载波,每一个子载波的数据传输波特率为1/Ts,此外,相邻两个子载波之间的中心频率间隔也为1/Ts,这就实现了子载波的正交性要求。同时,使用OFDM技术,其是将N个子载波进行同时传输,即并行传输的,这样就能降低每个子载波的传输速率。所以OFDM技术可以将高速率传输变为N个低速率传输。这样还大大降低了系统接收机的实现复杂性。此外,OFDM技术也是多载波CDMA技术的基础,因此,在这里首先介绍OFDM技术。

 

       OFDM技术在接收端进行和发送相反的操作,将接收到的OFDM信号通过FFT傅里叶变换将其变为为频域信号,子载波的幅度和相位被采集出来并转换回数字信号。完整的OFDM系统的物理结构框图如图2.2所示:

 

    多载波CDMA技术的发送和接收原理框图如下所示:

图2 多载波CDMA发送框图

图3 多载波CDMA接收框图

3.部分核心代码

function ber=MRC(snr)
Nt = 1;
Nr = 1;
p  = 1;
no_bit_sym  = 1;
no_it_x_SNR = 10000;
tot_err_m1  = 0;
 
    for i=1:no_it_x_SNR
        X=(2*round(rand(Nt,1))-1);
        H=Cor_H(Nr,Nt,p);
        sig=sqrt(0.5/(10^(snr/10)));
        n=sig*(randn(Nr,Nt)+j*randn(Nr,Nt));
        R=H*X+n;
        s0=0;
        for n=1:Nr
            s0=conj(H(n,1))*R(n,1)+s0;
        end
        if(real(s0)>0)
            decoded=1;
        else
            decoded=-1;
        end
         err_m1=sum(round(X')~=round(decoded));
         tot_err_m1=err_m1+tot_err_m1;
    end
ber=tot_err_m1/(no_it_x_SNR);
       

function ber = mc_cdma(snr,num_user,num_data)

N = 512;           % number of symbols in a single OFDM symbol
GI = 80;           % guard interval
Mt = 1;             % number of Tx antennas
Mr = 1;             % number of Rx antennas
M = 8;              % max constellation bit number
num_subc = 8;        % number of subcarriers

mod_level = 2;
spreadLength=8;

% snr=0;
en = 10^(snr/10);
sigma = 1/sqrt(2*en);



cSpread=[1 1 1 1 1 1 1 1;1 -1 1 -1 1 -1 1 -1;...
        1 1 -1 -1 1 1 -1 -1;1 -1 -1 1 1 -1 -1 1;...
        1 1 1 1 -1 -1 -1 -1;1 -1 1 -1 -1 1 -1 1;...
        1 1 -1 -1 -1 -1 1 1;1 -1 -1 1 -1 1 1 -1];





multipath = [sqrt(0.1897)  0  sqrt(0.3785) 0 0 sqrt(0.2388) 0 0 0  0 sqrt(0.0951) 0 0 0 0 sqrt(0.06) 0 0 0 0 0 0 sqrt(0.0379)]; %% power
multipath_channel0 = zeros(1,length(multipath));



signal_tx = zeros(num_data*spreadLength/N,N + GI);

for loop_user=1:num_user
    msg    = rand(num_data,1)>=0.5;
    code1  = [];
    trel   = poly2trellis(6,[53 75]);
    code1  = [code1 convenc(msg,trel)];
    code   = code1';

    if loop_user == 1
        msg_user1 = msg;
        code_user1 = code1;
    end

    num_data1   = 2*num_data;
    [iout,qout] = qpsk(code,1,num_data1,mod_level);
    inputData   = iout+i*qout;    %???
    [S]         = mc_spreading(inputData,1,num_data,cSpread(loop_user,:),spreadLength);

    for m=1:num_data*spreadLength/N
        ofdm_symbol((m-1)*(N+GI)+1:m*(N+GI)) = ifft_cp_tx_blk(S((m-1)*N+1:m*N),N,GI)*sqrt(N);
    end
    
    for p = 1:(num_data*spreadLength/N)  
        multipath_channel(p,:) = multipath.*(randn(1,length(multipath_channel0))+j*randn(1,length(multipath_channel0)))*sqrt(0.5);
        if loop_user==1
            multipath_channel_user1(p,:) = multipath_channel(p,:);
        end
        signal_tx_p         = filter(multipath_channel(p,:),[1],ofdm_symbol((N+GI)*(p-1)+1:(N+GI)*p));% passing through the multipath channel
        signal_tx_loop(p,:) = signal_tx_p;
    end
    signal_tx           = signal_tx + signal_tx_loop;
end

noise     = sigma*(randn(num_data*spreadLength/N,N+GI) + j*randn(num_data*spreadLength/N,N+GI));
signal_rx = signal_tx + noise; 

y2 = [];
for q =1:(num_data*spreadLength/N)
    rec_symbol   = [];
    rec_symbol   = [rec_symbol; fft_cp_rx_blk(signal_rx(q,:),N,GI)/sqrt(N)];
    rec_symbol2  = reshape(rec_symbol,Mt*N,1);
    h   = [multipath_channel_user1(q,:),zeros(1,N+GI-length(multipath))];
    Hf1 = fft(h,N);
    for n = 1:N/spreadLength
        y1=0;
        for m = 1:spreadLength
            y1 = y1 + cSpread(1,m)*conj(Hf1((n-1)*spreadLength+m))*rec_symbol2((n-1)*spreadLength+m);
        end
        temp(n) = y1;
    end
    y2 = [y2,temp];
end

y          =  reshape(y2,1,num_data);
idata      =  real(y);
qdata      =  imag(y);
y_demod    =  deqpsk(idata,qdata,1,num_data,mod_level);
y_demod    =  y_demod';
tblen      =  10;
decoded1   =  vitdec(y_demod,trel,tblen,'cont','hard');
[n1,r1]    =  biterr(decoded1(tblen+1:end),msg_user1(1:end-tblen,1));
ber        =  r1;

4.仿真结论

图.7 三种方式的误码率对比

    通过上面的讨论分析,这里采用MMSE方式作为单用户检测方式。由此说明,在相同SNR的条件下,MMSE具有较好的性能,因此,在进行单用户检测的时候,采用MMSE均衡算法。

5.参考文献

[1]Wenfeng Lin,Chen He.A low-complexity receiver for iterative parallel interference cancellation and decoding in MIMO–OFDM systems.AEU-International Journal of Electronics and Comm- unications, 2008,62(1,2):68-71.

[2]Merahi Bouziani,Ali Djebbari,Ahmed B.Djebbar,Mohammed F.Belbachir,Jean M.Rouvaen. MC-CDMA with exponential power profile in Nakagami fading channel.AEU-International Journal of Electronics and Communications,2005,59(6):359-361.

[3]Jinfang Zhang,Jon W.Mark,Xuemin(Sherman)Shen.An adaptive handoff priority scheme for wireless MC-CDMA cellular networks supporting real-time multimedia applications.Computer Communications,2005,28(10):1240-1250.

A01-34

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值