syee
Newbie level 3
Here is matlab code for mimo -odfm ( can someone help me to change this code to have index modulation or provide me with a code for Mimo-ofdm-Index modulation)
Code Matlab M - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 clear all close all clc nbits = 208000; modlevel = 2 ; nbitpersym = 52; % number of bits per qam OFDM symbol (same as the number of subcarriers for 16-qam) nsym = 10^4; % number of symbols len_fft = 64; % fft size sub_car = 52; % number of data subcarriers totalBits = 2*nbitpersym*nsym ; % total number of Data Bits bitsPerBranch = nbitpersym*nsym ; % total number of data Bits in each of the two branches EbNo = 0:2:15; EsNo= EbNo+10*log10(52/64)+ 10*log10(64/80) +10*log10(4); snr=EsNo - 10*log10((64/80)); M = modem.qammod('M',16); % modulation object % Generating data t_data=randint(2*nbitpersym*nsym*4,1,2); qamdata=bi2de(reshape(t_data,4,totalBits).','left-msb'); maping = bin2gray(qamdata,'qam',16); % modulating data mod_data =1/sqrt(10)* modulate(M,maping); ipMod1 = mod_data(1:bitsPerBranch); % 1st Branch Data ipMod2 = mod_data(bitsPerBranch+1:totalBits);% 2nd Branch Data % serial to parallel conversion %par_data = reshape(mod_data,nbitpersym,nsym).'; ipMod1 =reshape(ipMod1,nbitpersym,nsym).'; ipMod2 = reshape(ipMod2,nbitpersym,nsym).'; % pilot insertion %pilot_ins_data=[zeros(nsym,6) par_data(:,[1:nbitpersym/2]) zeros(nsym,1) par_data(:,[nbitpersym/2+1:nbitpersym]) zeros(nsym,5)] ; x1F =[zeros(nsym,6) ipMod1(:,[1:nbitpersym/2]) zeros(nsym,1) ipMod1(:,[nbitpersym/2+1:nbitpersym]) zeros(nsym,5)] ; x2F = [zeros(nsym,6) ipMod2(:,[1:nbitpersym/2]) zeros(nsym,1) ipMod2(:,[nbitpersym/2+1:nbitpersym]) zeros(nsym,5)] ; % fourier transform time doamain data IFFT_data = ifft(fftshift(x1F.')).'; a=max(max(abs(IFFT_data))); IFFT_data=IFFT_data./a; % normalization IFFT_data2 = ifft(fftshift(x2F.')).'; b=max(max(abs(IFFT_data2))); IFFT_data2=IFFT_data2./b; % normalization % addition cyclic prefix cylic_add_data = [IFFT_data(:,[49:64]) IFFT_data].'; cylic_add_data2 = [IFFT_data2(:,[49:64]) IFFT_data2].'; % parallel to serial coversion %ser_data = reshape(cylic_add_data,80*nsym,1); ser_data = reshape(cylic_add_data,80*nsym,1); ser_data2 = reshape(cylic_add_data2,80*nsym,1); xt = [ser_data , ser_data2]; % passing thru channel no_of_error=[]; ratio=[]; for ii=1:length(snr) chan_awgn = awgn(xt,snr(ii),'measured'); % awgn addition y1t = chan_awgn(:,1); y2t = chan_awgn(:,2); ser_to_para = reshape(y1t,80,nsym).'; % serial to parallel coversion ser_to_para2 = reshape(y2t,80,nsym).'; % serial to parallel coversion cyclic_pre_rem = ser_to_para(:,[17:80]); %cyclic prefix removal cyclic_pre_rem2 = ser_to_para2(:,[17:80]); %cyclic prefix removal FFT_recdata =a*fftshift(fft(cyclic_pre_rem.')).'; % freq domain transform FFT_recdata2 =a*fftshift(fft(cyclic_pre_rem2.')).'; % freq domain transform rem_pilot = FFT_recdata (:,[6+[1:nbitpersym/2] 7+[nbitpersym/2+1:nbitpersym] ]); %pilot removal\ rem_pilot2 = FFT_recdata2 (:,[6+[1:nbitpersym/2] 7+[nbitpersym/2+1:nbitpersym] ]); %pilot removal ser_data_1 =sqrt(10)* reshape(rem_pilot.',nbitpersym*nsym,1); % serial coversion ser_data_12 =sqrt(10)* reshape(rem_pilot2.',nbitpersym*nsym,1); % serial coversion yF = [ ser_data_1 ; ser_data_12 ] ; z=modem.qamdemod('M',16); demod_Data = demodulate(z,yF); %demodulatin the data demaping = gray2bin(demod_Data,'qam',16); data1 = de2bi(demaping,'left-msb'); data2 = reshape(data1.',2*nbitpersym*nsym*4,1); [no_of_error(ii),ratio(ii)]=biterr(t_data , data2) ; % error rate calculation end % plotting the result semilogy(EbNo,ratio,'--*r','linewidth',2); hold on; theoryBer = (1/4)*3/2*erfc(sqrt(4*0.1*(10.^(EbNo/10)))); semilogy(EbNo,theoryBer ,'--b','linewidth',2); axis([0 15 10^-5 1]) legend('simulated','theoritical') grid on xlabel('EbNo'); ylabel('BER') title('Bit error probability curve for qam using OFDM');
Last edited by a moderator: