1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÀI tập môn học đa TRUY NHẬP vô TUYẾN đề tài bài tập về nhà số 7 SIM MA 06 + 07

42 3 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

Thông tin cơ bản

Định dạng
Số trang 42
Dung lượng 1,21 MB

Cấu trúc

  • A. Tín hiệu và phổ tần tín hiệu OFDM (4)
  • B. Điều chế và giải điều chế tín hiệu OFDM trên cơ sở không gian tín hiệu (4)
  • C. Minh họa tín hiệu và phổ tín hiệu OFDM trong băng tần gốc (8)
  • E. Mô hình hóa hệ thống truyền dẫn OFDM trên cơ sở thực hiện IFFT/FFT và chèn/khử CP (15)
  • F. Chèn CP/Khử CP (0)
  • A. Mô hình hóa và mô phỏng hệ thống truyền dẫn (33)

Nội dung

Điều chế và giải điều chế tín hiệu OFDM trên cơ sở không gian tín hiệu

B Điều chế và giải điều chế tín hiệu OFDM trên cơ sở không gian tín hiệu :

- Luồng dữ liệu đầu vào x ũk ; X 1, k ; x 2 , k ; X N-1 ' k qua khối xử lí số liệu S/P tách thành các luồng dữ liệu con được điều chế độc lập : x iik ^ĩ(í) với i = 0,1,2, N — 1.

- Sau đó các luồng con này được tổng hợp lại tạo nên tín hiệu s(t) trước khi gửi lên kênh truyền pha ding.

- Sau khi đi qua kênh truyền ở phía thu ta được tín hiệu y(t)

+ y(t) = s(t) * h(t) + n(t) ( h(t) - đáp ứng xung của kênh truyền ; n(t) là thành phần tạp âm của kênh truyền ).

- Sau đó tín hiệu y(t) được đưa vào bộ nhân kết hợp với các thành phần g*j(t) = e -7 ' 2 ^ f với j = 0,1,2, N-1

- Sau đó tín hiệu tiếp tục được đưa qua bộ tích phân

= rũ l / T x í , k e i 2n f it e ' 2n ^ i t dt + yy- l n(t).e j 2n f j t dt b 0 T b 0

- Sau bộ tích phân ta thu được các tín hiệu x^ ik với ĩ = 0 ,1,2, N — 1.

- Nhờ có tính chất trực giao của các sóng mang con gi ik (t) ta tách được x i k

❖ Tính chất trực giao giữa các sóng mang con

Minh họa tín hiệu và phổ tín hiệu OFDM trong băng tần gốc

Tín hiệu OFDM có chu kỳ gấp N lần so với tín hiệu băng gốc, dẫn đến độ rộng phổ của tín hiệu OFDM nhỏ hơn N lần so với tín hiệu gốc Điều này cho phép tín hiệu OFDM chứa nhiều thành phần phổ con trong băng tần cho trước.

D Mô tả phổ của OFDM trong băng tần gốc trên Matlab

> Khai báo và khởi tạo các tham số đầu vào

% num_subcarrier = ceil(BW_channel/deta_f); num_subcarrier = round(BW_channel/deta_f);

AA = A A 2*T_ofdm; f_i = deta_f:deta_f:BW_channel+deta_f; f = -Rb:BW_channel+4*deta_f;

% f_BB = -Rb:4*Rb; fc = 3*max(f); f2 = -f:l:(fc+BW_channel+4*deta_f);

PSD_ofdm_in - Al*(sinc((f*Tb)) A 2);

PSD_RF_SC = Al* (sinc (((f2-fc) *Tb)) '■2) ;

% PSD of output of OFFDM Modulation Block

PSD OFDM = zeros(num subcarrier,max(size(f)));

PSD_OFDM_RF = zeros(num_subcarrier,max(size(f2)));

PSD_OFDM(k,:) = AA*(sinc((f-f_i(k))*T_ofdm)) A 2;

% PSD_OFDM(k,:) = rand(1)*AA*(sinc((f-f_i(k))*T_ofdm)) A 2; PSD_OFDM_RF(k,:) = AA*(sinc((f2-f_i(k)-fc)*T_ofdm)) A 2;

% PSD_OFDM_RF(k,:) = rand(1)*AA*(sinc((f2-f_i(k)-fc)*T_ofdm)) A 2; end

* Xét BW = 500Hz ; Deltaf= 100Hz

- Hai hình trên biểu thị phổ tần của tín hiệu cơ sở đơn sóng mang tại giá trị f=0 và f = frf, độ rộng phổ là 2/Tb Băng thông BW.

Hình ảnh dưới đây minh họa phổ tần của tín hiệu OFDM, trong đó băng thông (BW) được điều chế bằng nhiều sóng mang con Điều này tạo ra nhiều phổ con trong băng tần, với khoảng cách giữa các băng con là delta_f Số lượng sóng mang con được tính bằng công thức: BW/delta_f.

-> Nhận xét: So sánh PSD của các tín hiệu.

- Phổ tần của tín hiệu sc r f có độ rộng phổ là; 2 Tần sổ trung tầm tại f = f R f

Tín hiệu OFDM (Orthogonal Frequency Division Multiplexing) có phổ tần với nhiều thành phần sóng mang con, mỗi thành phần có độ rộng phổ là 2/T_ofdm Khoảng cách giữa các tần số trung tâm là deta_f = 1/T_ofdm, với tần số trung tâm bắt đầu từ fal_f Độ rộng băng tần của tín hiệu này được xác định là BW.

Phổ tín hiệu OFDM RF có nhiều thành phần sóng mang tương tự như tín hiệu OFDM với nhiều thành phần sóng mang Sự khác biệt chính là tần số trung tâm của OFDM RF bắt đầu từ f = frf.

> Dịch đoạn code chương trình :

STT Câu lệnh Giải thích Ghi chú

1 Clc ; Xóa cửa sổ lệnh

2 Clear ; Xóa các mục khỏi không gian

12 1 làm việc, giải phóng bộ nhớ hệ thống

3 Close all ; Xóa tất cả hình đã chỉ định

5 BW_channel = 200; - Khai báo BW_channel 200 ( Băng thông kênh )

6 num_subcarrier round(BW_channel/deta_f);

- Khai báo num_subcarrier (số lượng thành phần sóng mang)

7 T_ofdm = 1/deta_f; - Khai báo T_ofdm = 1/deta_f

8 R_ofdm = 1/T_ofdm; - Khai báo R_ofdm 1/T ofdm

9 Tb = T_ofdm/num_subcarrier; - Khai báo Tb T ofdm/num subcarrier.

10 Rb = 1/Tb; - Khai báo Rb = 1/Tb

11 A1 = A A 2*Tb; - Khai báo A1 = AA2 * Tb ;

12 AA = AA2*T_ofdm; - Khai báo AA =

13 f_i deta_f: deta_f:BW_channel+deta_f; - Khai báo f_i là 1 mảng có các giá trị bắt đầu từ deta_f -

> BW_channel+deta_f Khoảng cách là deta f.

14 f = -Rb:BW_channel+4*deta_f; - Khai báo f là mảng gồm các giá trị từ -Rb đến

15 fc = 3*max(f); - Khai báo fc = 3 * max(f)

- Khai báo f2 là mảng gồm cá giá trị từ -f đến fc+BW channel+4*deta f

17 PSD_ofdm_in A1 *(sinc((f*Tb)).A2);

- Khai báo PSD_ofdm_in A1*(sinc((f*Tb)).A2);

18 PSD_RF_SC = A1*(sinc(((f2- fc)*Tb)).A2);

- Khai báo PSD_RF_SC A1*(sinc(((f2-fc)*Tb)).A2);

19 PSD_OFDM zeros(num_subcarrier,max(size(f)))

- Khai báo PSD_OFDM là 1 mảng zeros gồm num_subcarrier hàng x max(size(f)) cột.

PSD_OFDM(k,:) AA*(sinc((f-f i(k))*T ofdm)) A 2;

PSD_OFDM_RF(k,:) AA*(sinc((f2-f_i(k)- fc)*T_ofdm)).A2; (2) end (3)

-(*) Bắt đầu vòng lặp for cho k từ 1 -> num_subcarrier PSD_OFDM(k,:) ( Giá trị - (1)PSD_OFDM tại hàng thứ k của các cột ) = AA*(sinc((f- f_i(k))*T_ofdm)).A2.

-(2) PSD_OFDM_RF(k,:) ( Giá trị -(1)PSD_OFDM_RF tại hàng thứ k của các cột ) AA*(sinc((f2-f_i(k)- fc)*T_ofdm)).A2 -(3) Kết thúc vòng lặp for (*)

21 PSD_OFDM_sum_RF sum(PSD_OFDM_RF,'double');

- Khai báo PSD_OFDM_sum_RF = tổng PDS_OFDM_RF kiểu dữ liệu double

21 Các lệnh tiếp theo cấu tạo f figure

Mô hình hóa hệ thống truyền dẫn OFDM trên cơ sở thực hiện IFFT/FFT và chèn/khử CP

IFFT/FFT và chèn/khử CP

X A = [x ot ,x t k , ,X it Ni k ] : vectơ thê hiện N mẩu trong miên tần số ỊxỊ, i=O, N-ỉ

X A = >1.1 : vectơ thể hiên N mẫu trong miên thời gian ịx„,m=4), N-l

NxN Mđ ôÚH w ịT oỏn tử FFT)

1 , i=c Xử lý IFFT/FFT: Trụr

, £ bủa giữa các sủng mang con

❖ Minh họa thực hiện IFFT/FFT trên mathlab.

1 exp(j*2*pi/4) exp(j*4*pi/4) exp(j*6*pi/4);

1 exp(j*4*pi/4) exp(j*8*pi/4) exp(j* 12 *pi/4);

1 exp(j*6*pi/4) exp(j*12*pi/4) exp(j*2*3*3*pi/4)] w =[1111;

1 exp(-j*2*pi/4) exp(-j*4*pi/4) exp(-j*6*pi/4);

1 exp(-j*4*pi/4) exp(-j*8*pi/4) exp(-j*12*pi/4);

1 exp(-j*6*pi/4) exp(-j*12*pi/4)exp(-j*2*3*3*pi/4)]

❖ Thực hiện mô phỏng trên mathlab.

> Khởi tạo ma trận W H và ma trận W thủ công

1 exp(j*2*pi/4) exp(j*4*pi/4) exp(j*6*pi/4);

1 exp(j*4*pi/4) exp(j*8*pi/4) exp(j*12*pi/4);

1 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

> Tích của 2 ma trận W H và W w|l/2*w test = abs(W H*W);

-> Kết quả: tich ma tran W_H*W l.ũũũũ 0.000

-> Nhận xét: Kết quả đúng là ma trận đơn vị I[nxn].

Thực hiện biến đổi FFT/IFFT cho dãy số liệu đầu vào, hiển thị thông tin về ma trận IFFT (W_H) và dãy số liệu xll từ 1 đến 4 Kết quả đầu ra của IFFT sau khi nhân với ma trận W_H sẽ được tính toán và hiển thị.

X12 = W_H*xll' disp(' dau ra FFT sau khi nhan ma tran w')

X13 = W*xl2 displaỵí' so sanh I/O cua IFFT & FFT o dang ma tran') test2 = xll~=round(xl3')

12 3 4 đau ra IEET sau khi nhan ma tran W H (W H*X11)

-1.0000 + 1.00001 dau ra EET sau khi nhan ma tran w xl3 =

4.0000 - O.OOOŨi so sanh I/O cua IFFT & FFT o dang- ma tran test2 =

Kết quả đầu ra của biến đổi IFFT và FFT ở dạng ma trận là tương đương, không có sự khác biệt Điều này cho thấy rằng việc kết hợp biến đổi FFT và IFFT cho phép chúng ta đạt được kết quả đầu ra giống như đầu vào mong muốn.

> Khởi tạo ma trận IFFT và FFT theo hình thức dùng vòng lặp for.

0.5000 O.OOOOi 0.5000 O.OOOOi 0.5000 O.OOOOi 0.5000 O.OOOOi 0.5000 O.OOOOi 0.0000 0.5000Ì -0.5000 O.OOOOi -0.0000 0.5000Ì 0.5000 O.OOOOi -0.5000 O.OOOOi 0.5000 O.OOOOi -0.5000 O.OOOOi 0.5000 O.OOOOi -0.0000 0.5000Ì -0.5000 O.OOOOi 0.0000 0.5000Ì

0.5000 O.OOOOi 0.5000 O.OOOOi 0.5000 O.OOOOi 0.5000 O.OOOOi 0.5000 O.OOOOi 0.0000 0.5000Ì -0.5000 O.OOOOi -0.0000 0.5000Ì 0.5000 O.OOOOi -0.5000 O.OOOOi 0.5000 O.OOOOi -0.5000 O.OOOOi 0.5000 O.OOOOi -0.0000 0.5000Ì -0.5000 O.OOOOi 0.0000 0.5000Ì ans

-> Nhận xét: So sánh với kết quả tạo W_H và W theo thủ công thì kết quả không có sự khác biệt -> Chương trình tạo đúng.

> Giải thích đoạn code chương trình :

STT Câu lệnh Giải thích Ghi chú

1 Clc ; Xóa cửa sổ lệnh

2 Clear ; Xóa các mục khỏi không gian làm việc, giải phóng bộ nhớ hệ thống

3 Close all ; Xóa tất cả hình đã chỉ định

1 exp(j*2*pi/4) exp(j*4*pi/4) exp(j*6*pi/4);

1 exp(j*4*pi/4) exp(j*8*pi/4) exp(j*12*pi/4);

1 exp(j*6*pi/4) exp(j*12*pi/4) exp(j*2*3*3*pi/4)];

- Khởi tọa ma trận W_H có các giá trị như bên.

1 exp(-j*2*pi/4) exp(- j*4*pi/4) exp(-j*6*pi/4);

- Khởi tạo ma trận W có các giá trị như bên.

1 exp(-j*4*pi/4) exp(- j*8*pi/4) exp(-j*12*pi/4);

1 exp(-j*6*pi/4) exp(- j*12*pi/4) exp(-j*2*3*3*pi/4)];

8 test = abs(W_H*W) - Tính giá trị modul của tích

- (2) Tạo ma trận W_H_2 là ma trận toàn 0 có N phần tử.

- (*) Bắt đầu vòng for cho i chạy từ 1:N

- (**) Bắt đầu vòng for con trong (*) cho m chạy từ 1 :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 (**)

13 W_2 = zeros(N); Tạo ma trận W_2 là ma trận toàn 0 có N phần tử.

(*) Bắt đầu vòng for cho i chạy từ m:N

- (**) Bắt đầu vòng for con trong (*) cho i chạy từ 1 :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 (**)

Các sóng mang con bằng không c,- ma trân chèn CP ®Vx(N-V) I v

❖ Thực hiện mô phỏng chèn/khử CP trên mathlab.

> Tạo ma trận chèn Cp trên mathlab

□ function [CP_insert] = MA_06_CP_insert(N,V)

Tín hiệu OFDM băng gốc đầu ra

Khối k gồm N sc log 2 M sóng mang con

Copy và chèn V mẫu có tính tuần hoàn sau khi thực hìenj p/s

-> Nhận xét: Kết quả đúng với lí thuyết.

> Tạo ma trận khử CP trên mathlab. Ẹíunction [CPRemve] = MA_06_CP_Remove (N, V)

-> Kết quả : Ma trận khử CP với N =8 và V =2

-> Nhận xét: Kết quả đúng với lí thuyết.

> Giải thích đoạn code chương trình

STT Câu lệnh Giải thích Ghi chú

- Tạo functionMA_06_CP_insert với đầu vào là N & V Đầu ra là

2 O_I = zeros(V,N); - Khai báo O_I là mảng toàn

3 O_V_N_V = zeros(V,N-V); - Khai báo 0_V_N_V là mảng toàn 0 gồm V hàng và N-V cột.

4 I_V = eye(V); - Khai báo I_V là 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 của tất cả các cột = [O V N V(i,:) I_V(K)]

6 I_N = eye(N); - Khai báo I_N là ma trận đơn vị NxN

7 CP_insert = [O_I;I_N]; - Gán CP_insert = [O_I;I_N]

STT Câu lệnh Giải thích Ghi chú

1 function [CP_Remve] MA_06_CP_Remove(N,V)

- Tạo function MA_06_CP_Remove với đầu vào là N & V Đầu ra là

2 CP_Remve = zeros(N,N+V); - Khai báo CP_Remve là mảng toàn 0 gốm N hàng x N+V cột.

3 O_V = zeros(N,V); - Khai báo O_V = là mảng toàn 0 gồm N hàng x V cột.

4 I_N = eye(N); - Khai báo I_N là 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 của tất cả các cột ) [O_V(i,:) I_N(i:)]; _ -(2) Kết thúc vòng for (*)

Bài mô phỏng này so sánh quy trình thực hiện IFFT/FFT với việc chèn và khử CP thông qua việc nhân ma trận Các bước thực hiện được trình bày chi tiết theo từng khối trong sơ đồ và kỹ thuật sử dụng trong MATLAB nhằm đơn giản hóa quá trình này.

TH1: Xử lí từng 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ô phỏng và các ma trận IFFT/FFFT ; Chèn/khử CP

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);

❖ Thực hiện xử lí IFFT/FFT và chèn/khử CP theo từng bước :

■> Nhận xét : Kết quả đầu vào và đầu ra giống nhau nên quá trình xử lí là chính xác

TH2: Xử lí các bước theo biến đổi ma trận trong mathlab

❖ Dùng hàm ifft trong mathlab để xử lí IFFT

% step 1: IFFT process data IFFT = sqrt(N)*ifft(XI, N);

❖ Dùng kĩ thuật biến đổi ma trận trong mathlab xử lí quá trình chèn CP

% step 2: add CP data_IFFTa_IFFT' ; data_IFFT_CP = [data_IFFT(N-V+l:N) data_IFFT];

❖ Dùng kĩ thuật biến đổi ma trận trong mathlab xử lí quá trình khử CP

% step 3: remove CP data_IFFT_CP= data_IFFT_CP'; dataCPR = data_IFFT_CP(V+l:N+V);

Dùng hàm fft trong mathlab xử lí quá trình FFT

% step 4: IFFT process data_FFT = (1/sqrt(N))*fft(data_CPR,N) ;

Kết quả đầu ra của hai quá trình là hoàn toàn giống nhau, cho thấy việc sử dụng MATLAB để xử lý quá trình biến đổi OFDM rất hiệu quả.

IFFT/FFT và chèn/khử CP ) giúp trở nên đơn giản hóa hơn mà kết quả vẫn chính xác

STT Câu lệnh Giải thích Ghi chú

1 Clc ; Xóa cửa sổ lệnh

2 Clear ; Xóa các mục khỏi không gian làm việc, giải phóng bộ nhớ hệ thống

3 Close all ; Xóa tất cả hình đã chỉ định

Khai báo các giá trị N và

[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 tiếp theo tạo các ma trận IFFT/FFT và chèn/khử CP từ function đã tạo trước đó.

*EG0 pecịs (i)= 1; else

EstSymbols = FWC_COV_Dencoder(G,kO,Decis); else

% AHGN channel numSymbols_2 tmp noisePower

% Countered Errors errCount = errCount + (FFTsize-length(I)); end

SẸR(n,:) = errCount / (FFTsize*numRun); end

-> Nhận xét: Kết quả mô phỏng hệ thống BPSK OFDM trong kênh AWGN

- SNR càng lớn thì tỉ lệ lôi càng giảm - > đúng với thực tế.

♦ So sánh khi có mã hóa kênh và không mã hóa kênh :

+ Ở cùng 1 giá trị SNR thì tỉ lệ lỗi khi có mã hóa kênh nhỏ hơn khi không mã hóa

- Tốc độ giảm lôi khi SNR tăng cao của mã hóa kênh lớn khi không mã hóa.

-> Hệ thống tối ưu hơn khi mã hóa kênh

> Giải thích đoạn mã chương trình

STT Câu lệnh Giải thích Ghi chú

1 Clc ; Xóa cửa sổ lệnh

2 Clear ; Xóa các mục khỏi không gian làm việc, giải phóng bộ nhớ hệ thống

3 Close all ; Xóa tất cả hình đã chỉ định

- Khai báo các tham số đầu vào của quá trình mô phỏng.

-(4) Tham số numRun thể hiện số lần lấy mẫu kênh AWGN.

5 mode Sim = 2; % 1 for No channel code - Xác định mode

% 2 for channel coding (OFDM with channel coding)

Matrix if mode_Sim ==2 if Codding_Type == 1 k0 =1;

0 0 0 0 0 1]; end end mã hóa mô phỏng.

- Sử dụng mã hóa xoắn để mã hóa kênh.

Mỗi loại Codding _Type là một dạng ma trận mã hóa xoẵn khác nhau.

6 for n = 1:length(SNR) (*) - Bắt đầu vòng for

(*) thực hiện mô phỏng theo các giá trị SNR

- Các lệnh tiếp theo nằm trong vòng for (*)

% Generated BPSK data numSymbols = FFTsize; data 0.5*(sign(rand( 1 ,numSymbols)-0.5)+1); data2 = 2*data-1;

- (1) Khởi tạo số lượng lỗi ban đầu

-(**) Bắt đầu vòng for k = 1: numRun.

- Các lệnh tiếp theo thực hiện điều chế dữ liệu BPSK.

8 if mode_Sim ==2 % Convolution code Encoder inputSymbols FWC_cOv_Encoder(G,k0,data); inputSymbols = 2*inputSymbols-1; else inputSymbols = 2*data-1; end

- Xác định mode_Sim để mã hóa xoắn chuỗi dữ liệu.

- Sau đó chuyển sang dạng lưỡng cực.

Mô hình hóa và mô phỏng hệ thống truyền dẫn

Mô hình hóa và mô phồng hệ thống truyền dẫn OFDM CO’ bản trên Matlab Ị Matlab hóa mô hình hệ thống OFDM cơ bân

% Bước 1: Thiết lập tham số mô phóng

% Bước 2: Điều chế Q-PSK numSymbols Tsize; %note tmpl = round(rand(2,numSymbols)); tmp2 = tmpl*2-Ị; data - (tmp2(l,:) +j*tmp2(2,:))/sqrt(2); inputSymbols = data;

% Bước 8: Tách sóng quết định cứng

EstSymbols = sign(real(EstSymbols)) + i*sign(imag(EstSymbols));

% Bước 9: So sánh kiếm tra lỗi và đếm lồi

% Bước 10: Đêm lỗi errCount = errCount + (numSymbols-length(I));SER = errCount / (numSymbols);

% Bước 3: Điêu chế OFDM bồi 1FFT

TxSamples = sqrt(FFTsize)*ifft(inputSymbols);

Tx_ofdm = [TxSamples(numSymbols-CPsize+1 mumSymbols)

% Bước 5: Tạo kênh AWGN và dữ liệu qua kênh AWGN tmp = randn(2,numSymbols+CPsize); complexNoise = (tmp(l,:) + i*tmp(2,:))/sqrt(2); noisePower = 10 A (-SNR'10);

RxSymbols = Tx_ofdm + sqrt(noisePower)*complexNoise;

F.stSymhols = RxSymbols(CPsize+l :numSymbols+CPsize);

% Bước 7: Giài điều chế OFDM bởi FFT

Y - fft(EstSymbols,FFTsize); % dau ra cua FFT

Trong đoạn mã trên, các lệnh được sử dụng để hiển thị kết quả mô phỏng Đầu tiên, hiển thị dữ liệu đầu vào với lệnh `disp(data);`, sau đó hiển thị dữ liệu đầu ra sau quyết định bằng `disp(EstSymbols);` Tiếp theo, kiểm tra sự khác nhau giữa dữ liệu đầu vào và đầu ra bằng cách sử dụng `disp(data~=EstSymbols);` Cuối cùng, tính toán số ký hiệu lỗi và tỷ lệ lỗi SER với các lệnh `disp(sum(data~=EstSymbols));` và `disp(sum(data~=EstSymbols)/FFTsize);`.

❖ Thực hiện mô phỏng trên mathlab

> Thiết lập tham số mô phỏng

CPsize = 20; snr_in_dB = 10; noisePower = 10 A (~snr_in_dB/10);

> Xử lí IFFT/FFT và chèn/khử CP.

% step 2: add CP data_IFFT_CP = [data_IFFT(FFTsize-CPsize+l:FFTsize) data_IFFT];

% step 3: AWGN channel tmp = randn(1,FFTsize+CPsize);

RxSymbols = data_IFFT_CP + RV_Gausian;

> Quyết định đầu ra và thực hiện so sánh lôi

37] data_desl = zeros(l, length(data)); for i = 1:length(data_FFT) if data_FFT(i) >= 0 data_desl(i) - 1; else data_desl(i) - -1; end end

Thực hiện so sánh lỗi error_yectorl = data~a_desl;

% errCount & number af errors num_errorl = sum(error_vectorl);

-> Kết quả mô phỏng: num_errorl

-> Nhận xét: Thực hiện mô phỏng trên 512 bit thì có 133 bit bị lỗi sau khi quyết định ở phía thu.

STT Câu lệnh Giải thích Ghi chú

1 Clc ; Xóa cửa sổ lệnh

2 Clear ; Xóa các mục khỏi không gian làm việc, giải phóng bộ nhớ hệ thống

3 Close all ; Xóa tất cả hình đã chỉ định

CPsize = 20; (2) snr_in_dB = 10; (3) noisePower = 10 A (-snr in dB/10);

- (3) Khai báo giá trịSNRdB ;

-(4) Gán noise power 10 A (-snr in dB/10)

- (1) Sử dụng hàm rand để tạo chuỗi dữ liệu đầu vào và xử lí đưa về dạng

- (2) Đưa chuỗi đơn cực về lưỡng cực.

6 data_IFFT = ifft(data); - Thực hiện IFFT chuỗi dữ liệu đầu vào và gán vào data IFFT.

7 data_IFFT_CP = [data_IFFT(FFTsize-

- Thực hiện chèn CP của chuỗi dữ 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 ra khi qua kênh bằng dữ liệu đầu vào + tạp âm.

9 data_CPR RxSymbols(CPsize+1 :FFT size+CPsize);

10 data_FFT = fft(data_CPR); - Xử lí FFT.

11 data_des 1 = zeros(1, length(data)); - Khởi tạo mảng giá trị đầu ra sau quyết định.

12 for i = 1:length(data_FFT) (*) if data_FFT(i) >= 0 (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 thì quyết định đầu ra =1; else đầu ra bằng 0.

13 error_vector1 = data~a_des 1; - So sánh bit đầu vào và bit sau quyết định.

14 num_error1 = sum(error_vector1) - Tính tổng số bit lỗi

15 BER = num error1/FFTsize - Tỉ lệ lỗi bit BER

B Mô hình hóa và mô phỏng hệ thống truyền dẫn BPSK-OFDM dùng mã hóa kênh trong kênh AWGN

❖ Thực hiện mô phỏng trên mathlab

> Khởi tạo các tham số đầu vào :

> Xác định hệ số và ma trận mã hóa kênh theo mã hóa xoắn mode_sim = 2; % 1 for No channel code (OFDM without channel coding);

% 2 for channel coding (OFDM with channel coding) Codding_Type =1; % Code Generation Matrix if mode_sim ==2 if Codding_Tỵpe == 1

41 for n = 1:length(SNR)| errCount = ũ; for k - 1: nuiẼRu.n

% Generated BPSK data numSymbols = FFTsize; data = Ũ 5* (si|gn (rand (1, numSynibols)-ũ 5) +1) ; data2 = 2*data-l;

% - if mode_sim ==2 % Convolution code Encoder inputSymbols = FWC_COV_Encoder(G, kũ,data} ; inputSymbols = 2*inputSynibols-l; else inputSymbols = 2*data-l; end

= sqrt (length(inputSymbols)) Ấ 'if ft (inputSymbols,length (inpiit Symbol 3}) ;

[TxSamples(numSyniboĩs-CPsize+l:nưmSynibol3} TxSamples];

= Tx_ofdm + sqrt(noisePover)*tmp;

% Remove CP EstSymbols_l = RxSỵmbols(CPsize+l:numSymbols_2+CPsize);

EstSymbols_l = sign(real(EstSỵmbols_l)); for i = 1:length(EstSymbols_l) if EstSỵmbols_l(i)>0 pecịs (i)= 1; else

EstSymbols = FWC_COV_Dencoder(G,kO,Decis); else

% AHGN channel numSymbols_2 tmp noisePower

% Countered Errors errCount = errCount + (FFTsize-length(I)); end

SẸR(n,:) = errCount / (FFTsize*numRun); end

-> Nhận xét: Kết quả mô phỏng hệ thống BPSK OFDM trong kênh AWGN

- SNR càng lớn thì tỉ lệ lôi càng giảm - > đúng với thực tế.

♦ So sánh khi có mã hóa kênh và không mã hóa kênh :

+ Ở cùng 1 giá trị SNR thì tỉ lệ lỗi khi có mã hóa kênh nhỏ hơn khi không mã hóa

- Tốc độ giảm lôi khi SNR tăng cao của mã hóa kênh lớn khi không mã hóa.

-> Hệ thống tối ưu hơn khi mã hóa kênh

> Giải thích đoạn mã chương trình

STT Câu lệnh Giải thích Ghi chú

1 Clc ; Xóa cửa sổ lệnh

2 Clear ; Xóa các mục khỏi không gian làm việc, giải phóng bộ nhớ hệ thống

3 Close all ; Xóa tất cả hình đã chỉ định

- Khai báo các tham số đầu vào của quá trình mô phỏng.

-(4) Tham số numRun thể hiện số lần lấy mẫu kênh AWGN.

5 mode Sim = 2; % 1 for No channel code - Xác định mode

% 2 for channel coding (OFDM with channel coding)

Matrix if mode_Sim ==2 if Codding_Type == 1 k0 =1;

0 0 0 0 0 1]; end end mã hóa mô phỏng.

- Sử dụng mã hóa xoắn để mã hóa kênh.

Mỗi loại Codding _Type là một dạng ma trận mã hóa xoẵn khác nhau.

6 for n = 1:length(SNR) (*) - Bắt đầu vòng for

(*) thực hiện mô phỏng theo các giá trị SNR

- Các lệnh tiếp theo nằm trong vòng for (*)

% Generated BPSK data numSymbols = FFTsize; data 0.5*(sign(rand( 1 ,numSymbols)-0.5)+1); data2 = 2*data-1;

- (1) Khởi tạo số lượng lỗi ban đầu

-(**) Bắt đầu vòng for k = 1: numRun.

- Các lệnh tiếp theo thực hiện điều chế dữ liệu BPSK.

8 if mode_Sim ==2 % Convolution code Encoder inputSymbols FWC_cOv_Encoder(G,k0,data); inputSymbols = 2*inputSymbols-1; else inputSymbols = 2*data-1; end

- Xác định mode_Sim để mã hóa xoắn chuỗi dữ liệu.

- Sau đó chuyển sang dạng lưỡng cực.

Ngày đăng: 30/03/2022, 12:26

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w