Với lưu đồ thuật toán mô phỏng phát tín hiệu QAM tham khảo mã nguồn tại file chương trình: Hình 4.11 Lưu đồ mô phỏng phát tín hiệu QAM Kết thúc Phát 16-QAM Chuyển đổi dữ liệu nhị phân {0,1} thành phân cực {-1,1} N hập số sóng mang Chuyển dữ liệu phân cực {-1,1} thành 4 mức {-3,-1,1,3} Số sóng mang = lũy thừa của 2 Nhập lại.Số sóng mang phải là lũy thừa của 2 Đ S Bắt đầu Đọc dữ liệu vào
Chương 4 Chương trình mô phỏng hệ thống OFDM www.4tech.com.vn
Với lưu đồ thuật toán mô phỏng thu tín hiệu QAM tham khảo mã nguồn tại file chương trình: QAM.m, write.m
Hình 4.12 Lưu đồ mô phỏng thu tín hiệu QAM
Bắt đầu
Khởi tạo mức 0 cho tốc độ
Tăng số lượng sóng mang cho dữ
liệu gốc và thời hạn tần số cao Khôi phục dữ liệu thành dạng nối tiếp Sắp xếp chính xác giữa các mức {-3,-1,1,3} Chuyển dữ liệu phân cực {-1,1} thành nhị phân {0,1} Kết thúc Ghi dữ liệu ra
Chương 4 Chương trình mô phỏng hệ thống OFDM www.4tech.com.vn
4.3.4 Lưu đồ mô phỏng thuật toán tính BER
4.4 Kết quả chương trình mô phỏng 4.4.1 So sánh tín hiệu QAM và OFDM 4.4.1 So sánh tín hiệu QAM và OFDM Hình 4.13 Lưu đồ mô phỏng thuật toán tính BER Bắt đầu Số lượng bit lỗi = 0 i = 1 Lỗi = | Dữ liệu vào(i) - Dữ liệu ra(i)| Số bit lỗi = số bit lỗi + 1 Kết thúc i=i+1
BER = 100*số bit lỗi/ Độ dài dữ
liệu (%) Lỗi>0 i<= Độ dài dữ liệu vào Đ S Đ S
Chương 4 Chương trình mô phỏng hệ thống OFDM www.4tech.com.vn
Hình 4.14: Tín hiệu QAM và OFDM phát ở miền tần số
Chương 4 Chương trình mô phỏng hệ thống OFDM www.4tech.com.vn
4.4.2 So sánh tín hiệu âm thanh được điều chế bằng QAM và OFDM
Hình 4.17 cho chúng ta thấy phổ của tín hiệu OFDM rất giống với phổ tín hiệu của âm thanh ban đầu. Chứng tỏ phương thức điều chế OFDM tốt hơn so với QAM.
4.5 Kết luận chương
Trong chương cuối cùng này đã mô phỏng hệ thống OFDM bằng simulink của Matlab, với những scope để hiện thị tín hiệu giúp cho việc phân tính đánh giá tác
động của kênh truyền đến tín hiệu, tác dụng của bộ ước lượng và bù kênh. Tuy nhiên, simulink này chỉ dừng lại ở mức độđơn giản, tức là chỉ mô phỏng hệ thống OFDM băng gốc với phương thức điều chế QPSK. Trong chương cũng đã so sánh tín hiệu OFDM và tín hiệu QAM, file âm thanh của chúng để thấy rõ những ưu
điểm của OFDM.
Hình 4.16 So sánh tín hiệu âm thanh được điều chế bằng phương thức QAM và OFDM
Kết luận và hướng phát triển đề tài www.4tech.com.vn
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI
Công nghệ ghép kênh phân chia theo tần số trực giao - OFDM là một công nghệ hiện đại cho truyền thông tương lai. Hiện nay việc nghiên cứu và ứng dụng OFDM không ngừng được nghiên cứu và mở rộng phạm vi ứng dụng bởi những ưu
điểm trong việc tiết kiệm băng tần và khả năng chống lại fading chọn lọc tần sốcũng như xuyên nhiễu băng hẹp. Đồ án đã tìm hiểu, trình bày những vấn đề cơ bản của kỹ thuật OFDM cũng như một số vấn đề kỹ thuật cho công nghệ OFDM và khả
năng ứng dụng OFDM vào các công nghệ tương lai này.
Đồng bộ là một vấn đề quan trọng không chỉ trong hệ thống OFDM mà còn cả trong các hệ thống khác cũng vậy. Hệ thống OFDM yêu cầu khắt khe về vấn đề đồng bộ vì sự sai lệch về tần số, ảnh hưởng của hiệu ứng Doppler khi di chuyển và lệch pha sẽ gây ra nhiễu giao thoa tần số (ICI). Trong bất kỳ một hệ thống OFDM nào, hiệu suất cao phụ thuộc vào tính đồng bộ hóa giữa máy phát và máy thu, làm mất tính chính xác định thời dẫn đến nhiễu ISI và ICI khi mất độ chính xác tần số
Chương trình mô phỏng tín hiệu OFDM ởđồ án này chỉ mới thực hiện được bước đầu là mô phỏng tổng quan và và mô phỏng so sánh tín hiệu. Có thể thiết kế
hệ thống OFDM với Simulink trong Matlab và đi vào mô phỏng các thuật toán, các phương pháp cụ thể trong từng vấn đề. Ngoài ra, để nâng cao chỉ tiêu chất lượng hệ
thống OFDM, người ta sử dụng mã hóa tín hiệu OFDM. Do đó chúng ta có thể bổ
sung vấn đề mã hóa vào trong đồ án này.
Việc tìm hiểu tổng quan về OFDM và giải quyết các vấn đề kỹ thuật trong hệ
thống OFDM, chúng ta có thể hướng đến ứng dụng của OFDM trong tương lai như:
® Nghiên cứu, tìm hiểu một số hệ thống OFDM nâng cao như VOFDM (Vector OFDM), COFDM (Coded OFDM), WOFDM (Wideband OFDM),...
® Kết hợp OFDM với các công nghệ khác như FDMA, TDMA và CDMA để
tạo thành các kỹ thuật đa truy cập trong thông tin di động.
®Ứng dụng OFDM trong DVB-T, WLAN, OFDMA, ...
Tài liệu tham khảo www.4tech.com.vn
TÀI LIỆU THAM KHẢO
[1]. Nguyễn Phạm Anh Dũng, Phạm Khắc Kỷ, Hồ Văn Cừu, "Ứng dụng kỹ thuật
điều chế đa sóng mang OFDM trong thông tin di động CDMA", Tạp chí Bưu chính Viễn thông & Công nghệ Thông tin, số 12 tháng 8 năm 2004, trang 33.
[2]. Nguyễn Văn Đức,“Lý thuyết và các ứng dụng của kỹ thuật OFDM”, Nhà xuất bản khoa học và kỹ thuật Hà Nội, 2006.
[3]. Ramjee Prasad “OFDM for Wireless Communications Systems” Artech House, 2004.
[4]. Ye(Geoffrey) Li, Gordon Stuber “Orthogonal Frequency Division Multiplexing for Wireless Communications” ,Springer , 2006 .
[5] Hui Liu, Guoqing Li “ OFDM- Based Broadband Wireless Networks” Wiley Interscience, 2005.
[6] L.Hanzo, M.Munster, B.J.Choi and T.Keller “ OFDM and MC-CDMA for Broadband Multi-User Communications, WLANs and Broadcasting ” All of Univesity of Southampton,UK, IEEE Press/ Wiley 2003.
[7] Juha Heikala, John Terry, Ph.D. “OFDM Wireless LANS : A Theoritical and Practical Guide” ISBN :0672321572.
[8]. Henrik Schulze and Christian Luders, “Theory and Application of OFDM and CDMA”, Fachhochschule Sudwestfalen Meschede, Germany-2005.
[9]. L.HANZO,W.WEBB,and T.KELLER,"Single-and Multi-Carrier Quadrature Amplititude Modulation". New York: IEEE Press/ Wiley, Apr.2000.
[10]. Richard van Nee, Ramjee Prasad, " OFDM for wireless multimedia communications", Artech House, 2000.
[11]. Ahmad R.S. Bahai, Burton R. Saltzberg, “Multicarier Digital Communications Theory and Applications of OFDM”, Kluwer Academic Publishers, 2002.
Phụ lục www.4tech.com.vn
PHỤ LỤC
******************ChuNn hóa dữ liệu trước khi sử dụng******************* if channel_on == 1
disp('Simulating Channel') norm_factor = max(abs(recv)); recv = (1/norm_factor) * recv; ch_clipping
ch_multipath ch_noise
recv = norm_factor * recv; end **********************Mô phỏng hiệu ứng xén tín hiệu************** for i = 1:length(recv) if recv(i) > clip_level recv(i) = clip_level; end if recv(i) < -clip_level recv(i) = -clip_level; end end ************************Mô phỏng hiệu ứng đa đường******************* copy1=zeros(size(recv)); for i=1+d1:length(recv) copy1(i)=a1*recv(i-d1); end copy2=zeros(size(recv)); for i=1+d2:length(recv) copy2(i)=a2*recv(i-d2); end recv=recv+copy1+copy2;
Phụ lục www.4tech.com.vn
*******************Tính toán nhiễu ( thực hiện ở phiá thu) *********** if already_made_noise == 0 % only generate once and use for both QAM and OFDM
noise = (rand(1,length(recv))-0.5)*2*noise_level; already_made_noise = 1;
end
recv = recv + noise; % khôi phục biên độ dữ liệu
****************** Phát symbol OFDM *********************** disp('Transmitting')
read % Đọc dữ liệu vào
data_in_pol = bin2pol(data_in); % Chuyen doi du lieu nhi phan thanh du lieu phan cuc
tx_chunk
*******Thuc hien IFFT de tao dang song mien thoi gian bieu dien du lieu***** td_sets = zeros(num_chunks,fft_size);
for i = 1:num_chunks
td_sets(i,1:fft_size) = real(ifft(spaced_chunks(i,1:fft_size))); end
tx_dechunk
**************Đổi dữ liệu nhị phân (0,1) thanh du lieu cuc (-1,1)************ y = ones(1,length(x)); for i = 1:length(x) if x(i) == 0 y(i) = -1; end end **********************Đổi dữ liệu nhị phân thành hexa******************* y = 0; k = 0; for i = 1:8 y = y + x(8-k)*2^k; k = k+1; end
Phụ lục www.4tech.com.vn
*******************
% Simulation of digital M-PSK modulation schemes over an AWGN channel % November 2004. Robert Morelos-Zaragoza. San Jose State University. % Needs the Communications toolbox.
clear
Fd = 1; Fs = 1;
N = 100000 ; method='psk'; set(1) = 2; set(2) = 4; set(3) = 8; for j=1:1:3 M = set(j); i=1; for esno=0:1:18 sigma = sqrt(10^(-esno/10)/2); x = floor(M*rand(N,1)); y = modmap(x,Fd,Fs,method,M); ynoisy = y + sigma*randn(N*Fs,2); z = demodmap(ynoisy,Fd,Fs,method,M); s = symerr(x,z); ber(j,i) = (s/N)/log2(M); snr(i) = esno; i=i+1; end j end semilogy(snr,ber(1,:),'-b^',snr,ber(2,:),'-bo',snr,ber(3,:),'-bs'); grid on; ylabel('BER'); xlabel('E/N_0 (dB)'); legend('BPSK', 'QPSK', '8PSK',1);
title('Simulated error performance of M-PSK. SJSU - Fall 2004.'); ***************************
% Simulation of digital M-QAM modulation schemes over an AWGN channel % November 2004. Robert Morelos-Zaragoza. San Jose State University. % Needs the Communications toolbox.
clear
Fd = 1; Fs = 1;
N= 100000 ; method='qask'; set(1) = 4; set(2) = 16; set(3) = 64;
Phụ lục www.4tech.com.vn for j=1:1:3 M = set(j); l=1:1:M; aux = sum(abs(modmap(l-1,Fd,Fs,method,M)).^2)/M; energy(j) = aux(1)+aux(2); i=1; for esno=0:2:26; sigma = sqrt(10^(-esno/10)/2)*sqrt(energy(j)); x = floor(M*rand(N,1)); y = modmap(x,Fd,Fs,method,M); ynoisy = y + sigma*randn(N*Fs,2); z = demodmap(ynoisy,Fd,Fs,method,M); s = symerr(x,z); ber(j,i) = (s/N)/log2(M); snr(i) = esno; i=i+1; end j end semilogy(snr,ber(1,:),'-b^',snr,ber(2,:),'-bo',snr,ber(3,:),'-bs'); grid on; ylabel('BER'); xlabel('E/N_0 (dB)');
legend('QPSK', '16-QAM', '64-QAM',1);
title('Cac kieu dieu che M-QAM khac nhau trong kenh truyen AWGN'); ************************
function y = eight2bin(x) % eight2bin
%
% Converts eight bit data (0-255 decimal) to a binary form for processing. y = zeros(1,8); k = 0; while x > 0 y(8-k) = rem(x,2); k = k+1; x = floor(x/2); end
Phụ lục www.4tech.com.vn
********************** % Run OFDM simulation
tic % Start stopwatch to calculate how long QAM simulation takes disp(' '),disp('---') disp('OFDM Simulation')
tx ch rx
% Stop stopwatch to calculate how long QAM simulation takes OFDM_simulation_time = toc;
if OFDM_simulation_time > 60
disp(strcat('Time for OFDM simulation=', num2str(OFDM_simulation_time/60), ' minutes.')); else
disp(strcat('Time for OFDM simulation=', num2str(OFDM_simulation_time), ' seconds.')); end ********************* function y = pol2bin(x) % pol2bin %
% Chuyen doi cac so phan cuc (-1,1) thanh cac so nhi phan (0,1) % Chap nhan mot mang 1-D cua cac so phan cuc
% Loai bo cac zeros, khi chung khong hop le % % Loai bo cac zeros - Khong can cho giai ma
y = ones(1,length(x)); for i = 1:length(x) if x(i) == -1 y(i) = 0; end end *****************************
% QAM.m So sanh OFDM (Da song mang) voi QAM da muc (Don song mang) % Khi chung ta phat cung mot so luong bit giong ngau tren mot chu ky thoi % gian
Phụ lục www.4tech.com.vn
read % Doc du lieu cho QAM - Khong anh huong den OFDM
data_in_pol = bin2pol(data_in); % Chuyen doi du lieu nhi phan thanh du lieu phan cuc
% Kiem tra so song mang co phai la luy thua cua 2 is_pow_2 = num_carriers; temp_do_QAM = 0; if is_pow_2 ~= 2 while temp_do_QAM == 0 temp_do_QAM = rem(is_pow_2,2); is_pow_2 = is_pow_2/2; if is_pow_2 == 2 temp_do_QAM = -99; end end else
temp_do_QAM = -99; % 2 la luy thua cua 2 end
if temp_do_QAM ~= -99
do_QAM = 0; % Khong the thuc hien
disp(' '),disp('ERROR: Cannot run QAM because num_carriers is not valid.') disp(' Please see "setup.m" for details.')
end
if do_QAM == 1
tic % Bat dau de tinh toan thoi gian mo phong thuc hien QAM disp(' '), disp('---')
disp('QAM simulation'), disp('Transmitting')
****** Them cac muc zeros de du lieu duoc chia thanh cac phan bang nhau data_length = length(data_in_pol);
r = rem(data_length,num_carriers); if r ~= 0
for i = 1:num_carriers-r
data_in_pol(data_length+i) = 0; %Them dau vao voi cac zeros vao tap hop du lieu
end %Toc do co the duoc cai thien
end
Phụ lục www.4tech.com.vn
num_OFDM_symbols = ceil(data_length / (2*num_carriers));
% So ky hieu QAM duoc bieu dien bang so luong cua du lieu tren mot ky % hieu OFDM
num_QAM_symbols = num_carriers / 2; % So mau tren ky hieu QAM
num_symbol_samples = fft_size / num_QAM_symbols;
**** *Chuyen doi du lieu phan cuc [-1, 1] thanh du lieu 4 muc [-3, -1, 1, 3]**** data_in_4 = zeros(1,data_length/2);
for i = 1:2:data_length
data_in_4(i - (i-1)/2) = data_in_pol(i)*2 + data_in_pol(i+1); end
% Dinh ro diem lay mau giua 0 va 2*pi
ts = linspace(0, 2*pi*QAM_periods, num_symbol_samples+1); % Phat du lieu 16-QAM
% Tong do dai cua truyen dan 16-QAM
tx_length = num_OFDM_symbols * num_QAM_symbols * num_symbol_samples; QAM_tx_data = zeros(1,tx_length); for i = 1:2:data_length/2 for k = 1:num_symbol_samples QAM_tx_data(k+((i-1)/2)*num_symbol_samples) = data_in_4(i)*cos(ts(k)) + data_in_4(i+1)*sin(ts(k)); end end
% Do channel simulation on QAM data
xmit = QAM_tx_data; % ch dung du lieu 'xmit' va tra ve 'recv' ch
QAM_rx_data = recv; % Luu du lieu QAM sau khi mo phong kenh
clear recv %Loai bo 'recv' sao cho no khong nhieu voi OFDM
clear xmit % Loai bo 'xmit' sao cho no khong nhieu voi OFDM
disp('Receiving') % Khoi phuc du lieu nhi phan (Giai ma QAM)
cos_temp = zeros(1,num_symbol_samples); % sin_temp = cos_temp; %
Phụ lục www.4tech.com.vn
xxx = zeros(1,data_length/4); % Khoi tao muc khong cho toc do
yyy = xxx; % QAM_data_out_4 = zeros(1,data_length/2); %
for i = 1:2:data_length/2 % "cheating" for k = 1:num_symbol_samples
************Tang so song mang de tao tan so cao va du lieu goc********** cos_temp(k) = QAM_rx_data(k+((i-
1)/2)*num_symbol_samples) * cos(ts(k));
sin_temp(k) = QAM_rx_data(k+((i- 1)/2)*num_symbol_samples) * sin(ts(k));
end
% LPF va xac dinh - chung ta se rat don gian LPF bang phep trung % binh
xxx(1+(i-1)/2) = mean(cos_temp); yyy(1+(i-1)/2) = mean(sin_temp);
************ Khoi phuc du lieu thanh dang noi tiep******************** QAM_data_out_4(i) = xxx(1+(i-1)/2);
QAM_data_out_4(i+1) = yyy(1+(i-1)/2); end
********************** %Tinh toan giua cac muc khong
zeros_between = ((fft_size/2) - (num_carriers + num_zeros))/(num_carriers + num_zeros);
spaced_chunks = zeros(num_chunks,fft_size); %Them vao giua cac muc khong
i = 1;
for k = zeros_between +1:zeros_between +1:fft_size/2
spaced_chunks(1:num_chunks,k) = padded_chunks(1:num_chunks,i); i = i+1;
end
% Gap du lieu de tao ra mot ham le cho dau vao IFFT for i = 1:num_chunks
% Chu y: chi muc = 1 that ra la tan so mot chieu de ifft -> no khong % tao ban sao len truc y do thi
spaced_chunks(i,fft_size:-1:fft_size/2+2) = conj(spaced_chunks(i,2:fft_size/2));
Phụ lục www.4tech.com.vn
********Thuc hien xac dinh giua cac muc [-3, -1, 1, 3]****** for i = 1:data_length/2
if QAM_data_out_4(i) >= 1, QAM_data_out_4(i) = 3; elseif QAM_data_out_4(i) >= 0, QAM_data_out_4(i) = 1; elseif QAM_data_out_4(i) >= -1, QAM_data_out_4(i) = -1;
else QAM_data_out_4(i) = -3; end
end
******Chuyen doi du lieu 4 muc [-3, -1, 1, 3] ve du lieu phan cuc [-1, 1]****** QAM_data_out_pol = zeros(1,data_length); % "cheating"
for i = 1:2:data_length
switch QAM_data_out_4(1 + (i-1)/2) case -3 QAM_data_out_pol(i) = -1; QAM_data_out_pol(i+1) = -1; case -1 QAM_data_out_pol(i) = -1; QAM_data_out_pol(i+1) = 1; case 1 QAM_data_out_pol(i) = 1; QAM_data_out_pol(i+1) = -1; case 3 QAM_data_out_pol(i) = 1; QAM_data_out_pol(i+1) = 1; otherwise
disp('Error detected in switch statment - This should not be happening.');
end end
QAM_data_out = pol2bin(QAM_data_out_pol); % Chuyen doi ve du lieu nhi phan