1. Can someone pls explain what is effective refractive index of fiber core and how to calculate it theoretically?

  2. Suppose the fiber core refractive index=1.4446 and cladding refractive index is= 1.4271, then how to calculate the effective refractive index of the core?

  3. Is there any software that can directly calculate the effective refractive index of core from the core and cladding refractive index?

  • 1
    $\begingroup$ The "effective refractive index" of a fiber would be an average of its refractive indices that characterizes the average propagation velocity in the fiber. The problem with that kind of characterization is, that the propagation delay depends on the wavelength, the temperature and the actual light distribution in the fiber. In most applications one is much more interested in characterizing the dispersion that follows from variations of these parameters. $\endgroup$ – CuriousOne Sep 17 '14 at 19:11
  • $\begingroup$ @CuriousOne Sir can u pls give some idea how to calculate the effective refractive index of the core mathematically for the above mentioned numerical $\endgroup$ – ARIJIT Sep 17 '14 at 19:14
  • $\begingroup$ Did you read explanations like about the complexity of light transport in fibers opt.zju.edu.cn/eclass/attachments/2013-04/…? There is software out there, which can calculate the modes of fibers, e.g. rp-photonics.com/fiberpower_modes.html $\endgroup$ – CuriousOne Sep 17 '14 at 19:23
  • $\begingroup$ For what is it, see @CuriousOne 's comment. For how to calculate it, see Chapter 12, Snyder and Love, "Optical Waveguide Theory" for the full vector theory; chapters thereafter explain the various approximations. It's not easy. Almost every optical fiber simulation software calculates it. RSoft, VPItransmissionMaker, ...., If you need a precis, including a weak guidance eigenvalue equation (which will give you good approximations) let me know and I can write a full answer. $\endgroup$ – WetSavannaAnimal Jul 3 '16 at 12:50

For an intuitive answer to your first question, please see both my answer and and that of @theSkinEffect about the Effective Refractive Index. However, a more complete answer concerning the modes of a fiber is found in these lecture notes.

For your second question, what is the dimensions of the waveguide (i.e. diameter)? What is the wavelength of interest? All of these factors will determine how many and what the effective indices are for your problem. For the sake of demonstration, I will assume you are using Corning SMF-28 which has a radius of 8.3$\mu m$ and that your wavelength of interest is 1.55$\mu m$ which are very typical for the present optical communications in the telecom industry.

To answer your question about how to calculate the effective indices, please download the free statistical software package R and drop the following code into it. I normally use Python, but since this program numerically calculates the $\beta_{pm}$, I liked the numerical solver better in R. Before you use this program, please understand better the theory of modes in a cyllindrical waveguide such as fiber because there are some assumptions made in the equations I used for the characteristics equations and you need to understand and change the order of the Bessel functions to get the correct answer.

# Written in R by Ansebbian0
# Revisions have been made to correct the mode angle
# Please be aware that the mode angle is give from the propogation direction,
# NOT from the incident angle. This can be changed by using asin instead of acos


deg2rad = function(deg) {
  return((pi * deg) / 180)

rad2deg = function(rad) {
  return((180 * rad) / pi)

# Characteristic Equation for TE mode beta0
TE_eq <- function(beta0,k0,n1,n2,h){
  kapppa <- sqrt( (n2*k0)^2 - beta0^2)  # lateral wavevector
  kapppamax <- sqrt(k0**2 * (n2**2 - n1**2))
  gammma <- sqrt(kapppamax**2 - kapppa**2)
  te0 <- (besselJ(kapppa*h, 1) / (kapppa*besselJ(kapppa*h, 0))) + (besselK(gammma*h, 1, expon.scaled=FALSE) / (gammma*besselK(gammma*h, 0, expon.scaled=FALSE)))


# Characteristic Equation for TM mode beta0
TM_eq <- function(beta0,k0,n1,n2,h){
  kapppa <- sqrt( (n2*k0)^2 - beta0^2)
  kapppamax <- sqrt(k0**2 * (n2**2 - n1**2))
  gammma <- sqrt(kapppamax**2 - kapppa**2)
  tm0 <- ((besselJ(kapppa*h, 1) / (kapppa*besselJ(kapppa*h, 0)))*(k0*n2)**2) + ((besselK(gammma*h, 1, expon.scaled=FALSE) / (gammma*besselK(gammma*h, 0, expon.scaled=FALSE)))*(k0*n1)**2)


# calculation of betas (set seq to small number for high resolution)
beta0_array <- function(lambda,n1,n2,h){
  k0 <<- 2*pi/lambda                        # wavenumber in free space
  beta0 <- seq(n1*k0, n2*k0, 1000)      # linspace of beta0s from smallest to largest(see pollock)
  beta0 <- beta0[-length(beta0)]            # removes the last element of beta0


# calculates the crossing points where there are possible zeros
pol_zeros <- function(polarization, beta0){
  intervals <- (polarization>=0)-(polarization<0)   # gives a matrix of 1 (te0>=0) and -1 (te0<0)
  differences = diff(intervals)                     # returns the difference between each variable
  izeros <- which(differences<0)                    # a neg. return from diff will mean a crossing from + to -
  X0 <- cbind(beta0[izeros],beta0[izeros+1])        # makes a Nx2 matrix of the two crossing variables


# Numerically solves the characteristic equation [n_eff = beta0_m / k0]
modes <- function(lambda, h, n1, n2){
  beta0 <- beta0_array(lambda,n1,n2,h)
  te0 <- TE_eq(beta0,k0,n1,n2,h)                    # calls the characteristic equation for beta0 of te equation
  tm0 <- TM_eq(beta0,k0,n1,n2,h)                    # calls the characteristic equation for beta0 of tm equation

  # n_eff for TE and TM numerical calculation
  te_Xs <- pol_zeros(te0, beta0)
  nzeros_te <- dim(te_Xs)[1]

  tm_Xs <- pol_zeros(tm0, beta0)
  nzeros_tm <- dim(tm_Xs)[1]                        # finds how many rows of crossings there were

  n_eff<-matrix(data=NA, nrow=max(nzeros_te, nzeros_tm), ncol=10) # initializes a matrix for the n_eff

  colnames(n_eff) <- c('te_ne_eff', 'te_mode_beta', 'prop_dir_te_mode_angle', 'tm_ne_eff', 'tm_mode_beta', 'prop_dir_tm_mode_angle','te_kappa', 'tm_kappa', 'te_mode', 'tm_mode')

  for(i in 1:nzeros_te){                            # feeds crossing pairs into a numerical root solver
    n_eff[i,1] <- (fzero(function(x){TE_eq(x,k0,n1,n2,h)}, te_Xs[i,])$x)/k0 # fzero is a root solver in pracma
    n_eff[i,2] <- n_eff[i,1]*k0
    n_eff[i,3] <- rad2deg(acos(n_eff[i,1]/n2))
    n_eff[i,7] <- sqrt( (n2*k0)^2 - n_eff[i,2]^2)
    n_eff[i,9] <- (nzeros_te + 1) - i

  for(i in 1:nzeros_tm){                        # feeds crossing pairs into a numerical root solver
    n_eff[i,4] <- (fzero(function(x){TM_eq(x,k0,n1,n2,h)}, tm_Xs[i,])$x)/k0 # fzero is a root solver in pracma
    n_eff[i,5] <- n_eff[i,4]*k0
    n_eff[i,6] <- rad2deg(acos(n_eff[i,4]/n2))
    n_eff[i,8] <- sqrt( (n2*k0)^2 - n_eff[i,5]^2)
    n_eff[i,10] <- (nzeros_tm + 1) - i

  return(data.frame(n_eff)) #, nTM, TEparam, TMparam)    

modes(lambda=1.55e-6, h = 8.3e-6, n1=1.4271, n2=1.4446)

This is the output:

enter image description here

The output should be self explanatory, but if you have questions, let me know and I will tell you about how to use it. This program is not valid for the LP modes because those are composite modes. This is only valid for TE and TM. Look at Buck, Fundamentals of Optical Fibers to find the equation for the LP modes and then just replace that into the TE_eq or TM_eq function and you'll get the results.

PS: One small note. Before the above program works correctly, you need to type this in R:


This is the numerical solvers library which you need.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.