?? d_bpsk_sim_function.m
字號:
function [BER,Errors]=D_BPSK_sim_function(N,EbNo,delay,FilterSwitch);
%DPSK差分解調
SamplesPerSymbol=20 ;
BlockSize=5000;
NoiseSigma=sqrt(SamplesPerSymbol/(2*EbNo));
DetectedSymbols=zeros(1,BlockSize);
NumberOfBlocks=floor(N/BlockSize);
% ButterWorths 濾波器
% [BTx,ATx]=butter(5,2/SamplesPerSymbol);
% [TxOutput,TxFilterState]=filter(BTx,ATx,0);
% Raised_Cosine 濾波器
alpha=0.4; %滾降系數
T=1/2400; %碼率
t=[-3*T:2.3*T/7:3*T];
b=sinc(t./T).*(cos(pi*alpha*t./T)./(1-4*alpha^2*t.^2/T^2))/sqrt(10^0.9740296);
[TxOutput,TxFilterState] = filter(b,1,0); % Desired signal
[RxInput,RxFilterState] = filter(b,1,0); % Desired signal
BRx=ones(1,SamplesPerSymbol);
ARx=1;
Errors=0;
SymbolSamples=zeros(1,(BlockSize+1)*SamplesPerSymbol);
TxSymbolsOrigin=round(rand(1,BlockSize));
TxSymbols(1)=1;
for m=1:BlockSize+1
if m~=1
TxSymbols(m)=mod(TxSymbols(m-1)+TxSymbolsOrigin(m-1),2);
end
for n=1:SamplesPerSymbol
index=(m-1)*SamplesPerSymbol+n;
SymbolSamples(1,index)=(-1)^TxSymbols(m);
end
end
if FilterSwitch==0
TxOutput=SymbolSamples;
else
[TxOutput,TxFilterState]=filter(b,1,SymbolSamples,TxFilterState);
% [TxOutput,TxFilterState]=filter(BTx,ATx,SymbolSamples,TxFilterState);
end
R=2400;
fs=SamplesPerSymbol*R;
ts=1/fs;
KNN=1:SamplesPerSymbol*(BlockSize+1);
TxOutput=TxOutput.*cos(2*pi*4800*KNN*ts)*sqrt(2); %exp(i*2*pi*480*KNN*ts)*exp(i*0.1*pi);
NoiseSamples=NoiseSigma*randn(size(TxOutput));
RxInput=TxOutput+NoiseSamples;
% RxInput=RxInput.*cos(2*pi*4800*KNN*ts)*sqrt(2);
[RxInput,RxFilterState]=filter(b,1,RxInput,RxFilterState);
RxInput=[RxInput(1:(BlockSize+1)*SamplesPerSymbol)].*[zeros(1,SamplesPerSymbol) RxInput(1:BlockSize*SamplesPerSymbol)];
IntegratorOutput=filter(BRx,ARx,RxInput);
for k=2:BlockSize+1
m=k*SamplesPerSymbol+2*delay;
if (m<length(IntegratorOutput))
DetectedSymbols(k)=(1-sign(IntegratorOutput(m)))/2;
if (DetectedSymbols(k)~=TxSymbolsOrigin(k-1))
Errors=Errors+1;
end
end
end
BER=Errors./(BlockSize);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -