Thông tin tài liệu
HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG “ĐA TRUY NHẬP VÔ TUYẾN” Bài 7: Sim_MA_06,MA_07 Giảng viên : Nguyễn Viết Đảm Hà Nội, Tháng 11/2021 Sim MA_06 Trực quan hóa nguyên lý hoạt động hệ thống truyền dẫn OFDM sở thực FFT/FFT chèn/khử CP Tín hiệu phổ tần tín hiệu OFDM Điều chế/ giải điều chế tín hiệu OFDM sở khơng gian tín hiệu Minh hoạ tín hiệu phổ tín hiệu OFDM băng tần gốc SIM_MA_06_PSD_OFDM a Các lệnh hệ thống Câu lệnh clc; clear; Giải thích Xóa command window Xóa biến workspace Đóng tất cửa sổ figure mở close all; b Khai báo tham số đầu vào deta_f = 20; BW_channel = 200; Khai báo độ rộng tần số kênh sóng mang Khai báo băng thơng kênh num_subcarrier = round(BW_channel/deta_f); Tổng số sóng mang giá trị làm trịn băng thơng kênh/ độ rộng tần số kênh sóng mang T_ofdm R_ofdm Khai báo chu kỳ tốc độ OFDM = 1/deta_f; = 1/T_ofdm; Tb=T_ofdm/num_subcarrier; Rb = 1/Tb; Khai báo chu kỳ tốc độ bit liệu A A1 AA Khai báo biên độ tín hiệu, biên độ PSD tín hiệu đầu vào khối điều chế OFDM, biên độ PSD tín hiệu đầu khối điều chế OFDM = 10; = A^2*Tb; = A^2*T_ofdm; f_i = deta_f:deta_f:BW_channel+deta_f; f = -Rb:BW_channel+4*deta_f; Tần số sóng mang fc Tần số sóng mang f2 = 3*max(f); = -f:1:(fc+BW_channel+4*deta_f); Biến chạy tần số băng gốc Biến chạy tần số băng thơng c Phổ tín hiệu đầu vào khối OFDM PSD_ofdm_in = A1*(sinc((f*Tb)).^2); Mật độ phổ cơng suất tín hiệu OFDM đầu vào băng tần gốc PSD_RF_SC = A1*(sinc(((f2-fc)*Tb)).^2); Mật độ phổ cơng suất tín hiệu đơn sóng mang băng thơng d Phổ tín hiệu đầu OFDM PSD_OFDM = zeros(num_subcarrier,max(size(f))); Khởi tạo mật độ phổ cơng suất tín hiệu OFDM băng tần gốc PSD_OFDM_RF = zeros(num_subcarrier,max(size(f2))); Khởi tạo mật độ phổ công suất tín hiệu OFDM băng thơng for k = 1:num_subcarrier PSD_OFDM(k,:) = AA*(sinc((ff_i(k))*T_ofdm)).^2; PSD_OFDM_RF(k,:) = AA*(sinc((f2f_i(k)-fc)*T_ofdm)).^2; end Mật độ phổ cơng suất tín hiệu OFDM băng tần gốc, mật độ phổ cơng suất tín hiệu OFDM băng thơng e Mơ tả phổ tín hiệu truyền dẫn đơn sóng mang OFDM băng tần gốc băng thơng Câu lệnh figure(1) Giải thích Khởi tạo cửa sổ subplot(2,2,1); plot(f, PSD_ofdm_in,'r','LineWidth',3); xlabel('Tần số[Hz]', 'FontName', '.VnTime', 'color', 'b', 'FontSize', 12); ylabel('PSD Input of OFDM', 'FontName', '.VnTime', 'color', Vẽ mật độ phổ công suất PSD tín hiệu đầu vào khối 'b','FontSize',14); title(['Mật độ phổ công suất PSD OFDM với tốc độ Rb tín hiệu đầu vào khối OFDM với tốc độ Rb =', num2str(Rb), 'b/s'], 'FontName', '.VnTime', 'color', 'b', 'FontSize', 9); grid on; subplot(2,2,2); plot(f2,PSD_RF_SC,'m','LineWidth',3); xlabel('Tần số [Hz]', 'FontName', '.VnTime', 'color', 'b', 'FontSize', 12); ylabel('PSD SCRF', 'FontName', '.VnTime', 'color', 'b', 'FontSize',14); title([Mật độ phổ cơng suất PSD tín hiệu SCRF với tốc độ Rb =', num2str(Rb),'b/s', '; fRF=',num2str(fc),'HZ'], 'FontName','.VnTime','color','b','FontSize',9); grid on; Vẽ mật độ phổ công suất PSD tín hiệu SCRF với tốc độ Rb, tần số sóng mang fc subplot(2,2,4); for k = 1:num_subcarrier plot(f2,PSD_OFDM_RF(k,:),'b','LineWidth',2); hold on end xlabel('Tần số [Hz]', 'FontName', '.VnTime', 'color', 'b', 'FontSize',12); ylabel('PSD OFDMRF', 'FontName', '.VnTime', 'color', 'b', 'FontSize',14); title(['PSD tín hiệu OFDM RF: BW Channel =', num2str(BW_channel), ' Hz; Num Subcarrier =', num2str(num_subcarrier), '; Subcarrier Space =', num2str(deta_f),' Hz ', '; fRF=',num2str(fc),' Hz '], 'FontName','.VnTime','color','b','FontSize',9); grid on; f Vẽ mật độ phổ công suất PSD tín hiệu OFDM băng thơng với thơng số băng thơng kênh BW_channel, số lượng sóng mang num_subcarrier, độ rộng tần số kênh sóng mang deta_f tần số sóng mang fc Mơ tả phổ tín hiệu điều chế OFDM Lấy tổng tín hiệu OFDM PSD_OFDM_sum_RF = sum(PSD_OFDM_RF,'double'); băng thông figure(2) subplot(2,1,1); for k = 1:num_subcarrier plot(f2,PSD_OFDM_RF(k,:),'b', 'LineWidth', 2); hold on end h11 = plot(f2,PSD_RF_SC,'r', 'LineWidth',3); hold on h12=plot(f2,PSD_OFDM_sum_RF,'+r','LineWidth',4); xlabel('Tần số [Hz]', 'FontName', '.VnTime', 'color', 'b', 'FontSize', 12); ylabel('PSD OFDMRF & SCRF', 'FontName', '.VnTime', 'color', 'b','FontSize',14); title(['So sánh PSD tín hiệu PSD OFDMRF & SCRF: BW Channel =',num2str(BW_channel), ' Hz; Num Subcarrier=', num2str(num_subcarrier), '; Subcarrier Space =', num2str(deta_f),' Hz,'; F RF=',num2str(fc),' Hz '], 'FontName','.VnTime','color','b','FontSize',12); grid on; K = legend('PSD OFDMRF','PSD SCRF', 'PSD OFDM SUM-RF'); set(K, 'fontname','.Vntime','fontsize',13); Khởi tạo cửa sổ thứ Vẽ phổ tín hiệu OFDM băng thơng, tổng tín hiệu OFDM băng thơng tín hiệu SC với tần số sóng mang fc subplot(2,1,2) plot(f2,PSD_OFDM_sum_RF,'b','LineWidth',2); hold on plot(f2,PSD_RF_SC,'r','LineWidth',3); xlabel('Tần số [Hz]', 'FontName', '.VnTime', 'color', 'b', 'FontSize',12); ylabel('PSD OFDMRF & SCRF', 'FontName', '.VnTime', 'color', 'b','FontSize',14); title(['PSD tín hiệu PSD OFDMRF & SCRF: BW Channel=',num2str(BW_channel), ' Hz; Num Subcarrier=', num2str(num_subcarrier), '; Subcarrier Space =', num2str(deta_f),'Hz,'; FRF=',num2str(fc),' Hz], 'FontName','.VnTime','color','r','FontSize',12); grid on; L = legend('PSD OFDM SUM-RF', 'PSD SCRF'); set(L, 'fontname','.Vntime','fontsize',13); Kết Vẽ phổ tổng tín hiệu OFDM băng thơng tín hiệu SC với tần số sóng mang fc x11 = 1:4 (1) x12 = W_H*x11' (2) x13 = W*x12 (3) test2 = x11~=round(x13') (4) N= 4; (1) W_H_2 = zeros(N); (2) for i =1:N (*) for m= 1:N (**) W_H_2(i,m) = exp(j*2*pi/N*(i-1)*(m-1)); (1) end (2) end (3) W_H_2 = 1/sqrt(N)*W_H_2 (1) W_H_2~=W_H (2) 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)); (1) end (2) end (3) W_2 = 1/sqrt(N)*W_2 (1) W_2~=W (2) Kết - (1) Khởi tạo chuỗi x11 = 1,2,3,4 - (2) x12 = W_H * x11’(x11 chuyển vị ) -(3) x13 = W*x12 -(4) So sánh x11 x13’ (1) Khai báo N =4 (2) Tạo ma trận W_H_2 ma trận tồn có N phần tử (*) Bắt đầu vòng for cho i chạy từ 1:N (**) Bắt đầu vòng for (*) cho m chạy từ :N -(1) W_H_2(i,m) phần tử vị trí hàng i cột m = exp(j*2*pi/N*(i-1)*(m-1)) (2) kết thúc (**) -(3) Kết thúc (*) - (1) W_H_2 = 1/sqrt(N)*W_H_2 -(2) W_H_2 so sánh W_H Tạo ma trận W_2 ma trận toàn có N phần tử (*) Bắt đầu vịng for cho i chạy từ m:N - (**) Bắt đầu vòng for (*) cho i chạy từ :N -(1) W_H_2(m,i) phần tử vị trí hàng m cột i = exp(- j*2*pi/N*(m-1)*(i-1)); -(2) kết thúc (**) -(3) Kết thúc (*) -(1) W_2 = 1/sqrt(N)*W_2 So sánh W_2 W MA_06_Basis_OFDM_System_Modeling1 Lệnh Chức clc; Xóa command window Xóa biến workspace clear; Đóng tất cửa sổ figure mở close all; FFTsize = 4; Kích thước FET CPsize = 2; Kích thước CP data_IFFT Chuyển từ miền tần số sang thời gian = ifft(data,FFTsize) data_IFFT_CP [data_IFFT(FFTsizeCPsize+1:FFTsize) data_IFFT]; = Chèn CP data_CPR = Loại bỏ chèn CP data_IFFT_CP(CPsize+1:FFTsize+CPsize); data_FFT data_des1 = fft(data_CPR,FFTsize) = zeros(1, length(data)); Chuyển từ miền thời gian sang tần số Mạch định for i = 1:length(data_FFT) if data_FFT(i) >= data_des1(i) = 1; else data_des1(i) = -1; end end -Cho i chạy từ cuối cuối chuỗi liệu FET -Nếu liệu thứ i >= định -Nếu khơng định -1 data_des2 Mạch định error_vector1 = sign(real(data_FFT)); = data~=data_des1 Xác định lỗi ( so sánh ) num_error1 = sum(error_vector1); BER1 = num_error1/FFTsize Số lượng lỗi num_error2 = sum(error_vector2); BER2 = num_error2/FFTsize Tỷ lệ lỗi bit Kết Chèn CP Lệnh Chức clc; clear; Xóa command window Xóa biến workspace close all; Đóng tất cửa sổ figure mở function [CP_insert] MA_06_CP_insert(N,V) = -Tạo hàm với đầu ma trận khử CP -Đầu vào hệ thống (N) số mẫu chèn (V) = zeros(V,N); Khởi tạo ma trận chèn có V*N O_V_N_V = zeros(V,N-V); Khởi tạo ma trận có V*(N-V) I_V Khởi tạo ma trận đơn vị có V*V O_I = eye(V); for i=1:V O_I(i,:) = [O_V_N_V(i,:) I_V(i,:)] ; end -Khai báo giá trị cho ma trạn chèn -Ma trận chèn tổng hợp ma trận O_I O_V_N_V I_N Khởi tạo ma trận đơn vị có N*N = eye(N); CP_insert = [O_I;I_N]; Ma trận chèn CP Thử với N=4, V=2 Khử CP Câu lệnh Giải thích function [CP_Remve] = MA_06_CP_Remove(N,V) - Tạo function MA_06_CP_Remove với đầu vào N & V Đầu CP_Remove CP_Remve - Khai báo CP_Remve mảng toàn gốm N hàng x N+V cột - Khai báo O_V = mảng toàn gồm N hàng x V cột - Khai báo I_N ma trận đơn vị kích thước NxN -(*) Bắt đầu vòng for cho i chạy từ 1:N -(1) CP_Remve(i,:) (hàng thứ i tất cột ) = [O_V(i,:) I_N(i,:)]; -(2) Kết thúc vòng for (*) O_V I_N = zeros(N,N+V); = zeros(N,V); = eye(N); for i =1:N (*) CP_Remve(i,:) = [O_V(i,:) I_N(i,:)]; (1) end (2) Thử với : N=4 , V=2 SIM MA_07 Mơ hình hóa mơ hiệu BER cho hệ thống truyền dẫn BPSKOFDM dùng mã kênh mơi trường kênh AWGN I Mơ hình hóa mơ hệ thống truyền dẫn OFDM Matlab Mô MA_06_IFFT_FFT_AWGN Thực mô MATLAB Thiết lập tham số mô Điều chế BPSK Xử lý IFFT/FFT chèn khử CP * Phía phát - Xử lý IFFT - Chèn CP - Mơ kênh AWGN * Phía thu - Khử CP - Xử lý FFT Kết mô phỏng: Nhận xét: Thực mô 512 bit có 141 bit bị lỗi sau định phía thu Đoạn mã chương trình: - MA_06_IFFT_FFT_AWGN - % clc; clear all; close all; % FFTsize = 1000; CPsize = 25; snr_in_dB = 10; noisePower = 10^(-snr_in_dB/10); % -% Generate for FFTsize bits: BPSK data = 0.5*(sign(rand(1,FFTsize)-0.5)+1); data = 2*data-1; % -% IFFT & FFT Princeples % step 1: IFFT process data_IFFT = ifft(data); % step 2: add CP data_IFFT_CP = [data_IFFT(FFTsize-CPsize+1:FFTsize) data_IFFT]; % step 3: AWGN channel tmp = randn(1,FFTsize+CPsize); RV_Gausian = tmp*noisePower; RxSymbols = data_IFFT_CP + RV_Gausian; % step 4: remove CP data_CPR = RxSymbols(CPsize+1:FFTsize+CPsize); % step 5: IFFT process data_FFT = fft(data_CPR); %%%%% 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 Giải thích code STT Câu lệnh Clc ; Giải thích Xóa cửa sổ lệnh Ghi Clear ; Xóa mục khỏi khơng gian làm việc, giải phóng nhớ hệ thống Close all ; Xóa tất hình định FFTsize CPsize snr_in_dB noisePower (4) = 512; (1) = 20; (2) = 10; (3) = 10^(-snr_in_dB/10); -(1) Khai báo FFTsize = 512 - (2) Khái báo CP size = 20; - (3) Khai báo giá trị SNRdB =10; -(4) Gán noise power = 10^(-snr_in_dB/10) data = 0.5*(sign(rand(1,FFTsize)0.5)+1); (1) data = 2*data-1; (2) data_IFFT data_IFFT_CP [data_IFFT(FFTsizeCPsize+1:FFTsize) data_IFFT]; tmp (1) = ifft(data); = randn(1,FFTsize+CPsize); RV_Gausian = tmp*noisePower; (2) RxSymbols RV_Gausian;(3) = data_IFFT_CP + - (1) Sử dụng hàm rand để tạo chuỗi liệu đầu vào xử lí đưa dạng (2) Đưa chuỗi đơn cực lưỡng cực - Thực IFFT chuỗi liệu đầu vào gán vào data_IFFT = - Thực chèn CP chuỗi liệu sau IFFT - (1) Tạo thành phần tạp âm random theo phân bố gauss (2) Nhân với công suất tạp âm (3) Dữ liệu đầu qua kênh liệu đầu vào + tạp âm data_CPR = RxSymbols(CPsize+1:FFTsize+CPsize); - Thực khử CP 10 data_FFT - Xử lí FFT 11 data_des1 = fft(data_CPR); = zeros(1, length(data)); - Khởi tạo mảng giá trị đầu sau định (*) Bắt đầu vong for cho i chạy từ 1>length(data_FFT) -(1) Bắt đầu vòng đk : Nếu data_FFT(i)>=0 định đầu =1; else đầu Kết thúc 12 for i = 1:length(data_FFT) (*) if data_FFT(i) >= (1) data_des1(i) = 1; (2) else (3) data_des1(i) = -1; (4) end (5) end (6) - 13 error_vector1 = data~=data_des1; 14 num_error1 = sum(error_vector1) - So sánh bit đầu vào bit sau định - Tính tổng số bit lỗi 15 BER = num_error1/FFTsize - Tỉ lệ lỗi bit BER II Mơ hình hóa mơ hệ thống truyền dẫn BPSK-OFDM dùng mã hóa kênh kênh AWGN Thực mô MATLAB Các tham số đầu vào Sim_MA_BPSK_OFDM_AWGN_Channelcode %========================================================================== %===================== 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« pháng 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','fontsize',13); grid on; %========================================================================== Kết .. .Sim MA_ 06 Trực quan hóa nguyên lý hoạt động hệ thống truyền dẫn OFDM sở thực FFT/FFT chèn/khử CP Tín hiệu phổ tần tín hiệu OFDM Điều chế/ giải điều chế tín hiệu OFDM sở khơng gian... CP_ Remve(i,:) = [O_V(i,:) I_N(i,:)]; (1) end (2) Thử với : N=4 , V=2 SIM MA_ 07 Mơ hình hóa mơ hiệu BER cho hệ thống truyền dẫn BPSKOFDM dùng mã kênh mơi trường kênh AWGN I Mơ hình hóa mô hệ thống. .. hóa mô hệ thống truyền dẫn OFDM Matlab Mô MA_ 06_ IFFT_FFT_AWGN Thực mô MATLAB Thiết lập tham số mô Điều chế BPSK Xử lý IFFT/FFT chèn khử CP * Phía phát - Xử lý IFFT - Chèn CP - Mơ kênh AWGN
Ngày đăng: 26/02/2023, 19:14
Xem thêm: