• zht111
    了解作者
  • Java
    开发工具
  • 317KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 4
    下载次数
  • 2019-01-11 16:51
    上传日期
mimi-ofdm 系统的matlab实现,完整版程序,已经通过系统仿真,实验也是通过的
mimo-ofdm1.rar
  • MATLAB 通信系统建模与仿真(二版源码)
  • 6
  • M6_24.m
    153B
  • M6_23.m
    94B
  • M6_22.m
    131B
  • M6_14.m
    453B
  • cplxcomp.m
    352B
  • M6_6.m
    720B
  • M6_13.m
    454B
  • M6_4.m
    250B
  • M6_11.m
    206B
  • M6_12.m
    464B
  • M6_3.m
    685B
  • dir2par.m
    899B
  • M6_17.m
    516B
  • M6_27.m
    1.6KB
  • M6_20.m
    305B
  • M6_18.m
    375B
  • M6_26.m
    204B
  • M6_16.m
    221B
  • M6_25.m
    141B
  • M6_7.m
    616B
  • dir2cas.m
    741B
  • M6_19.m
    277B
  • M6_15.m
    390B
  • M6_5.m
    252B
  • 7
  • M7_15.slx
    17.7KB
  • M7_5.m
    144B
  • M7_16.slx
    14KB
  • gngauss.m
    486B
  • M7_1.m
    759B
  • apcm.m
    662B
  • M7_11.m
    646B
  • fftseq.m
    306B
  • M7_14.slx
    15.2KB
  • M7_16.m
    656B
  • M7_2.m
    1KB
  • M7_12.m
    262B
  • M7_9.m
    1.1KB
  • M7_6.m
    1.1KB
  • M7_7.m
    2KB
  • M7_4.m
    991B
  • M7_8.m
    1003B
  • M7_10.m
    265B
  • M7_13.m
    411B
  • M7_3.m
    788B
  • 9
  • Demodulator.m
    654B
  • ReceiverHD.m
    535B
  • VitDec.m
    1.7KB
  • SoftVitDec.m
    1.7KB
  • VitEnc.m
    262B
  • Modulator.m
    1.4KB
  • MIMO_OFDM.m
    7.4KB
  • PNGen.m
    370B
  • PacketBuilder.m
    720B
  • ReceiverSD.m
    567B
  • IS_95.m
    3.2KB
  • 1
  • M1_4.m
    3.2KB
  • 8
  • M8_8.m
    221B
  • M8_4.m
    984B
  • gngauss.m
    486B
  • li8_6_fun.m
    1.3KB
  • li8_5_fun.m
    1.1KB
  • M8_7.m
    143B
  • M8_1.m
    672B
  • fun1.m
    80B
  • M8_9.m
    262B
  • M8_10.m
    568B
  • M8_11.m
    531B
  • M8_3.m
    559B
  • M8_5.m
    695B
  • M8_6.m
    483B
  • M8_12.m
    741B
  • fun2.m
    50B
  • 4
  • li4_23fun.m
    1.9KB
  • M7_15.slx
    17.7KB
  • M4_8.m
    245B
  • M4_3.m
    611B
  • M7_16.slx
    14KB
  • M4_2.m
    770B
  • M4_24.slx
    14.8KB
  • li4_6fun.m
    134B
  • M4_10.m
    324B
  • M4_1.m
    797B
  • M4_10.mdl
    27.3KB
  • simsizes.m
    1.6KB
  • M4_22.slx
    12.7KB
  • M5_17.slx
    14.2KB
  • M4_23.slx
    13.4KB
  • M4_12.slx
    17.3KB
  • M4_24_1.slx
    14.8KB
  • M4_8.slx
    12.7KB
  • sfuntmpl.m
    2.1KB
  • M7_14.slx
    15.2KB
  • li4_25fun.m
    135B
内容介绍
>clear all; %变量 i=sqrt(-1); IFFT_b_l=512; %傅里叶变换抽样点数目 carr_c=100; %子载波数目 sb_p_c=66; %符号数/载波 cp_l=10; %循环前缀长度 M_p=4; b_p_s=log2(M_p); %位数/符号 O=[1 -2 -3;2+j 1+j 0;3+j 0 1+j;0 -3+j 2+j]; c_t=size(O,1); Nt=size(O,2); %发射天线数目 Nr=2; %接收天线数目 %发射机 disp('开始:'); n_X=1; for c_r=1:c_t for c_o=1:Nt n_X=max(n_X,abs(real(O(c_r,c_o)))); end end c_x=zeros(n_X,1); for con_r=1:c_t for con_c=1:Nt %用于确定矩阵“O”中元素的位置,符号以及共轭情况 if abs(real(O(con_r,con_c)))~=0 delta(con_r,abs(real(O(con_r,con_c))))=sign(real(O(con_r,con_c))); epsilon(con_r,abs(real(O(con_r,con_c))))=con_c; c_x(abs(real(O(con_r,con_c))),1)=c_x(abs(real(O(con_r,con_c))),1)+1; eta(abs(real(O(con_r,con_c))),c_x(abs(real(O(con_r,con_c))),1))=con_r; coj_m(con_r,abs(real(O(con_r,con_c))))=imag(O(con_r,con_c)); end end end eta=eta.'; eta=sort(eta); eta=eta.'; %坐标 (1 to 100)+14=14(15:114) carr=(1:carr_c)+(floor(IFFT_b_l/4)-floor(carr_c/2)); %坐标:256-(15:114)+1=257-(15:114)=(242:143) conj_c=IFFT_b_l-carr+2; tx_t_s=t_y(Nt,carr_c); base_o_l=carr_c*sb_p_c; snr_min=3; %最小信噪比 snr_max=15; %最大信噪比 g_i_b=zeros(snr_max-snr_min+1,2,Nr); %绘图信息存储矩阵 g_i_s=zeros(snr_max-snr_min+1,2,Nr); for SNR=snr_min:snr_max disp('等待SNR='); disp(snr_max); SNR n_e_s=zeros(1,Nr); n_e_b=zeros(1,Nr); p_s=zeros(1,Nr); p_b=zeros(1,Nr); r_m_s_b=zeros(carr_c,sb_p_c,Nr); r_m_b=zeros(base_o_l,b_p_s,Nr); %生成随机数用于仿真 base_o=round(rand(base_o_l,b_p_s)); %二进制向十进制转换 d_d=bi2de(base_o); %PSK调制 d_b=pskmod(d_d,M_p,0); carr_m=reshape(d_b,carr_c,sb_p_c); %取数为空时编码做准备,此处每次取每个载波上连续的两个数 for tt=1:Nt:sb_p_c data=[]; for ii=1:Nt tx_b_b=carr_m(:,tt+ii-1); data=[data;tx_b_b]; end XX=zeros(c_t*carr_c,Nt); for co_r=1:c_t %进行空时编码 for co_c=1:Nt if abs(real(O(co_r,co_c)))~=0 if imag(O(co_r,co_c))==0 XX((co_r-1)*carr_c+1:co_r*carr_c,co_c)=data((abs(real(O(co_r,co_c)))-1)*carr_c+1:abs(real(O(co_r,co_c)))*carr_c,1)*sign(real(O(co_r,co_c))); else XX((co_r-1)*carr_c+1:co_r*carr_c,co_c)=conj(data((abs(real(O(co_r,co_c)))-1)*carr_c+1:abs(real(O(co_r,co_c)))*carr_c,1))*sign(real(O(co_r,co_c))); end end end %空时编码结束 end XX=[tx_t_s;XX]; %添加训练序列 rx_b=zeros(1,add_l*(c_t+1),Nr); for rev=1:Nr for ii=1:Nt tx_b=reshape(XX(:,ii),carr_c,c_t+1); IFFT_t_b=zeros(IFFT_b_l,c_t+1); IFFT_t_b(care,:)=tx_b(1:carr_c,:); IFFT_t_b(conj_c,:)=conj(tx_b(1:carr_c,:)); t_mat=ifft(IFFT_t_b); t_max=[t_mat((IFFT_b_l-c_l+1):IFFT_b_l,:);t_mat]; tx=t_mat(:)'; %信道 tx_t=tx; d=[4 5 6 2;4 5 6 2;4 5 6 2;4 5 6 2]; a=[0.2 0.3 0.4 0.5;0.2 0.3 0.4 0.5;0.2 0.3 0.4 0.5;0.2 0.3 0.4 0.5]; for jj=1:size(d,2) copy=zeros(size(tx)); for kk=1+d(ii,jj):length(tx) copy(kk)=a(ii,jj)*tx(kk-d(ii,jj)); end tx_t=tx_t+copy; end tc=awgn(tx_t,SNR,'measured'); %添加高斯白噪声 rx_b(1,:,rev)=rx_b(1,:,rev)+tc; end %接收机 rx_s=reshape(rx_b(1,:,rev),add_l,c_t+1); rx_s=rx_s(c_l+1:add_l,:); FFT_t_b=zeros(IFFT_b_l,c_t+1); FFT_t_b=fft(rx_s); sp_mat=FFT_t_b(carr,:); Y_b=(sp_mat(:,2:c_t+1)); Y_b=conj(Y_b'); sp_mat=sp_mat(:,1); Wk=exp((-2*pi/car_c)*i); L=10; p=zeros(L*Nt,1); for jj=1:Nt for l=0:L-1 for kk=0:carr_c-1 p(1+(jj-1)*L+1,1)=p(1+(jj-1)*L+1,1)+sp_mat(kk+1,1)*conj(tx_t_s(kk+1,jj))*Wk^(-(kk*l)); end end end h=p/carr_c; H_B=zeros(carr_c,Nt); for ii=1:Nt for kk=0:carr_c-1 for l=0:L-1 H_b(kk+1,ii)=H_b(kk+1,ii)+h(l+(ii-1)*L+1,1)*Wk^(kk*l); end end end H_b=conj(H_b'); RRR=[]; for kk=1:carr_c Y=Yb(:,kk); H=H_b(:,kk); for c_ii=1:n_X for c_tt=1:size(eta,2) if eta(c_ii,c_tt)~=0 if coj_m(eta(c_ii,c_tt),c_ii)==0 r_til(eta(c_ii,c_tt),:,c_ii)=Y(eta(c_ii,c_tt),:); a_til(eta(c_ii,c_tt),:,c_ii)=conj(H(epsilon(eta(c_ii,c_tt),c_ii),:)); else r_til(eta(c_ii,c_tt),:,c_ii)=conj(Y(eta(c_ii,c_tt),:)); a_til(eta(c_ii,c_tt),:,c_ii)=H(epsilon(eta(c_ii,c_tt),c_ii),:); end end end end RR=zeros(n_X,1); for iii=1:n_X %接收数据的判断统计 for ttt=1:size(eta,2) if eta(iii,ttt)~=0 RR(iii,1)=RR(iii,1)+r_til(eta(iii,ttt),1,iii)*a+til(eta(iii,ttt),1,iii)*delta(eta(iii,ttt),iii); end end end RRR=[RRR;conj(RR')]; end r_s=pskdemod(RRR,m_PSK,0); r_m_s_b(:,tt:tt+Nt-1,rev)=r_s; end end r_m_s=zeros(base_o_l,1,Nr); for rev=1:Nr r_m_s_b=r_m_s_b(:,:,rev); r_m_s(:,1,rev)=r_m_s_b(:); r_m_b(:,:,rev)=de2bi(r_m_s(:,1,rev)); for c_d_ro=1:base_o_l if r_m_s(c_d_r,1,rev)~=d_data(c_d_r,1) n_e_s(1,rev)=n_e_s(1,rev)+1; for c_d_c=1:b_p_s if r_m_b(c_d_r,c_d_c,rev)~=base_o(c_d_r,c_d_c) n_e_b(1,rev)=n_e_b(1,rev)+1; end end end end %误码率计算 g_i_s(SNR-s_min+1,1,rev)=SNR; g_i_b(SNR-s_min+1,1,rev)=SNR; P_s(1,rev)=n_e_s(1,rev)/(base_o_l); g_i_s(SNR-s_s_min+1,2,rev)=P_s(1,rev); P_b(1,rev)=n_e_b(1,rev)/(base_o_l*b_p_s); g_i_b(SNR-s_min+1,2,rev)=P_b(1,rev); end end %性能仿真图 for rev=1:rev x_s=g_i_s(:,1,rev); y_s=g_i_s(:,2,rev); subplot(Nr,1,rev); semilogy(x_s,y_s,'b-*'); axis([2 16 0.0001 1]); xlabel('信噪比/dB'); ylabel('误码率'); grid on; end disp('结束')
评论
    相关推荐