Tải bản đầy đủ (.doc) (29 trang)

Chương trình nguồn

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (116.97 KB, 29 trang )

Chương 3 : Chương trình nguồn
CHƯƠNG 3
CHƯƠNG TRÌNH NGUỒN
Có tất cả 32 file chương trình chính, ở đây chỉ trình bày những chương trì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';
Lê Thanh Nhật-Trương Ánh Thu 1 GVHD :Ths. Hoàng Đình Chiến
Chương 3 : Chương trình nguồn
end
%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');
Lê Thanh Nhật-Trương Ánh Thu 2 GVHD :Ths. Hoàng Đình Chiến
Chương 3 : Chương trình nguồn
SourceCo=str2num(SourceCo);
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
Lê Thanh Nhật-Trương Ánh Thu 3 GVHD :Ths. Hoàng Đình Chiến
Chương 3 : Chương trình nguồn
if HRadioSNR==1
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
Lê Thanh Nhật-Trương Ánh Thu 4 GVHD :Ths. Hoàng Đình Chiến
Chương 3 : Chương trình nguồn
Fadi(bittransfer*Sample:-1:PhaseShiftFad(i)
+1)=Fadi(bittransfer*Sample-PhaseShiftFad(i):-1:1);
Fadi(1:1:PhaseShiftFad(i))=0;
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
Lê Thanh Nhật-Trương Ánh Thu 5 GVHD :Ths. Hoàng Đình Chiến
Chương 3 : Chương trình nguồn
Chương trình chạy mô phỏng (callbackrun.m)
function callbackrun;
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);
Lê Thanh Nhật-Trương Ánh Thu 6 GVHD :Ths. Hoàng Đình Chiến
Chương 3 : Chương trình nguồn
for i=1:bittrain
Target((i-1)*Sample+1:i*Sample)=(-2*s(i)+1)*A;
end
home
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),Targ
et)

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);
Lê Thanh Nhật-Trương Ánh Thu 7 GVHD :Ths. Hoàng Đình Chiến
Chương 3 : Chương trình nguồn
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
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')
Lê Thanh Nhật-Trương Ánh Thu 8 GVHD :Ths. Hoàng Đình Chiến
Chương 3 : Chương trình nguồn
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;
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);

Lê Thanh Nhật-Trương Ánh Thu 9 GVHD :Ths. Hoàng Đình Chiến
Chương 3 : Chương trình nguồn
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 ;
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 '];
Lê Thanh Nhật-Trương Ánh Thu 10 GVHD :Ths. Hoàng Đình Chiến
Chương 3 : Chương trình nguồn
HPopupNetworks=findobj('tag','PopupNetworks');
HPopupNetworks=get(HPopupNetworks,'Value');
HPopupLearn=findobj('tag','PopupLearn');
HPopupLearn=get(HPopupLearn,'Value');
HSliderTapDelay=findobj('tag','SliderTapDelay');
HSliderTapDelay=get(HSliderTapDelay,'Value');
HSliderLayer=findobj('tag','SliderLayer');
HSliderLayer=get(HSliderLayer,'Value');
HPopupPerf=findobj('tag','PopupPerf');
HPopupPerf=get(HPopupPerf,'Value');
for i=1:HSliderLayer
str=num2str(i);
H=findobj('tag',['SliderLayer',str]);
Neuron(i)=get(H,'Value');
H=findobj('tag',['PopupTransfer',str]);
TransferFcn(i,:)=FcnName(get(H,'Value'),:);
end
clear H str i;

save luutrain
Chương trình chọn loại mạng Neural Networks (calbacknetworks.m)
function callbacknetworks;
HPopupNetworks=findobj('tag','PopupNetworks');
h=get(HPopupNetworks,'Value');
if h==1|h==2|h==3|h==4|h==5|h==6|h==7|h==8|h==9|h==10|h==11|h==12
HTextLearn=findobj('tag','TextLearn');
set(HTextLearn,'Visible','on');

HPopupLearn=findobj('tag','PopupLearn');
set(HPopupLearn,'Visible','on');

HTextLayer=findobj('tag','TextLayer');
set(HTextLayer,'Visible','on');

HEditLayer=findobj('tag','EditLayer');
set(HEditLayer,'Visible','on','string',num2str(3));

HSliderLayer=findobj('tag','SliderLayer');
set(HSliderLayer,'Visible','on','Value',3);
HSliderLayer=get(HSliderLayer,'Value');

Lê Thanh Nhật-Trương Ánh Thu 11 GVHD :Ths. Hoàng Đình Chiến

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×