Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 29 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
29
Dung lượng
56,04 KB
Nội dung
Chương3 : Chươngtrình nguồn
Lê Thanh Nhật-Trương Ánh Thu 257 GVHD :Ths. Hoàng Đình Chiến
CHƯƠNG 3
CHƯƠNG TRÌNH NGUỒN
Có tất cả 32 file chươngtrình chính, ở đây chỉ trình bày những chươngtrình chính.
Chương trình khởi động (init.m)
% R : tốc độ bit
% Fc : tần số sóng mang
% N : chiều dài bit cần truyền
% s : chuỗi bit truyền
% Sample : số mẫu trong 1 bit
% A : biên độ sóng mang
% bittrain : số bit huấn luyện
% bittransfer : số bit truyền mỗi lần
clear all;
global R;
global Fc;
global N;
global s Sample A bittrain bittransfer;
R=0;
Fc=0;
N=0;
Sample=50;
s=[];
A=1;
bittrain=10;
bittransfer=500;
randn('state',sum(100*clock));
rand('state',sum(100*clock));
Chương trình lưu các thông số cần thiết (callbacknext.m)
function callbacknext
global Fc R N Sample TypeMod;
Sample=round(20*Fc/R);
%Chon loai dieu che tin hieu
HModulation=findobj('tag','modu');
HModulation=get(HModulation,'Value');
if HModulation==1
TypeMod='BPSK';
else
TypeMod='QPSK';
end
Chương 3 : Chươngtrình nguồn
Lê Thanh Nhật-Trương Ánh Thu 258 GVHD :Ths. Hoàng Đình Chiến
%Chon cac loai nhieu
loainhieu;
totalSNR;
clear HModulation;
set(gcf,'Visible','off');
train;
Chương trình lưu thông số nhiễu (loainhieu.m)
function loainhieu;
global A Sample
HCheckNoise=findobj('tag','CheckNoise');
HCheckNoise=get(HCheckNoise,'Value');
HCheckFading=findobj('tag','CheckFading');
HCheckFading=get(HCheckFading,'Value');
HCheckCoChannel=findobj('tag','CheckCoChannel');
HCheckCoChannel=get(HCheckCoChannel,'Value');
HRadioSNR=findobj('tag','RadioSNR');
HRadioSNR=get(HRadioSNR,'Value');
HEditSNR=findobj('tag','EditSNR');
SNRNoise=get(HEditSNR,'String');
SNRNoise=str2num(SNRNoise);
HEditMean=findobj('tag','EditMean');
HEditMean=get(HEditMean,'String');
Means=str2num(HEditMean);
HEditVariance=findobj('tag','EditVariance');
HEditVariance=get(HEditVariance,'String');
Vars=str2num(HEditVariance);
HEditSNRFad=findobj('tag','EditSNRFad');
SNRFad=get(HEditSNRFad,'String');
SNRFad=str2num(SNRFad);
HSourceFad=findobj('tag','SourceFad');
SourceFad=get(HSourceFad,'string');
SourceFad=str2num(SourceFad);
HEditSNRCo=findobj('tag','EditSNRCo');
SNRCo=get(HEditSNRCo,'String');
SNRCo=str2num(SNRCo);
HSourceCo=findobj('tag','SourceCo');
SourceCo=get(HSourceCo,'String');
SourceCo=str2num(SourceCo);
Chương 3 : Chươngtrình nguồn
Lê Thanh Nhật-Trương Ánh Thu 259 GVHD :Ths. Hoàng Đình Chiến
save loainhieu HCheckNoise HCheckFading HCheckCoChannel HRadioSNR
SNRNoise Means Vars SNRFad SourceFad SNRCo SourceCo;
if HCheckFading
Ps=0.5*A^2; %Cong suat tin hieu
Pn=Ps*10^(-SNRFad/10); %Cong suat nhieu tong cong
RatioFad=[];
i=1;
while i<=SourceFad
if i==SourceFad
Pni=Pn; %Cong suat nhieu nguon thu i
else
Pni=Pn*rand;
end
Pn=Pn-Pni;
Pni=Pni*3;
RatioFad(i)=sqrt(Pni/Ps); %Ti le bien do Un/Us
i=i+1;
end
PhaseShiftFad=round(randn(1,SourceFad)*3*Sample);
save loainhieu RatioFad PhaseShiftFad -append;
end
if HCheckCoChannel
Ps=0.5*A^2;
Pn=Ps*10^(-SNRCo/10); %Cong suat nhieu tong cong
RatioCo=[];
i=1;
while i<=SourceCo
if i==SourceCo
Pni=Pn;
else
Pni=Pn*rand;
end
Pn=Pn-Pni;
RatioCo(i)=sqrt(Pni/Ps); %Ti le bien do Un/Us
i=i+1;
end
PhaseShiftCo=round(randn(1,SourceCo)*2*Sample);%Do doi phase tin
hieu nhieu
save loainhieu RatioCo PhaseShiftCo -append;
end
Chương trình xét chọn loại nhiễu (chonnhieu.m)
function [Noise,NoiseFading,NoiseCoChannel]=chonnhieu;
load loainhieu ;
if HCheckNoise==1
if HRadioSNR==1
Chương 3 : Chươngtrình nguồn
Lê Thanh Nhật-Trương Ánh Thu 260 GVHD :Ths. Hoàng Đình Chiến
Noise=whitenoise(SNRNoise); %Lay nhieu White Noise theo SNR
else
Noise=gaussnoise(Means,Vars); %Lay nhieu Gaussian
end
else
Noise=0;
end
if HCheckFading==1
NoiseFading=fading; %Lay nhieu Fading
else
NoiseFading=0;
end
if HCheckCoChannel==1
NoiseCoChannel=cochannel; %Lay nhieu CoChannel
else
NoiseCoChannel=0;
end
Chương trình tạo nhiễu nhiệt với SNR cho trước (whitenoise.m)
function out=Whitenoise(SNRNoise)
global bittransfer Sample A;
Ps=0.5*A^2;
n=randn(1,bittransfer*Sample);
out=10*n.*sqrt(Ps*10^(-SNRNoise/10));
clear n Ps;
Chương trình tạo nhiễu Gauss với giá trò trung bình và phương sai cho trước (gaussnoise.m)
function out=Gaussnoise(Mean,Var)
global bittransfer Sample;
NoiseSignal=randn(1,bittransfer*Sample);
out=NoiseSignal*3*Var+Mean;
clear NoiseSignal;
Chương trình tạo nhiễu Fading (fading.m)
function out=fading;
load loainhieu PhaseShiftFad RatioFad SourceFad;
global bittransfer Info Sample A t ;
out=0;
i=1;
while i<=SourceFad
Fadi=RatioFad(i)*Info;
if PhaseShiftFad(i)>0
Fadi(bittransfer*Sample:-
1:PhaseShiftFad(i)+1)=Fadi(bittransfer*Sample-PhaseShiftFad(i):-1:1);
Fadi(1:1:PhaseShiftFad(i))=0;
Chương 3 : Chươngtrình nguồn
Lê Thanh Nhật-Trương Ánh Thu 261 GVHD :Ths. Hoàng Đình Chiến
elseif PhaseShiftFad(i)<0
Fadi(1:1:bittransfer*Sample+PhaseShiftFad(i))=Fadi(1-
PhaseShiftFad(i):1:bittransfer*Sample);
Fadi(bittransfer*Sample+PhaseShiftFad(i)+1:1:bittransfer*Sample)=0;
end
out=out+Fadi;
i=i+1;
end
Chương trình tạo nhiễu đồng kênh (cochannel.m)
function out=cochannel;
load loainhieu RatioCo PhaseShiftCo SourceCo;
global R Fc bittransfer Sample t t0 A;
T=1/R;
i=1;
out=0;
while i<=SourceCo
Rn=R; %Toc do bit nhieu Rn
Nn=ceil(bittransfer*Rn/R); %so bit cua tin hieu nhieu dong kenh
Nn=ceil(Nn/2)*2; %Bao dam Nn la so chan bit dieu che QPSK
Tn=1/Rn;
n=randint(1,Nn); %Tao bit nhieu
Ai=RatioCo(i)*A; %Ai la bien do tin hieu nhieu
nEven(2:2:Nn)=n(2:2:Nn);
nEven(1:2:Nn-1)=n(2:2:Nn);
nOdd(1:2:Nn-1)=n(1:2:Nn-1);
nOdd(2:2:Nn)=n(1:2:Nn-1);
wt=2*pi*Fc*t;
Coi=Ai*(cos(wt+nOdd(ceil((t-t0)/Tn-
0.1/(Tn*Sample*R)))*pi)+sin(wt+nEven(ceil((t-t0)/Tn-0.1/(Tn*Sample*R)))*pi));
if PhaseShiftCo(i)>0
Coi(bittransfer*Sample:-1:PhaseShiftCo(i)+1)=Coi(bittransfer*Sample-
PhaseShiftCo(i):-1:1);
Coi(1:1:PhaseShiftCo(i))=0;
elseif PhaseShiftCo(i)<0
Coi(1:1:bittransfer*Sample+PhaseShiftCo(i))=Coi(1-
PhaseShiftCo(i):1:bittransfer*Sample);
Coi(bittransfer*Sample+PhaseShiftCo(i)+1:1:bittransfer*Sample)=0;
end
out=out+Coi;
i=i+1;
end
Chương trình chạy mô phỏng (callbackrun.m)
function callbackrun;
Chương 3 : Chươngtrình nguồn
Lê Thanh Nhật-Trương Ánh Thu 262 GVHD :Ths. Hoàng Đình Chiến
global Fc R N A t t0 Sample TypeMod s bittrain bittransfer;
global Info FiltedTransmit Receive FiltedReceive FiltedLow ss;
global AfterEq Decision;
% Info : Tín hiệu điều chế không có nhiễu
% FiltedTransmit : Tín hiệu điều chế sau khi qua BPF
% Receive : Tín hiệu thu
% FiltedReceive : Tín hiệu thu sau khi qua BPF
% FiltedLow : Tín hiệu thu sau LPF
% ss : chuỗi bit thu được không qua bộ cân bằng
% AfterEq : Tín hiệu thu sau khi qua bộ cân bằng
% Decision : Chuỗi bit thu được sau khi qua bộ cân bằng
luutrain;
set(gcf,'Visible','off');
t0=0;
epre=0;
etrain=0;
Sample=round(20*Fc/R);
T=1/R;
%Huan luyen mang ban dau
t=linspace(T/Sample,bittransfer*T,bittransfer*Sample);
s=randint(1,bittransfer);
%Dieu che
if TypeMod=='BPSK'
bpsk;
FiltedTransmit=loc(R,Info);
else
qpsk;
FiltedTransmit=loc(R/2,Info);
end
%Kenh truyen
[Noise,NoiseFad,NoiseCo]=chonnhieu;
Receive=FiltedTransmit+Noise+NoiseFad+NoiseCo;
%Giai dieu che va huan luyen mang
if TypeMod=='BPSK'
FiltedReceive=loc(R,Receive);
FiltedLow=debpsk(FiltedReceive);
ss=detectorinter(FiltedLow);
for i=1:bittrain
Target((i-1)*Sample+1:i*Sample)=(-2*s(i)+1)*A;
end
home
Chương 3 : Chươngtrình nguồn
Lê Thanh Nhật-Trương Ánh Thu 263 GVHD :Ths. Hoàng Đình Chiến
net=huanluyen(FiltedLow(Sample+1:(bittrain+1)*Sample),Target);
[AfterEq,du]=mang(net,FiltedLow);
AfterEq(1)=[];
Decision=detector(AfterEq);
else
FiltedReceive=loc(R/2,Receive);
FiltedLow=deqpsk(FiltedReceive);
ss=detectorinter(FiltedLow);
home
for i=1:bittrain
Target((i-1)*2*Sample+1:i*2*Sample)=(-2*s(2*i-1)+1)*A;
end
netOdd=huanluyen(FiltedLow(1,2*Sample+1:2*(bittrain+1)*Sample),Target);
for i=1:bittrain
Target((i-1)*2*Sample+1:i*2*Sample)=(2*s(2*i)-1)*A;
end
netEven=huanluyen(FiltedLow(2,2*Sample+1:2*(bittrain+1)*Sample),Target)
AfterEq=[];
[AfterEq(1,:),duOdd]=mang(netOdd,FiltedLow(1,:));
[AfterEq(2,:),duEven]=mang(netEven,FiltedLow(2,:));
AfterEq(:,1)=[];
Decision=detector(AfterEq);
end
totals=bittransfer;
epre=epre+sum(abs(s-ss));
berpre=epre/totals;
etrain=etrain+sum(abs(s-Decision));
bertrain=etrain/totals;
hinhve(berpre,bertrain,totals);
pause(1);
%Chay mo phong mang
rep=N/bittransfer;
if rep>1
t0=T*bittransfer;
for i=2:rep
t=linspace(t0+T/Sample,t0+bittransfer*T,bittransfer*Sample);
s=randint(1,bittransfer);
%Dieu che
if TypeMod=='BPSK'
Chương 3 : Chươngtrình nguồn
Lê Thanh Nhật-Trương Ánh Thu 264 GVHD :Ths. Hoàng Đình Chiến
bpsk;
FiltedTransmit=loc(R,Info);
else
qpsk;
FiltedTransmit=loc(R/2,Info);
end
%Kenh truyen
[Noise,NoiseFad,NoiseCo]=chonnhieu;
Receive=FiltedTransmit+Noise+NoiseFad+NoiseCo;
%Giai dieu che
if TypeMod=='BPSK'
FiltedReceive=loc(R,Receive);
FiltedLow=debpsk(FiltedReceive);
ss=detectorinter(FiltedLow);
[AfterEq,du]=mang(net,FiltedLow,du);
Decision=detector(AfterEq);
else
FiltedReceive=loc(R/2,Receive);
FiltedLow=deqpsk(FiltedReceive);
ss=detectorinter(FiltedLow);
AfterEq=[];
[AfterEq(1,:),duOdd]=mang(netOdd,FiltedLow(1,:));
[AfterEq(2,:),duEven]=mang(netEven,FiltedLow(2,:));
AfterEq(:,1)=[];
Decision=detector(AfterEq);
end
totals=totals+bittransfer;
epre=epre+sum(abs(s-ss));
berpre=epre/totals;
etrain=etrain+sum(abs(s-Decision));
bertrain=etrain/totals;
hinhve(berpre,bertrain,totals);
pause(1);
t0=t0+T*bittransfer;
end
end
msgbox('The program finished')
Chương trình điều chế BPSK không có nhiễu (bpsk.m)
function bpsk
global R Fc s bittransfer Info Sample A t;
Chương 3 : Chươngtrình nguồn
Lê Thanh Nhật-Trương Ánh Thu 265 GVHD :Ths. Hoàng Đình Chiến
Info=[];
ss=[0 1];
T=1/R;
tt=linspace(T/Sample,2*T,2*Sample);
wt=2*pi*Fc*tt;
ref=A*cos(wt+ss(ceil(tt*R-0.1/Sample))*pi);
ref=reshape(ref,Sample,2)';
for i=1:bittransfer
Info((i-1)*Sample+1:i*Sample)=ref(s(i)+1,:);
end
clear T ss ref tt i wt;
Chương trình điều chế QPSK không có nhiễu (bpsk.m)
function qpsk
global Fc bittransfer R s Info A Sample;
Info=[];
sOdd =[0 0 0 0 1 1 1 1];
sEven=[0 0 1 1 0 0 1 1];
T=1/R;
tt=linspace(T/Sample,8*T,8*Sample);
wt=2*pi*Fc*tt;
ref=A*(cos(wt+sOdd(ceil(tt*R-0.1/Sample))*pi)-sin(wt+sEven(ceil(tt*R-
0.1/Sample))*pi));
ref=reshape(ref,2*Sample,4)';
for i=1:bittransfer/2
Info((i-1)*2*Sample+1:i*2*Sample)=ref(2*s(2*i-1)+s(2*i)+1,:);
end
clear wt sEven sOdd ref T tt;
Chương trình giải điều chế BPSK không có nhiễu (debpsk.m)
function [out]=debpsk(signal)
global Fc t R bittransfer Sample;
wt=2*pi*Fc*t;
y=2*cos(wt);
PreDeModulated=signal.*y;
out=lowpass(R,PreDeModulated);
Chương trình giải điều chế QPSK không có nhiễu (debpsk.m)
function [out]=deqpsk(signal)
global R Fc t bittransfer Sample ;
Chương 3 : Chươngtrình nguồn
Lê Thanh Nhật-Trương Ánh Thu 266 GVHD :Ths. Hoàng Đình Chiến
wt=2*pi*Fc*t;
y=2*cos(wt);
z=2*sin(wt);
PreDeModulated1=signal.*y;
PreDeModulated2=signal.*z;
out(1,:)=lowpass(R/2,PreDeModulated1);
out(2,:)=lowpass(R/2,PreDeModulated2);
Chương trình thiết kế bộ lọc băng thông BPF (loc.m)
% Fb : tần số bit thực
% Với BPSK Fb=R
% Với QPSK Fb=R/2
function out=loc(Fb,signal);
global Fc Sample R;
Fs=Sample*R;
%Dung ButterWorth
bac=5;
passband=[Fc-Fb Fc+Fb]/(Fs/2);
[Bb Ab]=butter(bac,passband);
out=filter(Bb,Ab,signal);
clear passband bac Bb Ab;
Chương trình thiết kế bộ lọc thông thấp LPF (lowpass.m)
function out=lowpass(Fb,signal);
global Sample R Fc;
Fs=Sample*R;
%Dung ButterWorth
bac=5;
passlow=Fc/(Fs/2);
[Bb Ab]=butter(bac,passlow);
out=filter(Bb,Ab,signal);
clear passband bac Bb Ab;
Chương trình lưu các thông số cần cho mạng Neural Networks (luutrain.m)
function luutrain;
FcnName=['compet ';'hardlim ';'hardlims';'logsig ';'poslin
';'purelin ';'radbas ';'satlin ';'satlins ';'softmax ';'tansig
';'tribas '];
HPopupNetworks=findobj('tag','PopupNetworks');
HPopupNetworks=get(HPopupNetworks,'Value');
[...]... 'BackgroundColor',[0.8 0.8078 431 37254902 'FontName','Vni-book', 'FontSize',11, 'HorizontalAlignment','left', 'ListboxTop',0, 'Position',[220 31 9.25 100 15], 'String','After LPF Rev', 'Style','Text', 'Tag','FiltedLow'); Lê Thanh Nhật-Trương Ánh Thu 277 0.8078 431 37254902], 0.8078 431 37254902], 0.8078 431 37254902], 0.8078 431 37254902], GVHD :Ths Hoàng Đình Chiến Chương3 : Chươngtrình nguồn h1 = uicontrol('Parent',h,... 0.8078 431 37254902 0.8078 431 37254902], 'FontName','Vni-book', 'FontSize',11, 'HorizontalAlignment','left', 'ListboxTop',0, 'Position',[15 36 5.25 75 15], 'String','Data Input', 'Style','Text', 'Tag','S', 'Value',1); h1 = uicontrol('Parent',h, 'Units','points', 'BackgroundColor',[0.8 0.8078 431 37254902 0.8078 431 37254902], Lê Thanh Nhật-Trương Ánh Thu 276 GVHD :Ths Hoàng Đình Chiến Chương3 : Chương. .. 'Units','points', 'BackgroundColor',[0.8 0.8078 431 37254902 0.8078 431 37254902], 'FontName','Vni-book', 'FontSize',11, 'HorizontalAlignment','left', 'ListboxTop',0, 'Position',[440 36 5.25 77 15], 'String','Without Eq', 'Style','Text', 'Tag','SS'); h1 = uicontrol('Parent',h, 'Units','points', 'BackgroundColor',[0.8 0.8078 431 37254902 0.8078 431 37254902], 'FontName','Vni-book', 'FontSize',11,... 'Units','points', 'BackgroundColor',[0.8 039 2156862 0.8 039 215686 0.8 039 2156861], 'FontSize',12, 'HorizontalAlignment','left', 'ListboxTop',0, 'Position',[447 120 150 16], 'String','Modulation : QPSK', 'Style','text', 'Tag','TextMod'); end Lê Thanh Nhật-Trương Ánh Thu 275 GVHD :Ths Hoàng Đình Chiến Chương3 : Chương trình nguồn BER2=['Real BER before train ' num2str(berpre,5)]; BER3=['Real BER after train '... :Ths Hoàng Đình Chiến Chương3 : Chươngtrình nguồn h1 h1 h1 h1 'ListboxTop',0, 'Position',[ 135 38 6.75 28.5 15], 'String','Axes 2', 'Style','text', 'Tag','Axes2'); = uicontrol('Parent',h, 'Units','points', 'BackgroundColor',[0.79215686278 0.79215686278 0.7921568627498], 'FontName','vni-times', 'FontSize',10, 'HorizontalAlignment','left', 'ListboxTop',0, 'Position', [31 0 38 6.75 28.5 15], 'String','Axes... 'FontName','vni-times', Lê Thanh Nhật-Trương Ánh Thu 274 GVHD :Ths Hoàng Đình Chiến Chương3 : Chương trình nguồn 'FontSize',12, 'ListboxTop',0, 'Position',[495 215 60 20], 'String','Spectrum', 'Tag','ButtonSpectrum'); h1 = uicontrol('Parent',h, 'Units','points', 'BackgroundColor',[0.8 039 2157451 0.8 039 27451 0.8 039 21568627451], 'FontSize',12, 'HorizontalAlignment','left', 'ListboxTop',0, 'Position',[447... 'Position',[105 36 8 10 10], 'Style','checkbox', 'Tag','AxesS', 'Value',1); h1 = uicontrol('Parent',h, 'Units','points', 'BackgroundColor',[0.75294117647 0.7529411764705 0.75294117647], 'Callback','global axesdown S;ve(gcbo,axesdown,S,1);', 'ListboxTop',0, 'Position',[1 43 368 10 10], 'Style','checkbox', 'Tag','AxesS'); Lê Thanh Nhật-Trương Ánh Thu 278 GVHD :Ths Hoàng Đình Chiến Chương3 : Chương trình. .. Nhật-Trương Ánh Thu 268 GVHD :Ths Hoàng Đình Chiến Chương3 : Chương trình nguồn HTextTransfer=findobj('tag','TextTransferDown'); set(HTextTransfer,'Visible','off'); HTextLayer1=findobj('tag','TextLayer1'); set(HTextLayer1,'Visible','off'); HTextLayer2=findobj('tag','TextLayer2'); set(HTextLayer2,'Visible','off'); HTextLayer3=findobj('tag','TextLayer3'); set(HTextLayer3,'Visible','off'); for i=1:HSliderLayer... 'HorizontalAlignment','left', 'ListboxTop',0, 'Position',[ 537 .5 38 6.75 28.5 15], 'String','Axes 2', 'Style','text', 'Tag','Axes2'); else axesup=findobj('tag','Axesve1'); Lê Thanh Nhật-Trương Ánh Thu 282 GVHD :Ths Hoàng Đình Chiến Chương3 : Chương trình nguồn axes(axesup); line(1,1)=plot(t(1:sobit*Sample),S); set(gca,'tag','Axesve1'); set(gca,'Position',[0. 13 0.48 0.60 0.24]); xlabel('Time (s)'); ylabel('Amplitude');... 'BackgroundColor',[0.8 0.8078 431 37254902 'FontName','Vni-book', 'FontSize',11, 'HorizontalAlignment','left', 'ListboxTop',0, 'Position',[220 36 5.25 72 15], 'String','Rev Sig', 'Style','Text', 'Tag','Receive'); = uicontrol('Parent',h, 'Units','points', 'BackgroundColor',[0.8 0.8078 431 37254902 'FontName','Vni-book', 'FontSize',11, 'HorizontalAlignment','left', 'ListboxTop',0, 'Position',[220 34 2.25 100 15], . Chương 3 : Chương trình nguồn
Lê Thanh Nhật-Trương Ánh Thu 257 GVHD :Ths. Hoàng Đình Chiến
CHƯƠNG 3
CHƯƠNG TRÌNH NGUỒN
Có tất cả 32 file chương trình. out=out+Coi;
i=i+1;
end
Chương trình chạy mô phỏng (callbackrun.m)
function callbackrun;
Chương 3 : Chương trình nguồn
Lê Thanh Nhật-Trương Ánh