No BSD License  

Highlights from
Bit Error Rate in Bit Error rates with pulse shaping consideration

image thumbnail

Bit Error Rate in Bit Error rates with pulse shaping consideration

by

 

11 Apr 2005 (Updated )

Bit Error Rate in CDMA with MAI consideration.

getpulse(pulse)
function [pulse] = getpulse(pulse)
pulse.Ts = 1;
pulse.NSS = 512;        % Number of Samples per Chip If pulse.NSS = 1, no pulse used
pulse = pshape(pulse); % Filter Coeficients
[pulse.m1, pulse.m2, pulse.w1, pulse.w2] = get_param(pulse);

function [pulse] = pshape(pulse)
Tc = pulse.Ts;
ts = Tc/pulse.NSS;
% get the pulse shapes
pulse.T = -Tc/2:ts:Tc/2;
switch pulse.type
    case{1}   %rectangular pulse
        T = -Tc/2:ts:Tc/2;
        for i = 1:length(T)
            t = T(i);
            if t >= (-Tc/2) & t <= Tc/2
                pulse.hTx(i) = 1;
            else
                pulse.hTx(i) = 0;
            end
        end

    case {2}   %Half Sine MSK
        T = 0 : ts : Tc;
        for i = 1:length(T)
            t = T(i);
            if t >= 0 & t <= Tc
                pulse.hTx(i) = sqrt(2)*(sin(pi*t/Tc));
            else
                pulse.hTx(i) = 0;
            end
        end

    case  {3}   %Guassian Waveform
        T = -Tc/2:ts:Tc/2;
        for i = 1:length(T)
            t = T(i);
            if t >= (-Tc/2) & t <= Tc/2
                pulse.hTx(i) = sqrt(sqrt(4.5))* exp(- (9*pi*t^2)/(4*Tc^2));
            else
                pulse.hTx(i) = 0;
            end
        end

    case  {4}   %Raised Cos
        T = 0 : ts : Tc;
        for i = 1:length(T)
            t = T(i);
            if t >= 0 & t <= Tc
                pulse.hTx(i) = sqrt(2/3)*(1-(cos(2*pi*t/Tc)));
            else
                pulse.hTx(i) = 0;
            end
        end
    case  {5}   %Blackman Window
        T = 0 : ts : Tc;
        k1 = 0.42; k2 = 0.5; k3 = 0.08;
        c = sqrt(1/(k1^2 + k2^2/2 +k3^2));
        for i = 1:length(T)
            t = T(i);
            if t >= 0 & t <= Tc
                pulse.hTx(i) = c*(k1 - k2*cos(2*pi*t/Tc)+ k3*cos(4*pi*t/Tc));
            else
                pulse.hTx(i) = 0;
            end
        end

    otherwise
        disp('Unknown Pulse.')
end

function [m1, m2, w1, w2] = get_param(pulse)
Ts = pulse.Ts;
%Pulse Shape

fmin = 0; fmax = 16/Ts; nf = 512;
df = (fmax-fmin)/nf; f = (fmin:df:fmax); H = zeros(1,length(f));

for n = 0:nf,
    fp = n*df;
    H(n+1) = trapz(pulse.T,pulse.hTx.*exp(-2*pi*j*fp*pulse.T));
end
H = real(H);

H = (abs(H)).^2;
H = [fliplr(H(2:end)) H];
ff =  [-fliplr(f(2:end)) f];

nt = 8192;
tt = 0:Ts/nt:Ts;
for n = 0:nt
    h(n+1) = trapz(ff, H.*exp(2*pi*j*ff*tt(n+1)));
end
h = real(h);
h2 = fliplr(real(h));

m1 = trapz(tt , h.*h);
m2 = trapz(tt , h.*h2);
w1 = trapz(tt , ((h.*h) + (h2.*h2)).^2);
w2 = trapz(tt , ((h.*h).*(h2.*h2)));

Contact us