www.pudn.com > D_BPSK_sim_function.rar > 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