Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 33 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
33
Dung lượng
4,34 MB
Nội dung
HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG KHOA VIỄN THÔNG BÀI TẬP MƠN: Đa truy nhập vơ tuyến Giảng viên: Nguyễn Viết Đảm Phú Thọ, 10/2021 Chương trình mơ phỏng: I MA_06_Basis_OFDM_System_Modeling1: II clc; III clear all; IV close all; V % VI FFTsize = 4; VII CPsize = 2; VIII % IX % Generate for FFTsize bits: BPSK X % solution 1: XI data = 0.5*(sign(rand(1,FFTsize)-0.5)+1); XII data = 2*data-1 XIII XIV % % solution 2: XV % data = round(rand(1,FFTsize)); XVI % data = 2*data-1 XVII % -XVIII XIX % IFFT & FFT Princeples XX % step 1: IFFT process XXI data_IFFT = ifft(data,FFTsize) XXII % step 2: add CP XXIII data_IFFT_CP = [data_IFFT(FFTsize-CPsize+1:FFTsize) data_IFFT]; XXIV % step 3: remove CP XXV data_CPR = data_IFFT_CP(CPsize+1:FFTsize+CPsize); XXVI % step 4: IFFT process XXVII data_FFT = fft(data_CPR,FFTsize) XXVIII XXIX %%%%% decision and determine error XXX % solution 1: XXXI % Hard decision XXXII data_des1 = zeros(1, length(data)); XXXIII for i = 1:length(data_FFT) XXXIV if data_FFT(i) >= XXXV data_des1(i) = 1; XXXVI else XXXVII data_des1(i) = -1; XXXVIII end XXXIX end XL % to determine error (comparesion) XLI error_vector1 = data~=data_des1; XLII % errCount & number of errors XLIII num_error1 = sum(error_vector1); XLIV BER1 = num_error1/FFTsize XLV XLVI % solution 2: XLVII % Hard decision XLVIII data_des2 = sign(real(data_FFT)); XLIX % to determine error (comparesion) L error_vector2 = data~=data_des2; LI % errCount & number of errors LII num_error2 = sum(error_vector2); LIII BER2 = num_error2/FFTsize LIV LV % optimal solution optimal LVI BER_op = sum(sign(real(data_FFT))~=data)/FFTsize LVII LVIII LIX disp(' Du lieu dau vao IFFT:') LX disp(data); LXI disp(' Du lieu dau sau IFFT:') LXII disp(data_IFFT); LXIII LXIV disp(' Du lieu dau sau chen CP:') LXV disp(data_IFFT_CP); LXVI disp(' Du lieu dau sau khu CP:') LXVII disp(data_CPR); LXVIII disp(' Du lieu dau FFT:') LXIX disp(data_FFT); Kết quả: display(' dau FFT sau nhan ma tran W'); x13 = W*x12 display(' so sanh I/O cua IFFT & FFT o dang ma tran'); test2 = x11~=round(x13') display('SOLUTION 2: belong to Generation OF MATRIX'); % clear; clc; N= 4; W_H_2 = zeros(N); for i =1:N for m= 1:N W_H_2(i,m) = exp(j*2*pi/N*(i-1)*(m-1)); end end W_H_2 = 1/sqrt(N)*W_H_2 W_H W_H_2~=W_H W_2 = zeros(N); for m =1:N for i= 1:N W_2(m,i) = exp(-j*2*pi/N*(m-1)*(i-1)); end end W_2 = 1/sqrt(N)*W_2 W W_2~=W IX Sim_MA_06_PSD_OFDM clc; clear all; close all; % FFTsize = 4; CPsize = 2; % % Generate for FFTsize bits: BPSK % solution 1: % data = 0.5*(sign(rand(1,FFTsize)-0.5)+1); data = 2*data-1 % solution 2: % data % data = round(rand(1,FFTsize)); = 2*data-1 % % IFFT & FFT Princeples % step 1: IFFT process data_IFFT = ifft(data,FFTsize) % step 2: add CP data_IFFT_CP = [data_IFFT(FFTsize-CPsize+1:FFTsize) data_IFFT]; % step 3: remove CP data_CPR = data_IFFT_CP(CPsize+1:FFTsize+CPsize); % step 4: IFFT process data_FFT = fft(data_CPR,FFTsize) %%%%% decision and determine error % solution 1: % Hard decision data_des1 = zeros(1, length(data)); for i = 1:length(data_FFT) if data_FFT(i) >= data_des1(i) = 1; else data_des1(i) = -1; end end % to determine error (comparesion) error_vector1 = data~=data_des1; % errCount & number of errors num_error1 = sum(error_vector1); BER1 = num_error1/FFTsize % solution 2: % Hard decision data_des2 = sign(real(data_FFT)); % to determine error (comparesion) error_vector2 = data~=data_des2; % errCount & number of errors num_error2 = sum(error_vector2); BER2 = num_error2/FFTsize % optimal solution optimal BER_op = sum(sign(real(data_FFT))~=data)/FFTsize disp(' Du lieu dau vao IFFT:') disp(data); disp(' Du lieu dau sau IFFT:') disp(data_IFFT); disp(' Du lieu dau sau chen CP:') disp(data_IFFT_CP); disp(' Du lieu dau sau khu CP:') disp(data_CPR); disp(' Du lieu dau FFT:') disp(data_FFT); Kết quả: Chương trình mô phỏng: I.Presentation_Sim_MA_07 clc; clear all; close all; %========================================================================== load MA_07_BPSK_OFDM_NoCC_AWGN.mat; SER_noChannelCoding = SER; SNR_1 = SNR; clear SER; % -load MA_07_BPSK_OFDM_CC_AWGN.mat; SER_ChannelCoding = SER; SNR_2 = SNR; clear SER; % -figure(1) G = semilogy(SNR_1,SER_noChannelCoding,'-ob'); set(G,'LineWidth',1.5); hold on; % -G = semilogy(SNR_2,SER_ChannelCoding,'-.vr'); set(G,'LineWidth',2.5); % -AX = gca; set(AX,'fontsize',14); X = xlabel('SNR (dB)'); set(X,'fontname','.Vntime','fontsize',14,'color','b'); Y = ylabel('SER'); set(Y,'fontname','.Vntime','fontsize',14,'color','b'); title(['M« SER hệ thống BPSK/OFDM kênh AWGN có không mà hóa kênh; Số bit mô = ', num2str(NumBits),' bits '],'FontName','.VnTime','color','b','FontSize',14); L=legend('OFDM - kênh AWGN không mà hãa kªnh','OFDM - kªnh AWGN cã m· hãa kªnh'); set(L,'fontname','.Vntime',' II Sim_MA_07_BPSK_OFDM_AWGN_ChannelCode clc; clear all; close all; SNR = [0:1:9]; FFTsize = 512; CPsize = 20; numRun = 10^3; NumBits = FFTsize*numRun; % Note %========================================================================== mode_Sim coding); = 2; % for No channel code (OFDM without channel % for channel coding (OFDM with channel coding) Codding_Type = 1; % Code Generation Matrix if mode_Sim ==2 if Codding_Type == k0 = 1; G = [1 1;1 1]; elseif Codding_Type == k0 = 1; G = [1 1 0 1;1 1 0]; k0 = 2; G = [0 1 0 1;0 0 0 0 1;1 0 0 0 1]; else end end %========================================================================== for n = 1:length(SNR), errCount = 0; for k = 1:numRun % Generated BPSK data numSymbols = FFTsize; data = 0.5*(sign(rand(1,numSymbols)-0.5)+1); data2 = 2*data-1; % -if mode_Sim ==2 % Convolution code Encoder inputSymbols = FWC_COV_Encoder(G,k0,data); inputSymbols = 2*inputSymbols-1; inputSymbols = 2*data-1; else end % -% IFFT (OFDM Modulation) TxSamples = sqrt(length(inputSymbols))*ifft(inputSymbols,length(inputSymbols)); numSymbols = length(inputSymbols); % Insert CP Tx_ofdm TxSamples]; = [TxSamples(numSymbols-CPsize+1:numSymbols) % AWGN channel numSymbols_2 = length(inputSymbols); tmp = randn(1,numSymbols_2+CPsize); noisePower = 10^(-SNR(n)/10); RxSymbols = Tx_ofdm + sqrt(noisePower)*tmp; % Remove CP EstSymbols_1 = RxSymbols(CPsize+1:numSymbols_2+CPsize); % IFT (OFDM Demodulation) Y = fft(EstSymbols_1,length(EstSymbols_1)); % Detection and decide EstSymbols_1 = Y; EstSymbols_1 = sign(real(EstSymbols_1)); for i = 1:length(EstSymbols_1) if EstSymbols_1(i)>0 Decis(i)= 1; else Decis(i)= 0; end end % -if mode_Sim==2 % Convolution code Decoder EstSymbols = FWC_COV_Dencoder(G,k0,Decis); else EstSymbols = EstSymbols_1; end % -% Check for Error if mode_Sim==2 I = find((data-EstSymbols) == 0); I = find((data2-EstSymbols) == 0); else end % Countered Errors errCount = errCount + (FFTsize-length(I)); end SER(n,:) = errCount / (FFTsize*numRun); end %========================================================================== if mode_Sim ==2 save MA_07_BPSK_OFDM_CC_AWGN.mat; figure(1); G = semilogy(SNR,SER,'-vr'); title(['M« pháng SER hƯ thèng BPSK OFDM kênh AWGN voi mà hóa kênh; Số bit mô pháng = ', num2str(NumBits),' bits '],'FontName','.VnTime','color','b','FontSize',16); LT=legend('OFDM - kªnh AWGN cã m· hãa kªnh'); set(LT,'fontname','.Vntime','fontsize',16); else save MA_07_BPSK_OFDM_NoCC_AWGN.mat; figure(1); G = semilogy(SNR,SER,'-ob'); title(['M« pháng SER hƯ thèng BPSK OFDM kênh AWGN; Số bit mô = ',num2str(NumBits),' bits ', ],'FontName','.VnTime','color','b','FontSize',16); LT=legend('OFDM - kênh AWGN không mà hóa kªnh'); set(LT,'fontname','.Vntime','fontsize',16); end set(G,'LineWidth',1.5); AX = gca; set(AX,'fontsize',14); X=xlabel('SNR (dB)'); set(X,'fontname','.Vntime','fontsize',14,'color','b'); Y=ylabel('SER'); set(Y,'fontname','.Vntime','fontsize',14,'color','b'); grid on; Kết quả: Nhận xét: Từ kết ta thấy tỷ lệ SNR tăng tỷ lệ lỗi giảm, nhiên trình giảm phức tạp khơng chịu ảnh hưởng từ nhiều tín hiệu khác bên ngồi Trên thực tế kết Nhận xét: giá trị SNR với tỷ lệ lỗi kênh AWGN có mã hóa kênh nhỏ so với kênh AWGN khơng có mã hóa kênh ... ifft(data,FFTsize) % step 2: add CP data_IFFT _CP = [data_IFFT(FFTsize-CPsize+1:FFTsize) data_IFFT]; % step 3: remove CP data_CPR = data_IFFT _CP( CPsize+1:FFTsize+CPsize); % step 4: IFFT process data _FFT. .. data_IFFT _CP = [data_IFFT(FFTsize-CPsize+1:FFTsize) data_IFFT]; % step 3: remove CP data_CPR = data_IFFT _CP( CPsize+1:FFTsize+CPsize); % step 4: IFFT process data _FFT = fft( data_CPR) %%%%% decision... IFFT process XXI data_IFFT = ifft(data,FFTsize) XXII % step 2: add CP XXIII data_IFFT _CP = [data_IFFT(FFTsize-CPsize+1:FFTsize) data_IFFT]; XXIV % step 3: remove CP XXV data_CPR = data_IFFT _CP( CPsize+1:FFTsize+CPsize);