Source code for pylayers.antprop.antvsh

from __future__ import print_function
import pdb
import doctest
from pylayers.antprop.spharm import *
#from sphere import spherepack, Wrapec, mathtogeo
import numpy as np
import doctest
import os
import glob
"""
.. currentmodule:: pylayers.antprop.antvsh

.. autosummary::
    :members:

"""

[docs]def vsh(A, dsf=1): """ Parameters ---------- A dsf : in downsamplig factor Notes ----- This function calculates the Vector Spherical Harmonics coefficients It makes use of the spherepack function vha m : phi longitude n : theta latitude Antenna pattern are stored (f theta phi) Coeff are stored with this order (f , n , m ) The vsh coefficient are organized differently should be better for compression along frequency axis Parameters ---------- A : antenna dsf : int down sampling factor 'default 1' """ th = A.theta[::dsf] ph = A.phi[::dsf] #th = A.theta[::dsf,0] #ph = A.phi[0,::dsf] nth = len(th) nph = len(ph) nf = A.nf if (nph % 2) == 1: mdab = min(nth, (nph + 1) / 2) else: mdab = min(nth, nph / 2) ndab = nth Br = 1j * np.zeros((nf, ndab, mdab)) Bi = 1j * np.zeros((nf, ndab, mdab)) Cr = 1j * np.zeros((nf, ndab, mdab)) Ci = 1j * np.zeros((nf, ndab, mdab)) gridComp = Wrapec() wvha, lvha = gridComp.vhai(nth, nph) for k in range(nf): # # Real part # Ftr = A.Ft[::dsf, ::dsf,k].real Fpr = A.Fp[::dsf, ::dsf,k].real # # Ftr Ntheta,Nphi # Fpr Ntheta,Nphi # if Ftr.shape!=(nth,nph): Ftr=Ftr*np.ones((nth,nph)) if Fpr.shape!=(nth,nph): Fpr=Fpr*np.ones((nth,nph)) brr, bir, crr, cir = gridComp.vha(nth, nph, 1, lvha, wvha, np.transpose(Fpr), np.transpose(Ftr)) # # Imaginary part # Fti = A.Ft[::dsf, ::dsf,k].imag Fpi = A.Fp[::dsf, ::dsf,k].imag if Fti.shape!=(nth,nph): Fti=Fti*np.ones((nth,nph)) if Fpi.shape!=(nth,nph): Fpi=Fpi*np.ones((nth,nph)) bri, bii, cri, cii = gridComp.vha(nth, nph, 1, lvha, wvha, np.transpose(Fpi), np.transpose(Fti)) Br[k, :, :] = brr + 1j * bri Bi[k, :, :] = bir + 1j * bii Cr[k, :, :] = crr + 1j * cri Ci[k, :, :] = cir + 1j * cii # # m=0 row is multiplied by 0.5 # Br[:, :, 0] = 0.5 * Br[:, :, 0] Bi[:, :, 0] = 0.5 * Bi[:, :, 0] Cr[:, :, 0] = 0.5 * Cr[:, :, 0] Ci[:, :, 0] = 0.5 * Ci[:, :, 0] Br = VCoeff(typ='s1', fmin=A.fGHz[0], fmax=A.fGHz[-1], data=Br) Bi = VCoeff(typ='s1', fmin=A.fGHz[0], fmax=A.fGHz[-1], data=Bi) Cr = VCoeff(typ='s1', fmin=A.fGHz[0], fmax=A.fGHz[-1], data=Cr) Ci = VCoeff(typ='s1', fmin=A.fGHz[0], fmax=A.fGHz[-1], data=Ci) A.C = VSHCoeff(Br, Bi, Cr, Ci) return(A)
if (__name__ == "__main__"): doctest.testmod()