您现在的位置:首页 >> 通信 >> 内容

m索引OFDM调制解调系统的性能仿真分析

时间:2022/12/14 20:20:39 点击:

  核心提示:01_172m,包括程序操作录像+word论文+参考文献...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/Y5qXm5xy

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览









3.算法概述

        OFDM-IM是一种多载波索引调制技术,其在信号的频域加入了子载波块的功能,将多个子载波组合成一个子载波块,一个子载波块作为一个调制单元。每次发送过程中,只选择子载波块中的一个或者部分子载波进行激活并发送信息,其功能类似于基于频域的空间索引调制随机数。OFDM-IM技术和传统的OFDM技术不同之处在于其在调制阶段,加入了索引调制步骤,根据索引调制比特信息,通过映射关系表,选择子载波进行激活并发送相应的比特数据,而未被选择的子载波则处于静默状态。这些索引调制比特数据同时补偿未被激活的静默子载波产生的频谱利用率低的问题。

4.部分源码

%子块

G         = 4;  %2个子载波作为一个块

Nlen      = 15000;%数据仿真长度

Ncp       = 8;%插入CP长度

Tdat0     = floor(rand(1,Nlen*Nsub)*2);

%产生索引比特

index     = floor(rand(1,Nlen*Nsub/2)*2);

Tdat      = reshape(Tdat0,[1,Nlen*Nsub]); 

%Modulate,下面几行都是调制

Dat_Qam   = reshape(Tdat,2,Nlen*Nsub/2).';

Dat_Qam2  = bi2de(Dat_Qam,2,'left-msb');

Mod_Table = [-1-i -1+i 1-i 1+i];%

SymQAM    = Mod_Table(Dat_Qam2+1);

XSymQAM   = conj([reshape(SymQAM,[G,length(SymQAM)/G])]');

Xindex    = [reshape(index,[G,length(SymQAM)/G])]';

X2        = zeros(size(Xindex,1),2*size(Xindex,2));

for jj=1:size(Xindex,1)

    %选择前面4个作为索引比特

    IMtable  = Xindex(jj,:);

    S        = XSymQAM(jj,:);

    for j = 1:length(S)

        if IMtable(j) == 1

           X2(jj,2*j-1) = S(j);

           X2(jj,2*j)   = 0;

        else

           X2(jj,2*j-1) = 0;

           X2(jj,2*j)   = S(j);

        end

    end

end

X3 = [reshape(conj(X2'),[1,size(X2,1)*size(X2,2)])];

%IFFT变换

dat_ifft0= ifft(X3); 

% %Add cyclic prefix,加入循环间隔

dat_ifft1_cp3= [dat_ifft0(1:Ncp),dat_ifft0];

%上变频

ff           = 5e7;

dat_ifft1_cp3        = dat_ifft1_cp3.*exp(sqrt(-1)*2*pi*ff*([1:length(dat_ifft1_cp3)]));

% Add the AWGN,加入高斯白噪声

%channel,定一个多径信道

H_channel2   = dat_ifft1_cp3;

Ch           = [1 1/16];

H_channel3   = filter(Ch,1,H_channel2);

snr           = SNR + 10*log10(log2(2));

dat_ifft1_cp3 = awgn(H_channel2,snr,'measured');

%下变频

dat_ifft1_cp3 = dat_ifft1_cp3.*exp(-sqrt(-1)*2*pi*ff*[1:length(dat_ifft1_cp3)]);

%remove,删除循环间隔

dat_ifft1_cp3(1:Ncp)=[];

dat_fft1  = fft(dat_ifft1_cp3); 

dat_fft1b = conj([reshape(dat_fft1,[2*G,length(dat_fft1)/G/2])]');

%提取索引位置和数据

IMdatas=[];

IMindxs=[];

for jj=1:size(Xindex,1)

    tmps   = dat_fft1b(jj,:);

    IMdata = [];

    IMindx = [];

    for j = 1:length(tmps)/2 

        data = tmps(2*j-1:2*j);

        if abs(data(1))>=abs(data(2))%01

           IMdata(j) = [data(1)];

           IMindx(j) = [1]; 

        end

        if abs(data(1))<=abs(data(2))%10

           IMdata(j) = [data(2)];

           IMindx(j) = [0]; 

        end

    end

     

    IMdatas(jj,:)=IMdata;

    IMindxs(jj,:)=IMindx;

end

%Tdat0     = floor(rand(1,Nlen*Nsub)*2);

IMdatas_rec = reshape(conj(IMdatas'),[1,size(IMdatas,1)*size(IMdatas,2)]);

datarec     = zeros(size(IMdatas_rec));

for ii = 1:length(IMdatas_rec)

    Real = real(IMdatas_rec(ii));

    Imag = imag(IMdatas_rec(ii));

    if Real>0 & Imag>0

       datarec(ii)=3; 

    end

    if Real>0 & Imag<=0

       datarec(ii)=2; 

    end

    if Real<=0 & Imag>0

       datarec(ii)=1; 

    end

    if Real<=0 & Imag<=0

       datarec(ii)=0; 

    end 

end

datarec=datarec';

%index     = floor(rand(1,Nlen*Nsub/2)*2);

index_rec = reshape(IMindxs',[1,size(IMindxs,1)*size(IMindxs,2)]);%解调出索引位置信息 

01_172m

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168