Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 30 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
30
Dung lượng
3,34 MB
Nội dung
- - HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THƠNG ĐA TRUY NHẬP VƠ TUYẾN BÀI TẬP VỀ NHÀ Đề bài: Sim_MA06 Sim_MA07 Giảng Viên : Nguyễn Viết Đảm Hà Nội, năm 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 FFT/FFT chèn/ khử CP SIM_MA_06_PDS_OFDM.m Câu lệnh Clc ; Clear ; Close all ; 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 deta_f = 20; - Khai báo deta_f = 20 (Subcarrier_ space) BW_channel = 200; - Khai báo BW_channel = 200 ( Băng thông kênh ) - 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 num_subcarrier = round(BW_channel/deta_ f); T_ofdm = 1/deta_f; R_ofdm = 1/T_ofdm; Rb = 1/Tb; - Khai báo R_ofdm = 1/T_ofdm - Khai báo Tb = T_ofdm/num_subcarrier - Khai báo Rb = 1/Tb A1 = A^2*Tb; - Khai báo A1 = A^2 * Tb ; AA = A^2*T_ofdm; - Khai báo AA = Tb = T_ofdm/num_subcarrier; 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 f = -Rb:BW_channel+4*deta_f; - Khai báo f mảng gồm giá trị từ -Rb đến BW_channel+4*deta_f Fc = 3*max(f); - Khai báo fc = * max(f) f_i = deta_f:deta_f:BW_channel+det a_f; Ghi PSD_ofdm_in = A1*(sinc((f*Tb)).^2); - 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); PSD_RF_SC = A1*(sinc(((f2fc)*Tb)).^2); - Khai báo PSD_RF_SC = A1*(sinc(((f2-fc)*Tb)).^2); f2 = f:1:(fc+BW_channel+4*deta_f) ; PSD_OFDM = zeros(num_subcarrier,max(siz e(f))); - Khai báo PSD_OFDM mảng zeros gồm num_subcarrier hàng x max(size(f)) cột for k = -(*) Bắt đầu vòng lặp for cho 1:num_subcarrier (*) k từ -> num_subcarrier PSD_OFDM(k,:) = PSD_OFDM(k,:) ( Giá trị AA*(sinc((f(1)PSD_OFDM hàng thứ f_i(k))*T_ofdm)).^2; (1) k cột ) = AA*(sinc((fPSD_OFDM_RF(k,:) = f_i(k))*T_ofdm)).^2 AA*(sinc((f2-f_i(k)-(2) PSD_OFDM_RF(k,:) ( fc)*T_ofdm)).^2; (2) Giá trị -(1)PSD_OFDM_RF end (3) 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 (*) PSD_OFDM_sum_RF = - Khai báo sum(PSD_OFDM_RF,'double'); PSD_OFDM_sum_RF = tổng PDS_OFDM_RF kiểu liệu Double Các lệnh cấu tạo figure *Kết quả: *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 = − 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 mang có độ rộng phổ 2/T_ofdm Khoảng cách tần số trung tâm deta_f = 1/T_ofdm, tần số trung tâm f=detal_f Độ rộng băng tần BW − Phổ tín hiệu 𝑂𝐹𝐷𝑀𝑅𝐹 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 Mơ hình hóa hệ thống truyền dẫn OFDM sở thực IFFT/FFT chèn/ khử CP * Chèn CP MA_06_CP_insert.m STT Câu lệnh function [CP_insert] = MA_06_CP_insert(N,V) O_I = zeros(V,N); 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) Giải thích - Tạo function MA_06_CP_insert với đầu vào N & V Đầu - Khai báo O_I mảng toàn gồm V hàng x N cột - 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,:) Ghi I_V(i,:)] -(2) Kết thúc vòng for (*) I_N= eye(N); - Khai báo I_N ma trận đơn vị NxN CP_insert = [O_I;I_N]; - Gán CP_insert = [O_I;I_N] * Khử CP MA_06_CP_Remove.m Câu lệnh STT function [CP_Remve] = MA_06_CP_Remove(N,V) CP_Remve O_V I_N for i =1:N (*) CP_Remve(i,:) = [O_V(i,:) I_N(i,:)]; (1) end (2) = zeros(N,N+V); = zeros(N,V); = eye(N); Giải thích Ghi - 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 (*) *MA_06_OFDM_Principle Bài mơ so sánh thực IFFT/FFT chèn/khử CP thông việc nhân ma trận – làm theo khồi sơ đồ kĩ thuật mathlab để làm đơn giản hóa q trình TH1 : Xử lí bước theo nhân ma trận ➢ Khởi tạo tham số đầu vào : N ; V ➢ Tạo chuỗi đầu vào mô ma trận IFFT/FFFT ; Chèn/khử CP ➢ Thực xử lí IFFT/FFT chèn/khử CP theo bước ➢ Kết X1 X13 ❖ Nhận xét : Kết đầu vào đầu giống nên q trình xử lí xác TH2 : Xử lí bước theo biến đổi ma trận mathlab ➢ ➢ ➢ ➢ ➢ Dùng hàm ifft mathlab để xử lí IFFT Dùng kĩ thuật biến đổi ma trận mathlab xử lí trình chèn CP Dùng kĩ thuật biến đổi ma trận mathlab xử lí q trình khử CP Dùng hàm fft mathlab xử lí q trình FFT Kết đầu : ❖ Nhận xét : - Kết đầu q trình hồn tồn giống Qua ta thấy việc sử dụng mathlab để xử lí q trình biến đổi OFDM ( IFFT/FFT chèn/khử CP ) giúp trở nên đơn giản hóa mà kết xác *Giải thích code: Câu lệnh STT Giải thích Clc ; Clear ; 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 Close all ; N = 8; %input('Enter N ='); V =2 Xóa tất hình định Khai báo giá trị N V đầu vào X1 = 1:N; (1) [W_H] = MA_06_IFFT_matrix(N); [W] = MA_06_FFT_matrix(N); % note W=inv(W_H) W*W_H = I [CP_insert] = MA_06_CP_insert(N,V); [CP_Remve] = MA_06_CP_Remove(N,V); -(1) Khởi tạo chuỗi nhị phân X1 đầu vào - Các lệnh tạo ma trận IFFT/FFT chèn/khử CP từ function tạo trước X2 = X1'; X3 = W_H*X2; % IFFT X4 = X3'; X5 = X4'; X6 = CP_insert*X5; X7 = X6'; X8 = X7'; X9 = CP_Remve*X8; X10 = X9'; X11 = X10'; X12 = W*X11; % FFT X13 = X12' ; Thực xử lí IFFT/FFT chèn khử CP theo dạng ma trận - X3 đầu IFFT - X6 đầu chèn CP - X9 đầu khử CP - X12 đầu FFT - X13 chuyển bị X12 để chuỗi bit dạng 1xN Về lí thuyết X1 = X13 data_IFFT data_IFFT_CP = [data_IFFT(N-V+1:N) data_IFFT]; data_CPR = data_IFFT_CP(V+1:N+V); - Xử lí IFFT sử dụng lệnh ifft mathlab chuỗi X1 Thực chèn CP theo xử lí ma trận matlab Chuỗi đầu khử CP vector ghép từ vector [data_IFFT(N-V+1:N) – data_IFFT giá trị từ N-V+1 đến N ] ghép với data_IFFT - Chuỗi đầu khử CP vector data_IFFT_CP giá trị từ V+1 đến N+V = sqrt(N)*ifft(X1,N); 10 - Xử lí FFT sử dụng lênh fft mathlab data_FFT = (1/sqrt(N))*fft(data_CPR,N) SIM_MA_07 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 Trong mô này, ta mô hệ thống kênh truyền dẫn BPSKOFDM kênh AWGN trường hợp: Khơng có mã hóa kênh có mã hóa kênh • Các lệnh hệ thống Câu lệnh clc; Giải thích Xóa command window clear; Xóa biến workspace close all; Đóng tất cửa sổ figure mở • Khai báo tham số đầu vào Câu lệnh SNR = [0:1:9]; FFTsize = 512; CPsize = 20; numRun = 10^3; NumBits = FFTsize*numRun; Cpsize = 20; snr_in_dB = 10; noisePower = 10^(-snr_in_dB/10); Giải thích Cho giá trị tỉ số tín hiệu nhiễu SNR chạy từ đến để khảo sát Số mẫu liệu điều chế đầu vào Kích cỡ vecto chèn Số lần chạy Số lượng mẫu sử dụng q trình mơ Khái báo CP size =20; Khai báo giá trịSNRdB =10; 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 = 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); - (1) Sử dụng hàm rand để tạo chuỗi liệu đầu vào xử lí đưa dạng0 - (2) Đưa chuỗi đơn cực lưỡng cực - Thực IFFT chuỗidữ liệu đầu vào gán vào data_IFFT - Thực chèn CP củachuỗ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ấttạp âm - (3) Dữ liệu đầu qua kênh liệu đầu vào + tạp âm - Thực khử CP data_FFT = fft(data_CPR); - Xử lí FFT data_des1 = zeros(1, length(data)); - Khởi tạo mảng giá trịđầu sau định 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) error_vector1 = data~=data_des1; - (*) Bắt đầu vong forcho i chạy từ 1>length(data_FFT) -(1) Bắt đầu vịng đk : Nếu data_FFT(i)>=0 thìquyết định đầu =1; else đầu - Kết thúc num_error1 = sum(error_vector1) - Tính tổng số bit lỗi BER = num_error1/FFTsize - Tỉ lệ lỗi bit BER Không sử dụng mã hóa kênh - So sánh bit đầu vào vàbit sau định Tiến trình mơ truyền dẫn OFDM mơi trường AWGN (khơng mã hóa kênh) Câu lệnh mode_Sim = 1; for n = 1:length(SNR), errCount = 0; for k = 1:numRun numSymbols = FFTsize; data = 0.5*(sign(rand(1,numSymbols)-0.5)+1); data2 = 2*data-1; inputSymbols = 2*data-1; TxSamples = sqrt(length(inputSymbols))* ifft(inputSymbols,length(inputSymbols)); numSymbols = length(inputSymbols); Giải thích Thiết lập tiến trình mơ khơng sử dụng mã hóa kênh Khởi tạo trình khảo sát theo SNR Khởi tạo liệu đầu vào BPSK dạng -1 1, số lượng ký hiệu ngẫu nhiên tạo với số mẫu liệu điều chế đầu vào, chạy lại trình numRun (lần) IFFT liệu 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 EstSymbols = EstSymbols_1; I = find((data2-EstSymbols) == 0); errCount = errCount + (FFTsize-length(I)); end Chèn CP cho liệu Cho liệu qua kênh tạp âm Gauss trắng cộng Khử CP cho liệu FFT liệu Quyết định cứng Kiểm tra lỗi, tìm vị trí mà tín hiệu đầu giống với đầu vào, từ suy lỗi Đếm số lượng lỗi, kết thúc q trình chạy SER(n,:) = errCount / (FFTsize*numRun); end Tính tỉ số lỗi, kết thúc khảo sát save MA_07_BPSK_OFDM_NoCC_AWGN.mat; figure(1); G = semilogy(SNR,SER,'-ob'); title([' Mô 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); set(G,'LineWidth',1.5); AX = gca; set(AX,'fontsize',14); Mơ tả q trình mơ OFDM khơng sử dụng mã hóa kênh mơi trường AWGN 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; Sử dụng mã hóa kênh (mã xoắn) Câu lệnh mode_Sim = 2; Codding_Type = 1; if mode_Sim == 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]; Giải thích Thiết lập tiến trình mơ sử dụng mã hóa kênh Xác định loại mã hóa Dựa loại mã hóa, xác định số bit đầu vào mã hóa ma trận tạo mã end end for n = 1:length(SNR), errCount = 0; for k = 1:numRun numSymbols = FFTsize; data = 0.5*(sign(rand(1,numSymbols)-0.5)+1); data2 = 2*data-1; if mode_Sim == inputSymbols = FWC_COV_Encoder(G,k0,data); inputSymbols = 2*inputSymbols-1; else inputSymbols = 2*data-1; end TxSamples = sqrt(length(inputSymbols))* ifft(inputSymbols,length(inputSymbols)); numSymbols = length(inputSymbols); 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); Khởi tạo trình khảo sát theo SNR Khởi tạo liệu đầu vào BPSK dạng 1, số lượng ký hiệu ngẫu nhiên tạo với số mẫu liệu điều chế đầu vào, chạy lại trình numRun (lần) Mã hóa liệu mã xoắn IFFT liệu Chèn CP cho liệu Cho liệu qua kênh tạp âm Gauss trắng cộng Khử CP cho liệu Y = fft(EstSymbols_1,length(EstSymbols_1)); FFT liệu 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; Quyết định cứng Nếu ký hiệu >0, trả lại trả End end if mode_Sim == EstSymbols = FWC_COV_Dencoder(G,k0,Decis); else EstSymbols = EstSymbols_1; end if mode_Sim==2 I = find((data-EstSymbols) == 0); else I = find((data2-EstSymbols) == 0); end errCount = errCount + (FFTsize-length(I)); end SER(n,:) = errCount / (FFTsize*numRun); end save MA_07_BPSK_OFDM_CC_AWGN.mat; figure(1); G = semilogy(SNR,SER,'-vr'); title([' Mô 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 có mã hóa kênh); set(LT,'fontname','.Vntime','fontsize',16); Q trình giải mã kênh Kiểm tra lỗi, tìm vị trí mà tín hiệu đầu giống với đầu vào, từ suy lỗi Đếm số lượng lỗi, kết thúc q trình chạy Tính tỉ số lỗi, kết thúc khảo sát Mơ tả q trình mơ OFDM sử dụng mã hóa kênh mơi trường AWGN *Nhận xét: Kết mô hệ thống BPSK OFDM kênh AWGN + SNR lớn tỉ lệ lỗi giảm - > với thực tế + So sánh có mã hóa kênh 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 FFT/ FFT chèn/ khử CP SIM_ MA_06_PDS _OFDM. m Câu lệnh Clc ; Clear ; Close all... thành phần sóng mang Điểm khác tần số trung tâm OFDMrf f= frf Mơ hình hóa hệ thống truyền dẫn OFDM sở thực IFFT /FFT chèn/ khử CP MA-06-IFFT -FFT- matrix.m STT Câu lệnh Giải thích Clc ; Clear... data_IFFT data_IFFT _CP = [data_IFFT(N-V+1:N) data_IFFT]; data_CPR = data_IFFT _CP( V+1:N+V); - Xử lí IFFT sử dụng lệnh ifft mathlab chuỗi X1 Thực chèn CP theo xử lí ma trận matlab Chuỗi đầu khử CP