Đăng ký Đăng nhập
Trang chủ Trực quan hóa nguyên lý hoạt động hệ thống truyền dẫn ofdm trên cơ sở thực hiện ...

Tài liệu Trực quan hóa nguyên lý hoạt động hệ thống truyền dẫn ofdm trên cơ sở thực hiện fft fft và chèn khử cp

.PDF
20
1
87

Mô tả:

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG BÁO CÁO HỌC TẬP ĐA TRUY NHẬP VÔ TUYẾN Sim_MA06 và Sim_MA07 Giảng Viên: Nguyễn Viết Đảm Hà1Nội Sim_MA06: Trực quan hóa nguyên lý hoạt động hệ thống truyền dẫn OFDM trên cơ sở thực hiện FFT/FFT và chèn/khử CP 2 3 4 5 6 7 8 Phần matlab: MA_06_Basis_OFDM_System_Modeling_2.m Câulệnh stt Giải thích 1 clc; clear all; close all; 2 FFTsize = 8; CPsize = 2; data= 0.5*(sign(rand (1,FFTsize)-0.5)+1); data= 2*data-1 data_IFFT= ifft(data) data_IFFT_CP = [data_IFFT(FFTsize-CPsize+1:FFTsize) data_IFFT]; data_CPR= data_IFFT_CP(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) >= 0 data_des1(i) = 1; else data_des1(i) = -1; end end error_vector1 data~=data_des1; num_error1 sum(error_vector1); BER1 num_error1/FFTsize BER_op = sum(sign(real(data_FFT)) ~=data)/FFTsize 3 4 5 6 7 11 9 -Xóa cửa sổ lệnh -Xóa các mục khỏi không gian làm việc, giải phóng bộ nhớ hệ thống - Đóng hết các đè mục Khai báo gia srij tham số Tạo cho các bit kích thước FFT: BPSK bước 1: Quy trình IFFT bước 2: thêm CP bước 3: loại bỏ CP bước 4: Quy trình IFFT Quyết định và xác định lỗi để xác định lỗi (so sánh) Tổng số lỗi giải pháp tối ưu tối ưu MA_06_CP_insert.m stt 1 2 3 4 5 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,:)] ; end I_N = eye(N); CP_insert = [O_I;I_N]; Giải thích Khởi tạo function MA_06_CP_insertvới 2 tham số đầu vào V,N; -tao ma trận 0 - tao ma trận đơn vị Tạo vòng lặp Tạo ma trận đơn vị MA_06_CP_Remove.m Stt 1 2 3 Câu lệnh Giải thích Khởi tạo function MA_06_CP_ Remove với 2 tham số đầu vào V,N; -tao ma trận 0 - tao ma trận đơn vị function [CP_Remve] = MA_06_CP_Remove(N, V) CP_Remve = zeros(N,N+V); O_V = zeros(N,V); I_N = eye(N); for i =1:N CP_Remve(i,:) = [O_V(i,:) I_N(i,:)]; end Tạo vòng lặp 10 MA_06_FFT_matrix.m Stt 1 2 3 Câu lệnh function [W] = MA_06_FFT_matrix(N) W = zeros(N); for m =1:N for i= 1:N W(m,i) = exp(j*2*pi/N*(m-1)*(i-1)); end end Giải thích Khởi tạo function MA_06_CP_ matrixvới 1 tham số đầu vào N; -tạo ma trận 0 Tạo vòng lăpj MA_06_IFFT_matrix.m stt 1 2 3 4 Câu lệnh function [W_H] = MA_06_IFFT_matrix(N) W_H = zeros(N); for i =1:N for m= 1:N W_H(i,m) = exp(j*2*pi/N*(i-1)*(m-1)); end end W_H = 1/sqrt(N)*W_H; Giải thích Khởi tạo function MA_ MA_06_IFFT_matrixvới 1 tham số đầu vào N; Tạo ma trận 0 Taọ vòng lặp 11 MA_06_OFDM_Principle.m stt 1 Câu lệnh 2 N = 4; V = 2; X1 = 1:N; [W_H] = MA_06_IFFT_matrix(N); [W] = MA_06_FFT_matrix(N); [CP_insert] = MA_06_CP_insert(N,V); [CP_Remve] = MA_06_CP_Remove(N,V); Mode = 1; if 3 Giải thích -Xóa cửa sổ lệnh -Xóa các mục khỏi không gian làm việc, giải phóng bộ nhớ hệ thống Với N=4, V=2 Tao các ma trận khác nhau clc; clear; ở chế độ 1: -nếu Chế độ = 1; -nếu khác X1 Mode == 1 = 0.5*(sign(rand(1,N)- 0.5)+1); else 5 6 7 8 9 5 X1 = 0.5*(sign(rand(1,N)-0.5)+1); end Test_IFFT_FFT_matrix abs(W_H*W); Test_CP_inser_remove = = CP_Remve*CP_insert; data_IFFT Kiểm tra IFFT / FFT; Quy trình IFFT = sqrt(N)*ifft(X1,N); data_IFFT_CP = [data_IFFT(NV+1:N) data_IFFT]; data_CPR = data_IFFT_CP(V+1:N+V); data_FFT = (1/sqrt(N))*fft(data_CPR,N) Test_IFFT_FFT_matrix abs(W_H*W); Test_CP_inser_remove thêm CP loại bỏ CP Quy trình IFFT = = CP_Remve*CP_insert; 12 Kiểm tra IFFT / FFT; Sim_MA_06_PSD_OFDM.m Stt 2 3 4 5 6 Câu lệnh deta_f = 20; BW_channel = 200; 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(((f2-fc)*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((f-f_i(k))*T_ofdm)) .^2; PSD_OFDM_RF(k,:) = AA*(sinc((f2-f_i(k)fc)*T_ofdm)).^2; end figure subplot plot hold on xlabel ylabel grid on; set 13 Giải thích - Không gian sóng mang con - Băng thông của kênh - Số lượng sóng mang con hoặc vòng kênh con - thời gian -các thông số dầu vào cơ bản - PSD đầu vào của Khối điều chế OFFDM - PSD đầu ra của Khối điều chế OFFDM - PSD đầu ra của Khối điều chế OFFDM - bảng hiển thị kết quả - Đặt title, font, color cho trục x và y -Vẽ thêm 1 đồ thị khác vào cùng cửa sổ figure Đặt chú thích cho từng trường hợp hiển thị trên figure Sim_MA07: Mô hình hóa và mô phỏng hiệu năng BER cho hệ thống truyền dẫn BPSK-OFDM dùng mã kênh trong môi trường kênh AWGN 14 15 16 17 Phần mô phỏng Sim_MA_07_BPSK_OFDM_AWGN_ChannelCode.m St t 1 2 3 4 5 6 7 8 9 Câu lệnh clc; clear all; close all; SNR = [0:1:9]; FFTsize = 512; CPsize = 20; numRun = 10^3; NumBits = FFTsize*numRun; mode_Sim = 2 Codding_Type = 1; if mode_Sim ==2 if Codding_Type == 1 k0 = 1; G = [1 1 1;1 0 1]; elseif Codding_Type == 2 k0 = 1; G = [1 1 1 1 0 0 1;1 0 1 1 0 1 0]; else k0 = 2; G = [0 0 1 0 1 0 0 1;0 0 0 0 0 0 0 1;1 0 0 0 0 0 0 1]; 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 ==2inputSymbols = FWC_COV_Encoder(G,k0,data); inputSymbols = 2*inputSymbols-1; else inputSymbols 18 = 2*data-1; Giải thích -Xóa cửa sổ lệnh -Xóa các mục khỏi không gian làm việc, giải phóng bộ nhớ hệ thống - Đóng hết các đè mục -Lấy 10 điểm xét SNR đơn vị dB từ 0 đến 9. Mỗi điểm cách nhau 1 -Chế độ mô phỏng =2 -Mã hóa loại 1 -Nếu chế độ mô phỏng = 2 và mã hóa loại 1 thì ta có: k0 = 1; G = [1 1 1; 1 0 1]; -Nếu chế độ mô phỏng = 2 và mã hóa loại 2 thì ta có: k0 = 1; G = [1 1 1 1 0 0 1; 1 0 1 1 0 1 0]; --Nếu chế độ mô phỏng = 2 và mã hóa loại khác thì ta có: k0 = 2; G = [0 0 1 0 1 0 0 1;0 0 0 0 0 0 0 1;1 0 0 0 0 0 0 1]; Cho biến j chạy giá trị từ 1 tới 10 (length(SNR)) + Hàm sign: dùng để lấy dấu (lấy -1 hoặc 1) + Hàm rand(1,numSymbols): Lấy 1000 giá trị ngẫu nhiên trong khoảng từ 0 đến 1 Nếu chế độ mô phỏng = 2 thì inputSymbolsđược tính bằng hàm function: FWC_COV_Encoder(G,k0,dat a); Nếu chế độ mô phỏng loại khác thì inputSymbols = 2*data-1; 10 11 12 13 14 TxSamples = sqrt(length(inputSymbols))*if ft (inputSymbols,length(inputSym bols)); 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); Y = fft(EstSymbols_1, length(EstSymbols_1)); 17 18 19 20 Chèn CP Kênh% AWGN Loại bỏ CP IFT (Giải điều chế OFDM) Phát hiện và quyết định 15 16 -FFT (Điều chế OFDM) 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 EstSymbols = FWC_COV_Dencoder(G,k0,Decis); else EstSymbols = EstSymbols_1; if mode_Sim==2 I = find((data-EstSymbols) == 0); else I = find((data2-EstSymbols) == 0); end errCount = errCount + (FFTsizelength(I)); 19 end Cho biến I chạy giá trị từ 1 tới 10 (length(EstSymbols_1)) -nếu EstSymbols_1(i)>0 thì Decis(i)= 1; - ngược lại Decis(i)= 0; Nếu chế độ mô phỏng = 2 thì EstSymbols = FWC_COV_Dencoder(G,k0,De cis); Nếu chế độ mô phỏng loại khác thì EstSymbols = EstSymbols_1; Nếu chế độ mô phỏng = 2 thì I = find((data-EstSymbols) == 0); Nếu chế độ mô phỏng loại khác thì I = find((data2-EstSymbols) == 0); Lỗi được đối chiếu 21 SER(n,:) = errCount / (FFTsize*numRun); figure subplot plot hold on xlabel ylabel grid on; set 20 bảng hiển thị kết quả Đặt title, font, color cho trục x và y -Vẽ thêm 1 đồ thị khác vào cùng cửa sổ figure Đặt chú thích cho từng trường hợp hiển thị trên figure
- Xem thêm -

Tài liệu liên quan

Tài liệu vừa đăng