Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 29 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
29
Dung lượng
3,52 MB
Nội dung
BỘ THÔNG TIN VÀ TRUYỀN THÔNG HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THƠNG - - HW07 Môn: Đa Truy Nhập Vô Tuyến Giảng viên:Nguyễn Viết Đảm HÀ NỘI – 11/2021 SIM_MA06: Trực quan hóa nguyên lý hoạt động hệ thống truyền dẫn OFDM sở thực IFFT/FFT chèn/khử CP ➢ Chương trình mơ phỏng: MA_06_PSD_OFDM • Đoạn chương trình khai báo, khởi tạo tham số đầu vào • Đoạn chương trình tính PSD đầu vào khối điều chế OFDM • Đoạn chương trình tính PSD đầu khối điều chế OFDM Câu lệnh Clc; Clear; Close all; deta_f = 20; BW_channel = 200; Ý nghĩa Xóa cửa sổ lệnh Xóa mục khỏi khơng gian làm việc, giải phóng nhớ hệ thống Xóa tất hình định Khai báo deta_f = 20 (Subcarrier_ space) Khai báo BW_channel = 200 ( Băng thông kênh ) num_subcarrier = round(BW_channel/deta_f); T_ofdm = 1/deta_f; R_ofdm = 1/T_ofdm; Tb = T_ofdm/num_subcarrier; Rb = 1/Tb; A = 10; A1 = A^2*Tb; AA = A^2*T_ofdm; f_i = deta_f:deta_f:BW_channel+deta_f; f = -Rb:BW_channel+4*deta_f; fc = 3*max(f); f2 = - f:1:(fc+BW_channel+4*deta_f); PSD_ofdm_in = A1*(sinc((f*Tb)).^2); PSD_RF_SC = A1*(sinc(((f2fc)*Tb)).^2); PSD_OFDM = zeros(num_subcarrier,max(size(f))); PSD_OFDM_RF = zeros(num_subcarrier,max(size(f2))); for k = 1:num_subcarrier PSD_OFDM(k,:) = AA*(sinc((ff_i(k))*T_ofdm)).^2; % PSD_OFDM(k,:) = rand(1)*AA*(sinc((ff_i(k))*T_ofdm)).^2; %(1) PSD_OFDM_RF(k,:) = AA*(sinc((f2- f_i(k)-fc)*T_ofdm)).^2; % PSD_OFDM_RF(k,:) = rand(1)*AA*(sinc((f2-f_i(k)fc)*T_ofdm)).^2; %(2) End %(3) PSD_OFDM_sum_RF = sum(PSD_OFDM_RF,'double'); Khai báo num_subcarrier (số lượng thành phần sóng mang) = BW / delta_f Khai báo T_ofdm = 1/deta_f Khai báo R_ofdm = 1/T_ofdm Khai báo Tb = T_ofdm/num_subcarrier Khai báo Rb = 1/Tb Khai báo A=10; Khai báo A1 = A^2 * Tb ; Khai báo AA = A^2*T_ofdm; Khai báo f_i mảng có giá trị deta_f - > BW_channel+deta_f Khoảng cách deta_f Khai báo f mảng gồm giá trị từ -Rb đến BW_channel+4*deta_f Khai báo fc = * max(f) Khai báo f2 mảng gồm cá giá trị từ -f đến fc+BW_channel+4*deta_f Khai báo PSD_ofdm_in = A1*(sinc((f*Tb)).^2); Khai báo PSD_RF_SC = A1*(sinc(((f2fc)*Tb)).^2); Khai báo PSD_OFDM mảng zeros gồm num_subcarrier hàng x max(size(f)) cột Khai báo PSD_OFDM_RF mảng zeros gồm num_subcarrier hàng x max(size(f2)) cột Bắt đầu vòng lặp for cho k từ -> num_subcarrier PSD_OFDM(k,:) ( Giá trị - (1)PSD_OFDM hàng thứ k cột ) = AA*(sinc((ff_i(k))*T_ofdm)).^2 -(2): PSD_OFDM_RF(k,:) ( Giá trị (1)PSD_OFDM_RF hàng thứ k cột ) = AA*(sinc((f2-f_i(k)fc)*T_ofdm)).^2 -(3): Kết thúc vòng lặp for Khai báo PSD_OFDM_sum_RF = tổng PDS_OFDM_RF kiểu liệu double Kết mô phỏng: *Nhận xét: - Phổ tần tín hiệu OFDM đầu vào có độ rộng phổ 2/Tb(Hz) Tần số trung tâm f=0 - Phổ tần tín hiệu SCrf có độ rộng phổ 2Tb Tần số trung tâm f=fRf -Phổ tần tín hiệu OFDM có nhiều thành phần sóng mang Các thành phần sóng 1/T_ofdm, tần số trung tâm f=detal_f Độ rộng băng tần BW - Phổ tín hiệu OFDMRF nhiều thành phần sóng mang tương tự tín hiệu OFDM nhiều thành phần sóng mang Điểm khác tần số trung tâm OFDMrf f=frf -Tích ma trận WH ma trận W W=1/2*W test=abs(W_H*W); Tích ma trận - Biến đổi FFT/IFFT dãy số liệu đầu vào: display('tich ma tran W_H*W'); disp(test); display(' so lieu vao ma tran IFFT (W_H)'); x11 = 1:4 display(' dau IFFT sau nhan ma tran W_H (W_H*x11)'); x12 = W_H*x11' 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'); Kết quả: Khởi tạo ma trận IFFT FFT theo hình thức dùng vòng lặp for: 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 Câu lệnh Clc; Clear; Close all; W_H = [1 1 1; exp(j*2*pi/4) exp(j*4*pi/4) exp(j*6*pi/4); exp(j*4*pi/4) exp(j*8*pi/4) exp(j*12*pi/4); exp(j*6*pi/4) exp(j*12*pi/4) exp(j*2*3*3*pi/4)]; W_H=1/2*W_H W = [1 1 1; exp(-j*2*pi/4) exp(-j*4*pi/4) exp(j*6*pi/4); exp(-j*4*pi/4) exp(-j*8*pi/4) exp(j*12*pi/4); exp(-j*6*pi/4) exp(-j*12*pi/4) exp(j*2*3*3*pi/4)]; W=1/2*W test = abs(W_H*W) 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) Giải thích Xóa cửa sổ lệnh Xóa mục khỏi khơng gian làm việc, giải phóng nhớ hệ thống Xóa tất hình định Khởi tọa ma trận W_H có giá trị bên W_H = ½ * W_H Khởi tạo ma trận W có giá trị bên W=1/2*W Tính giá trị modul tích W_H * W (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 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) *Chèn?khử CP • Thực Matlab Chèn CP Matlab Tạo ma trận W_2 ma trận tồ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 Chạy với N=4, V=2 Khử CP Matlab Chạy với N=4, V=2 • Câu lệnh chèn CP Câu lệnh function [CP_insert] = MA_06_CP_insert(N,V) O_I = zeros(V,N); Giải thích Tạo function MA_06_CP_insert với đầu vào N & V Đầu CP_insert Khai báo O_I mảng toàn gồm V hàng x N cột O_V_N_V = zeros(V,N-V); I_V = eye(V); for i=1:V (*) O_I(i,:) = [O_V_N_V(i,:) I_V(i,:)] ;(1) End (2) I_N = eye(N); CP_insert = [O_I;I_N]; Khai báo 0_V_N_V mảng toàn gồm V hàng N-V cột Khai báo I_V ma trận đơn vị kích thước VxV -(*) Bắt đầu vịng for cho i chạy từ 1:V -(1) O_I hàng thứ i tất cột = [O_V_N_V(i,:) I_V(i,:)] -(2) Kết thúc vòng for (*) Khai báo I_N ma trận đơn vị NxN Gán CP_insert = [O_I;I_N] • Câu lệnh khử CP Câu lệnh function [CP_Remve] = MA_06_CP_Remove(N,V) CP_Remve = zeros(N,N+V); O_V I_N = zeros(N,V); = eye(N); for i =1:N (*) CP_Remve(i,:) = [O_V(i,:) I_N(i,:)];(1) End (3) Giải thích Tạo function MA_06_CP_Remove với đầu vào N & V Đầu CP_Remove 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 (*) SIM_MA07: Mơ hình hóa mơ hiệu BER cho hệ thống truyền dẫn BPSK-OFDM dùng mã kênh môi trường kênh AWGN MA_06_IFFT_FFT_AWGN - Tham số đầu vào Câu lệnh Clc ; Clear ; Close all ; FFTsize = 1000; CPsize = 25; snr_in_dB = 10; noisePower = 10^(-snr_in_dB/10); data = 0.5*(sign(rand(1,FFTsize)-0.5)+1); (1) data = 2*data-1;(2) data_IFFT = ifft(data); data_IFFT_CP = [data_IFFT(FFTsizeCPsize+1:FFTsize) data_IFFT]; tmp = randn(1,FFTsize+CPsize); (1) RV_Gausian = tmp*noisePower; (2) RxSymbols = data_IFFT_CP + RV_Gausian; (3) data_CPR = RxSymbols(CPsize+1:FFTsize+CPsize); data_FFT = fft(data_CPR); data_des1 = zeros(1, length(data)); 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) Ý nghĩa Xóa cửa sổ lệnh Xóa mục khỏi khơng gian làm việc, giải phóng nhớ hệ thống Xóa tất hình định -Khai báo FFTsize = 1000; - Khái báo CP size = 25; - Khai báo giá trị SNR_dB =10; -Gán noise power = 10^(snr_in_dB/10) -(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 - Thực khử CP Xử lí FFT -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 Câu lệnh error_vector1 = data~=data_des1; num_error1 = sum(error_vector1) BER1 = num_error1/FFTsize data_des2 = sign(real(data_FFT)); error_vector2 = data~=data_des2; num_error2 = sum(error_vector2); BER2 = num_error2/FFTsize BER_op = sum(sign(real(data_FFT))~=data)/FFTsize Kết mô phỏng: Ý nghĩa - So sánh bit đầu vào bit sau định Tính tổng số bit lỗi Tỉ lệ lỗi bit BER1 Lấy dấu phần thực data_FFT So sánh bit đầu vào bit sau định Tính tổng số bit lỗi Tỉ lệ lỗi bit BER2 Công thức tính BER_op SIM_MA_07_BPSK_OFDM_AWGN_ChannelCode - Tham số đầu vào: Câu lệnh Clc; Clear; Close all; SNR = [0:1:9]; FFTsize = 512; CPsize = 20; numRun = 10^3; (3) % Note NumBits = FFTsize*numRun; mode_Sim = 2; % for No channel code (OFDM without channel coding); % 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]; else k0 = 2; G = [0 1 0 1;0 0 0 0 1;1 0 0 0 1]; end end for n = 1:length(SNR), errCount = 0; (1) for k = 1:numRun % Generated BPSK data Ý nghĩa Xóa cửa sổ lệnh Xóa mục khỏi khơng gian làm việc, giải phóng nhớ hệ thống Xóa tất hình định Khai báo tham số đầu vào q trình mơ (3) Tham số numRun thể số lần lấy mẫu kênh AWGN Xác định mode mơ loại mã hóa mơ Sử dụng mã hóa xoắn để mã hóa kênh Mỗi loại codding_type ma trận mã hóa xoắn khác Tạo vịng for thực mơ n chạy từ đến chiều dài SNR (1) Khởi tạo số lượng lỗi ban đầu 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; else inputSymbols = 2*data-1; end TxSamples = sqrt(length(inputSymbols))*ifft(inputSymbols,len gth(inputSymbols)); numSymbols = length(inputSymbols); % Insert CP Tx_ofdm = [TxSamples(numSymbolsCpsize+1:numSymbols) TxSamples]; numSymbols_2 = length(inputSymbols); tmp = randn(1,numSymbols_2+CPsize); noisePower = 10^(-SNR(n)/10); RxSymbols = Tx_ofdm + sqrt(noisePower)*tmp; EstSymbols_1 = RxSymbols(CPsize+1:numSymbols_2+CPsize); Y = fft(EstSymbols_1,length(EstSymbols_1)); 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 errCount = errCount + (FFTsize-length(I)); end SER(n,:) = errCount / (FFTsize*numRun); Vòng for cho k chạy từ đến numRun lệnh tiếp thực điều chế liệu BPSK Xác định mode_Sim để mã hóa xoắn chuỗi liệu Sau chuyển sang dạng lưỡng cực Thực chèn CP Mô kênh AWGN với nhiều ngẫu nhiên phân bố GAUSS Khử CP Xử lí FFT Chuỗi bit sau xử lí FFT định đầu - Nếu > đầu - Ngược lại đầu Xác định mode giải mã hóa kênh Tính lỗi đưa tỉ lệ lỗi SER giá trị SNR KẾT QUẢ CHẠY MÔ PHỎNG: Nhận xét: - Với giá trị SNR tỉ lệ lỗi SER có mã hóa kênh nhỏ khơng mã hóa kênh - Khi SNR tăng tỉ lệ lỗi SER giảm kênh AWGN khơng mã hóa kênh .. .SIM_ MA06: Trực quan hóa nguyên lý hoạt động hệ thống truyền dẫn OFDM sở thực IFFT/FFT chèn/khử CP ➢ Chương trình mơ phỏng: MA_06_PSD _OFDM • Đoạn chương trình khai báo, khởi tạo tham số đầu vào... 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 (*) SIM_ MA07: Mơ hình hóa mơ hiệu BER cho hệ thống truyền dẫn BPSK -OFDM dùng mã kênh môi... V=2 Khử CP Matlab Chạy với N=4, V=2 • Câu lệnh chèn CP Câu lệnh function [CP_ insert] = MA_06 _CP_ insert(N,V) O_I = zeros(V,N); Giải thích Tạo function MA_06 _CP_ insert với đầu vào N & V Đầu CP_ insert