⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pb_psk_ray.m

📁 Simulation of Wimax network
💻 M
字号:
% ##############################################################################% ##  pb_psk_ray.m : Bestimmung der BER bei PSK und Rayleigh Kanal, koh. Det. ##% ##############################################################################%% function [Ps,Pb] = pb_psk_ray (EbN0db,M,L,map);% benoetigt: bin_coef% ------------------------------------------------------------------------------% EINGABE:%   EbN0db: Signal/Noise pro Infobit [db]%           (Spalten- oder Zeilenvektor)%        M: Stufigkeit der Modulation (default=2)%           (Skalar)%        L: Anzahl der Pfade (default=1)%           (Skalar)%      map: Art des Mappings%           'gray' (default)%             Gray-Codierung%           'nat'%             natuerliches Mapping%           (string)%% AUSGABE:%   Ps: Symbolfehlerwahrscheinlichkeit (Spaltenvektor)%   Pb: Bitfehlerwahrscheinlichkeit (Spaltenvektor)%% ANMERKUNGEN:%   - exakte Loesungen%   - M>=8 nur bis L=2%% QUELLE:%   2-PSK(BPSK) [Kam96, S.670,(16.3.26)] [Ben96, S.66,(4.120)]%               [Pro95, S.781,(14-4-15)]%   4-PSK(QPSK) [Pro95,S.786,(14-4-38)]%   M-PSK       [Pro68]%% AUTOR: Juergen Rinas,  08.12.1998% Erweitert um Symbolfehlerraten von Volker Kuehn, 04.01.01% ------------------------------------------------------------------------------function [Ps,Pb] = pb_psk_koh_ray (EbN0db,M,L,map);if (nargin<2) M=2; end;        % default: M=2if (nargin<3) L=1; end;        % default: L=1if (nargin<4) map='gray'; end; % default: map='gray'K=log2(M);if (K~=fix(K))  disp(['# Achtung(',mfilename,') M ist keine Potenz von 2.']);end;EbN0=10.^(EbN0db(:)./10);Pb=zeros(length(EbN0),1);if (M==2)  % Pro95 S.781 (14-4-15) == Pro95 S.774 (14-3-7) fuer L=1  gammac=EbN0/L;  alpha=sqrt(gammac./(1+gammac));  % Schleife notwendig, da laufender Index im Exponenten!  Pb=zeros(length(EbN0),1);  for mu=0:(L-1)    Pb=Pb + bin_coef(L-1+mu,mu) * ((1+alpha)/2).^mu;  end;  Pb=Pb.*((1-alpha)/2).^L;  Ps=Pb;elseif ((M==4) & (upper(map(1))=='G'))  gammac=K/L*EbN0;  mu=sqrt(gammac./(1+gammac));  Pb=zeros(length(EbN0),1);  for k=0:(L-1)    Pb=Pb + bin_coef(2*k,k) * ((1-mu.^2)./(4-2*mu.^2)).^k;  end;  Pb=.5 - .5*Pb.*mu./(sqrt(2-mu.^2));elseif ((M==8) & (L==1) & (upper(map(1))=='G'))  gammac=K/L*EbN0;  mu=sqrt(gammac./(1+gammac));  A=mu*sqrt(1-1/sqrt(2));  A2=A.^2;  B=mu*sqrt(1+1/sqrt(2));  B2=B.^2;  Pb=1/(3*pi)*...    ( 3*pi/2 ...     - A./sqrt(2-B2).*acotpi( -B./sqrt(2-B2))...     - B./sqrt(2-A2).*acotpi( -A./sqrt(2-A2))...     );endif M>2  % BPSK schon fertig  % Hamming-Gewichte berechnen  coeff=pskweight(K,map)/K;  gammac=K/L*EbN0;  mu=sqrt(gammac./(1+gammac)); % PSK  % Loesungen der Teilintegrale gewichten und aufsummieren  Ps=zeros(length(EbN0),1);  for i=1:length(coeff)/2    Theta1=pi/M+ 2*pi/M *(i-1);    Theta2=pi/M+ 2*pi/M*(i);    if Theta2>pi, Theta2=pi; end;    if (L==1)      Pint1= 1 / (2*pi).* ( mu*sin(Theta1)...                           ./sqrt(1-(mu*cos(Theta1)).^2)...                           .*acotpi( -mu*cos(Theta1)...                                    ./sqrt(1-(mu*cos(Theta1)).^2)...                                    )...                           +Theta1...                           );      Pint2= 1 / (2*pi).* ( mu*sin(Theta2)...                           ./sqrt(1-(mu*cos(Theta2)).^2)...                           .*acotpi( -mu*cos(Theta2)...                                    ./sqrt(1-(mu*cos(Theta2)).^2)...                                    )...                           +Theta2...                           );    elseif (L==2)      Pint1= 1 / (2*pi).* ( mu*sin(Theta1)...                           ./sqrt(1-(mu*cos(Theta1)).^2)...                           .*acotpi( -mu*cos(Theta1)...                                    ./sqrt(1-(mu*cos(Theta1)).^2)...                                    )...                           +Theta1...                           )...        + (1-mu.^2)/(4*pi).*(...                             mu*sin(Theta1)...                             ./(1-(mu*cos(Theta1)).^2).^(3/2)...                             .*acotpi( -mu*cos(Theta1)...                                      ./sqrt(1-(mu*cos(Theta1)).^2)...                                      )...                             + (mu.^2.*sin(Theta1).*cos(Theta1))...                             ./(1-mu.^2.*cos(Theta1).^2)...                             );      Pint2= 1 / (2*pi).* ( mu*sin(Theta2)...                           ./sqrt(1-(mu*cos(Theta2)).^2)...                           .*acotpi( -mu*cos(Theta2)...                                    ./sqrt(1-(mu*cos(Theta2)).^2)...                                    )...                           +Theta2...                           )...        + (1-mu.^2)/(4*pi).*(...                             mu*sin(Theta2)...                             ./(1-(mu*cos(Theta2)).^2).^(3/2)...                             .*acotpi( -mu*cos(Theta2)...                                      ./sqrt(1-(mu*cos(Theta2)).^2)...                                      )...                             + (mu.^2.*sin(Theta2).*cos(Theta2))...                             ./(1-mu.^2.*cos(Theta2).^2)...                             );    end;    Ps=Ps+(Pint2-Pint1);    if (i<M/2)      Ps=Ps+(Pint2-Pint1);    end    if ((M>8) | (upper(map(1))~='G') | (L>1))      Pb=Pb+coeff(i+1)*(Pint2-Pint1);      if (i<M/2)        Pb=Pb+coeff(M-i+1)*(Pint2-Pint1);      end    end;  end;end;  % if M>2% ### EOF ######################################################################

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -