Báo cáo Mô phỏng kênh Rayleigh theo phương pháp Rice

Tài liệu Báo cáo Mô phỏng kênh Rayleigh theo phương pháp Rice: Phụ lục Mã nguồn Matlab và các kết quả mô phỏng Bài số 1: Mô phỏng kênh Rayleigh theo phương pháp Rice Bài 1.1: Tính các thông số f, C, θ: %================================ %Tinh cac thong so f, C, th %================================ clear f_m=91; %Tan so Doppler lon nhat b=1; %Phuong sai cua qua trinh g(t) N1=9; %So phan tu g(t) phan thuc mo phong N2=10; % So phan tu g(t) phan ao mo phong for n=1:1:N1; c1(n)=sqrt(2*b/N1); f1(n)=f_m*sin(pi*(n-0.5)/(2*N1)); th1(n)=2*pi*n/(N1+1); end for n=1:1:N2; c2(n)=sqrt(2*b/N2); f2(n)=f_m*sin(pi*(n-0.5)/(2*N2)); th2(n)=2*pi*n/(N2+1); end save ex4p1_Res f1 f2 c1 c2 th1 th2 Bài 1.2: Lập hàm g.m để tính toán git: %======================================= %Ham tao qua trinh g(t) %======================================= function y=g(c,f,th,t) y=zeros(size(t)); for n=1:length(f); y=y+c(n)*cos(2*pi*f(n).*t+th(n)); end; Bài 1.3: Viết hàm để đưa ra biên độ kênh α(t)=g(t)=g1+g2 và vẽ hàm αdB(t)=20logα(t) : %=========...

docx17 trang | Chia sẻ: hunglv | Lượt xem: 1840 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu Báo cáo Mô phỏng kênh Rayleigh theo phương pháp Rice, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Phụ lục Mã nguồn Matlab và các kết quả mô phỏng Bài số 1: Mô phỏng kênh Rayleigh theo phương pháp Rice Bài 1.1: Tính các thông số f, C, θ: %================================ %Tinh cac thong so f, C, th %================================ clear f_m=91; %Tan so Doppler lon nhat b=1; %Phuong sai cua qua trinh g(t) N1=9; %So phan tu g(t) phan thuc mo phong N2=10; % So phan tu g(t) phan ao mo phong for n=1:1:N1; c1(n)=sqrt(2*b/N1); f1(n)=f_m*sin(pi*(n-0.5)/(2*N1)); th1(n)=2*pi*n/(N1+1); end for n=1:1:N2; c2(n)=sqrt(2*b/N2); f2(n)=f_m*sin(pi*(n-0.5)/(2*N2)); th2(n)=2*pi*n/(N2+1); end save ex4p1_Res f1 f2 c1 c2 th1 th2 Bài 1.2: Lập hàm g.m để tính toán git: %======================================= %Ham tao qua trinh g(t) %======================================= function y=g(c,f,th,t) y=zeros(size(t)); for n=1:length(f); y=y+c(n)*cos(2*pi*f(n).*t+th(n)); end; Bài 1.3: Viết hàm để đưa ra biên độ kênh α(t)=g(t)=g1+g2 và vẽ hàm αdB(t)=20logα(t) : %===================================== %Tinh bien do kenh va ham alpha %===================================== clear; load ex4p1_Res f1 f2 c1 c2 th1 th2 f_s=270800; %Tan so lay mau T_sim=0.4; %Thoi gian mo phong t=0:1/f_s:T_sim; % Thoi gian mo phong t g1=g(c1,f1,th1,t); g2=g(c2,f2,th2,t); g=g1+j*g2; alpha=abs(g); alpha_dB=20*log10(alpha); plot(t,alpha_dB); title('Bien do kenh (dB)'); xlabel('\alpha(t)'); legend('\alpha(t)in dB',0); Đồ thị: Bài 1.4: xác định các thông số giá trị trung bình, độ biến đổi, hàm mật độ xác suất (PDF): %====================================== %Ham tinh gia tri trung binh va % do bien doi cua g1(t), g(t), alpha(t) %Ham mat do xac suat cua cac qua trinh % bang bieu do %====================================== clear; load ex4p1_Res f1 f2 c1 c2 th1 th2 f_s=50000; %Tan so lay mau T_sim=20; %Thoi gian mo phong t=0:1/f_s:T_sim; g1=g(c1,f1,th1,t); g2=g(c2,f2,th2,t); g=g1+j*g2; alpha=abs(g); mean_g=mean(g); %Gia tri trung binh cua g mean_g1=mean(g1); % Gia tri trung binh cua g1 mean_alpha=mean(alpha); % Gia tri trung binh cua alpha var_g=var(g); %Do bien doi cua g var_g1=var(g1); % Do bien doi cua g1 var_alpha=var(alpha); % Do bien doi cua alpha n=length(alpha); x=0:0.1:3; %Thoi gian tinh bang giay b=hist(alpha,x); %Bieu do mat do xac suat cua alpha figure(1); stem(x,b/n/(x(2)-x(1)));%Ve tin hieu roi rac hold on; k=0; %He so k'=s^2/(2*b_0) total_p=2; %Cong suat nhan duoc alpha_p=(2.*x.*(k+1)/total_p).*exp(-k-((k+1).*x.^2/total_p)).*besseli(0,(2.*x.*sqrt(k*(k+1)/total_p))); plot(x,alpha_p,'r'); title('Mat do xac suat cua alpha(x)'); xlabel('x'); ylabel('P_{\alpha}(x)'); legend('p_{\alpha}(x)','Phan bo Rayleigh'); hold off; figure(2); n1=length(g1); x1=-4:0.1:4; c=hist(g1,x1); %Bieu do mat do xac suat cua g1 stem(x1,c/n1/(x1(2)-x1(1))); hold on; p=(1/sqrt(2*pi))*exp(-x1.^2/2); plot(x1,p,'r'); title('Mat do xac suat PDF cua g1'); xlabel('x'); ylabel('P_{g1}(x)'); legend('p_{g1}(x)','Phan bo Gaussian'); hold off; Đồ thị: Bài số 2: Mô hình kênh Fadding phân tập đa đường theo phương pháp Monte Carlo Bài 2.1: Mô hình kênh phân tập đa đường : Hàm mô hình Monte Carlo %========================================================================== %Ham mo hinh kenh phan tap da duong theo phuong phap Monte Carlo %========================================================================== function [h,t_next] =MCM_channel_model(u,initial_time,number_of_summations,symbol_duration,f_dmax,channel_coefficients); %u la bien ngau nhien duoc dung de roi rac tan so, pha cua hieu uong Doppler %number_of_summation: so luong hoac pha roi rac duoc su dung trong %phuong phap Monte Carlo %symbol+duration la khoang thoi gian lay mau cua tin hieu %f_fmax La tan so Doppler lon nhat t=initial_time; %thoi gian bat dau quan sat kenh Channel_Length=length(channel_coefficients); % Chieu dai dap ung kenh h_vector=[]; %Vector mo hinh CIR for k=1:Channel_Length; u_k=u(k,:); %Mot bien ngau nhien cua k phi=2*pi*u_k; %tan so Doppler roi rac su dung trong Monte Carlo f_d=f_dmax*sin(2*pi*u_k); h_tem=channel_coefficients(k)*1/(sqrt(number_of_summations))*sum(exp(j*phi).*exp(j*pi*f_d*t)); h_vector=[h_vector,h_tem]; end; h=h_vector; t_next=initial_time+symbol_duration; end Chương trình chính: %========================================================================== %Chuong trinh chinh mo phong phuong phap Monte Carlo %========================================================================== clear all; %Dat cac thong so NFFT=64; %Chieu dai FFT t_a=8.0000e-007; %Thoi gian lay mau tin hieu 1/t_a T_S=NFFT*t_a; %Thoi gian quan sat number_of_summations=40; f_dmax=0.0; %Tan so Doppler lon nhat channel_profile=[1.0000,0.8487,0.7663,0.7880,0.6658,0.6658,0.5174,0.0543,0.0456]; %He so cong suat tre rho=channel_profile; N_P=length(rho); %Chieu dai dap ung kenh u=rand(N_P,number_of_summations); %Bien ngau nhien initial_time=1.1; %Thoi gian bat dau h=[]; %vector CIR H=[]; %vector CTF for i= 1:100; h_i=MCM_channel_model(u,initial_time,number_of_summations,T_S,f_dmax,rho); h_i_tem=[h_i,zeros(1,NFFT-N_P)]; H_i_tem=fft(h_i_tem); H_i=[H_i_tem(NFFT/2+1:NFFT),H_i_tem(1:NFFT/2)]; initial_time=initial_time+T_S; h=[h;h_i]; H=[H;H_i]; end; figure(2); mesh(abs(H)) xlabel('f in B=1.25MHz') ylabel('t in 1.024e-0.4s') zlabel('H(f,t)') title('f_{D,max}=0.0Hz') Lần lượt thay fD,max bằng 0.0Hz, 5.0Hz và 500.0Hz ta có kết quả mô phỏng: Đồ thị: Bài 2.2: So sánh hàm tự tương quang thời gian của kênh cho 2 trường hợp: %========================================================================== %chuong trinh uoc luong ham tu tuong tuong quan thoi gian cua kenh %========================================================================== clear all; NFFT=64; t_a=8.0000e-007; T_S=NFFT*t_a; number_of_summations=40; f_dmax1=90.0; f_dmax2=9.0; channel_profile=[1.0000,0.8487,0.7663,0.7880,0.6658,0.5644,0.5174,0.0543,0.0465]; rho=channel_profile; N_P=length(rho); u=rand(N_P,number_of_summations); T_S=NFFT*t_a; NofSymbol=1000; t=0.1; H_sequence1=[]; H_sequence2=[]; for i=0:NofSymbol-1; [h1]=MCM_channel_model(u,t,number_of_summations,T_S,f_dmax1,rho); [h2]=MCM_channel_model(u,t,number_of_summations,T_S,f_dmax2,rho); h_extended1=[h1,zeros(1,NFFT-length(h1))]; h_extended2=[h2,zeros(1,NFFT-length(h2))]; H1=fft(h_extended1); H2=fft(h_extended2); H_f11=H1(3); H_f12=H2(3); H_sequence1=[H_sequence1,H_f11]; H_sequence2=[H_sequence2,H_f12]; t=t+T_S; end; time_autoc1=xcorr(H_sequence1,'coeff'); time_autoc2=xcorr(H_sequence2,'coeff'); tau1=-(NofSymbol-1)*T_S:T_S:(NofSymbol-1)*T_S; tau2=-(NofSymbol-1)*T_S:T_S:(NofSymbol-1)*T_S; plot(tau1,real(time_autoc1),'k.'); xlabel('\Delta t (s)'); ylabel('Tuong quan thoi gian R(\Delta t)'); hold on; plot(tau2,real(time_autoc2),'k.'); legend('f_{D,max}=9.0Hz','f_{D,max}=90.0Hz'); Đồ thị: Bài số 3: Mô phỏng hệ thống OFDM qua kênh vô tuyến Bài 3.1: mô phỏng hệ thống đa sóng mang tần trực giao (OFDM) sử dụng các thông số lấy từ chuẩn HyperLAN/2: Code hàm “OFDM_Modulator” function [y] = OFDM_Modulator(data,NFFT,G) chnr=length(data); N=NFFT; x=[data,zeros(1,NFFT-chnr)]; a=ifft(x);%fft y=[a(NFFT-G+1:NFFT),a];%chen khoang bao ve end Code hàm “OFDM_Demodulator” function [y] = OFDM_Demodulator(data,chnr,NFFT,G) %Chen khoang bao ve x_remove_gaurd_interval=[data(G+1:NFFT+G)]; x=fft(x_remove_gaurd_interval); y=x(1:chnr); end Code chương trình chính: %============================= %Chuong trinh chinh %============================ clear all; NFFT=64; %Chieu dai NFFT G=9; %Khoang bao ve M_ary=16; %Dang dieu che QAM t_a=50*10^(-9);%Thoi gian lay mau channel_profile=[1.0000,0.8487,0.7663,0.7880,0.6658,0.5644,0.5174,0.0543,0.0465]; rho=channel_profile; h=sqrt(rho); N_P=length(rho); H=fft([h,zeros(1,NFFT-N_P)]); NofOFDMSymbol=100; %So ky tu cua OFDM length_data=(NofOFDMSymbol)*NFFT; %Chieu dai tong cong cua du lieu %Bits nguon source_data=randint(length_data,sqrt(M_ary)); %Bit de ma hoa symbols=bi2de(source_data); %Dieu che QAM trong dai tan co so QAM_Symbol=dmodce(symbols,1,1,'qam',M_ary); %Chuan bi lay mau du lieu Data_Pattern=[]; for i=0:NofOFDMSymbol-1; QAM_tem=[]; for n=1:NFFT; QAM_tem=[QAM_tem,QAM_Symbol(i*NFFT+n)]; end; Data_Pattern=[Data_Pattern;QAM_tem]; clear QAM_tem; end; ser=[];%Dat so ky tu bi loi la vector rong snr_min=0; snr_max=25; step=1; for snr=snr_min:step:snr_max; snr=snr-10*log10((NFFT-G)/NFFT); rs_frame=[];%Ma tran tin hieu nhan for i=0:NofOFDMSymbol-1; %Dieu che OFDM OFDM_signal_tem=OFDM_Modulator(Data_Pattern(i+1,:),NFFT,G); %Tin hieu nhan duoc qua kenh da duong duoc tao ra boi phep chap rs=conv(OFDM_signal_tem,h); %Nhieu duoc them vao rs=awgn(rs,snr,'measured','dB'); rs_frame=[rs_frame;rs]; clear OFDM_signal_tem; end; %------------------ %Nhan tin hieu %------------------ Receiver_Data=[];%Chuan bi ma tran de nhan ky tu d=[];%Ky tu giai ma data_symbol=[]; for i=1:NofOFDMSymbol; if(N_P>G+1)&(i>1) previous_symbol=rs_frame(i-1,:); ISI_term=previuos_symbol(NFFT+2*G+1:NFFT+G+N_P-1); ISI=[ISI_term,zeros(1,length(previuos_symbol)-length(ISI_term))]; rs_i=rs_frame(i,:)+ISI; else rs_i=rs_frame(i,:); end; %Giai ma OFDM Demodulated_signal_i=OFDM_Demodulator(rs_i,NFFT,NFFT,G); d=Demodulated_signal_i./H; demodulated_symbol_i=ddemodce(d,1,1,'QAM',M_ary); data_symbol=[data_symbol,demodulated_symbol_i]; end; data_symbol=data_symbol'; %Tinh toan ky tu loi [number,ratio]=symerr(symbols,data_symbol); ser=[ser,ratio]; end; snr=snr_min:step:snr_max; semilogy(snr,ser,'bo'); ylabel('SER'); xlabel('SNR in dB'); Kết quả mô phỏng: Bài 3.2: Thay G=0 (không có khoảng bảo vệ) và công suất trễ : channel_profile=[1.0000,0.6095,0.4945,0.3940,0.2371,0.1900,0.1159,0.0699,0.0462]; ta có đồ thị SER của hệ thống:

Các file đính kèm theo tài liệu này:

  • docxbao_cao_thong_tin_vo_tuyen.docx
Tài liệu liên quan