1. Trang chủ
  2. » Tất cả

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 fftift và chèn khử cp sim ma 06 07

30 0 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Giáp Thị Hân_B18DCVT135 - 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 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 họa tín hiệu phổ tín hiệu OFDM băng tần gốc: Tham số đầu vào: 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 ; Xóa tất hình định deta_f BW_channel num_subcarrier = round(BW_channel/deta_f); T_ofdm = 1/deta_f; R_ofdm = 1/T_ofdm; Tb = T_ofdm/num_subcarrier; 10 Rb = 20; = 200; = 1/Tb; - Khai báo deta_f = 20 (Subcarrier_ space) - 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 - Khai báo R_ofdm = 1/T_ofdm - Khai báo Tb = T_ofdm/num_subcarrier - Khai báo Rb = 1/Tb 11 A1 12 AA = A^2*Tb; = A^2*T_ofdm; - Khai báo A1 = A^2 * Tb ; - Khai báo AA = A^2*T_ofdm; 13 f_i = deta_f:deta_f:BW_channel+deta_f; 14 f = -Rb:BW_channel+4*deta_f; 15 fc 16 f2 = f:1:(fc+BW_channel+4*deta_f); = 3*max(f); - 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) 17 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); 18 PSD_RF_SC = A1*(sinc(((f2fc)*Tb)).^2); - Khai báo PSD_RF_SC = A1*(sinc(((f2-fc)*Tb)).^2); 19 PSD_OFDM = zeros(num_subcarrier,max(size(f))); 20 for k = 1:num_subcarrier (*) PSD_OFDM(k,:) = AA*(sinc((f-f_i(k))*T_ofdm)).^2; (1) PSD_OFDM_RF(k,:) = AA*(sinc((f2-f_i(k)fc)*T_ofdm)).^2; (2) - Khai báo PSD_OFDM mảng zeros gồm num_subcarrier hàng x max(size(f)) 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 end (3) 21 PSD_OFDM_sum_RF = sum(PSD_OFDM_RF,'double'); 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 𝑆𝐶𝑟𝑓 𝑐ó độ 𝑟ộ𝑛𝑔 𝑝ℎổ 𝑙à 𝑇𝑏 𝑇ầ𝑛 𝑠ố 𝑡𝑟𝑢𝑛𝑔 𝑡â𝑚 𝑡ạ𝑖 𝑓 = 𝑓𝑅𝑓 - 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 15 13 Giải thích code: *Chèn CP: Câu lệnh STT Giải thích function [CP_insert] = MA_06_CP _insert(N,V) - Tạo function MA_06_CP_insert với đầu vào N & V Đầu CP_insert O_I = zeros(V,N); - 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); - 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 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]; -(*) 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] *Khử CP: STT Câu lệnh Giải thích 16 function [CP_Remve] = MA_06_CP_Remove(N,V) CP_Remve = zeros(N,N+V); O_V I_N for i =1:N (*) CP_Remve(i,:) = [O_V(i,:) I_N(i,:)]; (1) end (2) = zeros(N,V); = eye(N); - 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 (*) 14 Kết quả: *Code matlab chèn khử CP: 17 *Kết quả: *Nhận xét: Kết với lí thuyết 15 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 18 Giáp Thị Hân_B18DCVT135  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 trình xử lí xác TH2 : Xử lí bước theo biến đổi ma trận mathlab 19 Giáp Thị Hân_B18DCVT135      Dùng hàm ifft mathlab để xử lí IFFT Dùng kĩ thuật biến đổi ma trận mathlab xử lí q 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í 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 16 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 ; Xóa tất hình định 20 Giáp Thị Hân_B18DCVT135 N = 8; %input('Enter N ='); V =2 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]; - 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 = sqrt(N)*ifft(X1,N); 21 Giáp Thị Hân_B18DCVT135 data_CPR = data_IFFT_CP(V+1:N+V); - Chuỗi đầu khử CP vector data_IFFT_CP giá trị từ V+1 đến N+V 10 data_FFT = (1/sqrt(N))*fft(data_CPR,N) - Xử lí FFT sử dụng lênh fft mathlab 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  Gồm 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 Giải thích clc; 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]; Giải thích Cho giá trị tỉ số tín hiệu nhiễu SNR chạy từ đến để khảo sát 22 Giáp Thị Hân_B18DCVT135 FFTsize CPsize numRun NumBits = 512; = 20; = 10^3; = FFTsize*numRun; CPsize = 20; 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); 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) - (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 data_IFFT_CP = [data_IFFT(FFTsizeCPsize+1:FFTsize) data_IFFT]; - Thực chèn CP chuỗi liệu sau IFFT tmp = randn(1,FFTsize+CPsize); (1) RV_Gausian - (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 = tmp*noisePower; (2) RxSymbols = data_IFFT_CP + RV_Gausian;(3) data_CPR = RxSymbols(CPsize+1:FFTsize+CPsize); data_FFT = fft(data_CPR); - Thực khử CP - 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) - (*) 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 23 Giáp Thị Hân_B18DCVT135 error_vector1 = data~=data_des1; - So sánh bit đầu vào bit sau định 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 Tiến trình mơ truyền dẫn OFDM mơi trường AWGN (khơng mã hóa kênh) *Giải thích code: 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; 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 q 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 24 Giáp Thị Hân_B18DCVT135 trình numRun (lần) 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; IFFT liệu Chèn CP cho liệu Cho liệu qua kênh tạp âm Gauss trắng cộng EstSymbols_1=RxSymbols(CPsize+1:numSymbols_2+CPsize); Khử CP cho liệu 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; FFT liệu I errCount end SER(n,:) end = find((data2-EstSymbols) == 0); = errCount + (FFTsize-length(I)); = errCount / (FFTsize*numRun); 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'); 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 Tính tỉ số lỗi, kết thúc khảo sát Mô tả trình mơ OFDM khơng sử dụng mã hóa kênh môi trường AWGN 25 Giáp Thị Hân_B18DCVT135 set(LT,'fontname','.Vntime','fontsize',16); 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ả: Sử dụng mã hóa kênh (mã xoắn) Câu lệnh mode_Sim Codding_Type = 2; = 1; 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]; 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ã 26 Giáp Thị Hân_B18DCVT135 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; for k = 1:numRun numSymbols = FFTsize; data = 0.5*(sign(rand(1,numSymbols)-0.5)+1); data2 = 2*data-1; if mode_Sim ==2 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); 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 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 FFT liệu Quyết định cứng Nếu ký hiệu >0, trả lại trả 27 Giáp Thị Hân_B18DCVT135 if mode_Sim==2 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 end = errCount + (FFTsize-length(I)); 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); Quá 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 *Kết quả: * Nhận xét : Kết mô hệ thống BPSK OFDM kênh AWGN 28 Giáp Thị Hân_B18DCVT135 + 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 : *Nhận xét : - Ở giá trị SNR tỉ lệ lỗi có mã hóa kênh nhỏ khơng mã hóa - Tốc độ giảm lỗi SNR tăng cao mã hóa kênh lớn khơng mã hóa -> Hệ thống tối ưu mã hóa kênh 29 .. .Sim_ MA0 6: 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... 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: Thực IDFT/DFT (IFFT/FFT) Matlab:... (2) 12 Chèn CP /Khử CP: 14 15 13 Giải thích code: *Chèn CP: Câu lệnh STT Giải thích function [CP_ insert] = MA_ 06 _CP _insert(N,V) - Tạo function MA_ 06 _CP_ insert với đầu vào N & V Đầu CP_ insert

Ngày đăng: 26/02/2023, 19:18