1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJybmZlv
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
基于索引调制的OFDM(OFDM-IM,OFDM with Index Modulation)技术被提出,在频率选择性衰落信道上提升了系统的分集增益,特别是在较低频谱效率场景下能够有效降低系统的误比特率。在OFDM-IM方法中,特殊的索引信息传输方式以及索引结构的设计对分集增益的提高,引发了广泛的关注。
4.部分源码
.....................................................................
for ij = 1:length(SNRs)
error0 = zeros(1,iter);
for ij2 = 1:iter
[ij,ij2]% 生成随机比特序列
bit1 = randi([0 1],1,(p1+p2)*N_frames);
bit2 = reshape(bit1.',p1+p2,N_frames).';
info_bit = bit2(:,p1+1:end);
sym = [];
x = 1;
for i=1:K% 解调信息比特
y=bps*i;
info_bit_temp = info_bit(:,x:y);
x = y+1;
info_dec_temp = bi2de(info_bit_temp);
info_dec_mod = pskmod(info_dec_temp,M,pi./M,'gray');
sym(:,i) = info_dec_mod;
end
index_bit = bit2(:,1:p1);
index_sym = func_Bin2Dec(index_bit);
sym_norm = sym.*(1./abs(sym));
sym_tx = sym_norm.*sqrt(PW_subcarrier);
tx_sym1 = zeros(N,N_frames);
for kk = 1:N_frames % 将数据符号映射到传输符号
kk_index = index_sym(kk)+1;
indices = index_all(kk_index,:)+1;
tx_sym1(indices,kk) = sym_tx(kk,:);
end
tx_sym=zeros(size(tx_sym1));
for k=1:N_frames
tx_sym(:,k)=sc*tx_sym1(:,k);
end
eps = 1./(1+mmse*SNRs2(ij));
h = 1/sqrt(2)*(randn(size(tx_sym))+1i*randn(size(tx_sym)))*sqrt(1-eps);
y = awgn(h.*tx_sym,SNRs(ij),'measured');
SNR_sqrt = sqrt(SNRs2(ij));
%OFDM检测
sym_detect = zeros(1,N_frames);
bit_detect = zeros(N_frames,K);
ref_detect = zeros(N_frames,K);
for jj=1:N_frames
%% ML检测
[BB,MM] = func_ML_Spread_IM(SNR_sqrt,M,K,p1,PW_subcarrier,index_all,y,h,N,jj,sc,Ref_ML_sym0,Ref_ML_sym);
sym_detect(jj) = BB-1;
ref_detect(jj,:) = MM;
end
index_bit_de = func_dec2bin(sym_detect,p1);
index_bit_err= sum(sum(index_bit~=index_bit_de));
info_de_re = pskdemod(ref_detect,M,pi./M,'gray');
info_bit_re = zeros(N_frames,K*bps);
for kk=1:K
info_bit_re(:,(kk-1)*bps+1:kk*bps)=de2bi(info_de_re(:,kk),bps);
end
info_bit_err=sum(sum(info_bit~=info_bit_re));
error0(ij2)=(info_bit_err+index_bit_err)./((p1+p2)*N_frames);
end
BER0(ij)= sum(error0)./iter;
end
% 绘制误码率曲线
figure
semilogy(SNRs,BER0,'-bs',...
'LineWidth',1,...
'MarkerSize',6,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[0.9,0.0,0.0]);
grid on
xlabel('SNR')
ylabel('ber')
0X_019m
---