!date
mardi 29 janvier 2019, 13:53:10 (UTC+0100)
Modifying the segment natureΒΆ
This section illustrates a simple ray tracing simulation. The environement is a building with 2 rooms. At the interface between the two rooms there is a segment with 3 sub-segment whose material properties are changed in the simulation. This section illustrates in details the different steps of the simulation. First we need to import several specialized modules.
from pylayers.simul.link import *
from pylayers.antprop.rays import *
from pylayers.antprop.aarray import *
from pylayers.antprop.channel import *
from pylayers.gis.layout import *
from pylayers.antprop.signature import *
import pylayers.signal.bsignal as bs
import pylayers.signal.waveform as wvf
import matplotlib.pyplot as plt
%matplotlib inline
Lets start by loading a simple layout with 2 single rooms. The multi subsegment appears in the middle with the red vertical lines. Each subsegment is materialized by a segment.
L=Layout('defstr.lay')
f,a=L.showG('s',subseg=True,figsize=(10,10))
The attribute lsss
lists all the segments which are superposed
called iso
segment.
L.lsss
[1, 2, 3]
The studied configuration is composed of a simple 2 rooms building separated by an iso segment.
print(L.Gs.node[1])
print(L.Gs.node[2])
print(L.Gs.node[3])
{'transition': False, 'iso': [3, 2], 'ncycles': [], 'connect': [-8, -7], 'norm': array([ 1., -0., 0.]), 'z': (0.0, 2.7), 'offset': 0, 'name': 'WOOD'}
{'transition': False, 'iso': [1, 3], 'ncycles': [], 'connect': [-8, -7], 'norm': array([ 1., -0., 0.]), 'z': (2.7, 2.8), 'offset': 0, 'name': 'AIR'}
{'transition': False, 'iso': [1, 2], 'ncycles': [], 'connect': [-8, -7], 'norm': array([ 1., -0., 0.]), 'z': (2.8, 3), 'offset': 0, 'name': 'WOOD'}
The \(\mathcal{G}_s\) graph dictionary has the following node. Negative nodes are points and positive index nodes are segments.
for k in [-1,1,2]:
print(L.Gs.node[k])
{}
{'transition': False, 'iso': [3, 2], 'ncycles': [], 'connect': [-8, -7], 'norm': array([ 1., -0., 0.]), 'z': (0.0, 2.7), 'offset': 0, 'name': 'WOOD'}
{'transition': False, 'iso': [1, 3], 'ncycles': [], 'connect': [-8, -7], 'norm': array([ 1., -0., 0.]), 'z': (2.7, 2.8), 'offset': 0, 'name': 'AIR'}
We define now, the position of the transmitter and the receiver, the two termination of a radio link.
#tx=np.array([759,1114,1.5])
#rx=np.array([767,1114,1.5])
tx=np.array([2,3,1.5])
rx=np.array([8,4,1.6])
fGHz=np.linspace(1,11,100)
#Aa = Antenna('S1R1.vsh3')
#Ab = Antenna('S1R1.vsh3')
Aa = Antenna('Gauss',fGHz=fGHz)
Ab = Antenna('Gauss',fGHz=fGHz)
#Aa = AntArray(N=[8,1,1],fGHz=fGHz)
#Ab = AntArray(N=[4,1,1],fGHz=fGHz)
Lk = DLink(L=L,
a=tx,
b=rx,
Aa=Aa,
Ab=Ab,
fGHz=fGHz,
cutoff=5)
Lk.eval(force=True,verbose=False)
Signatures: 100.00000000000001it [00:00, 1634.19it/s]
Warning Unable to read graph Gr
Warning Unable to read graph Gw
Layout Graph loaded
Aa.eval()
Aa.plotG()
(<matplotlib.figure.Figure at 0x7fa361a69dd8>,
<matplotlib.projections.polar.PolarAxes at 0x7fa3dd381fd0>)
Lk.C.Ctt
FUsignal : (100,) (25, 100)
Lk.eval(force=True,a=tx,b=rx,applywav=True)
Signatures: 100.00000000000001it [00:00, 1986.58it/s]
/home/uguen/Documents/rch/devel/pylayers/pylayers/signal/bsignal.py:1087: VisibleDeprecationWarning: converting an array with ndim > 0 to an index will result in an error in the future
pstop2 = pstart2 + np.where(u2.x[pstart2:dim2] == xnew[-1])[0]
/home/uguen/Documents/rch/devel/pylayers/pylayers/signal/bsignal.py:1202: VisibleDeprecationWarning: converting an array with ndim > 0 to an index will result in an error in the future
x_new = self.x[imin:imax]
/home/uguen/Documents/rch/devel/pylayers/pylayers/signal/bsignal.py:1207: VisibleDeprecationWarning: converting an array with ndim > 0 to an index will result in an error in the future
y_new = self.y[..., imin:imax]
/home/uguen/Documents/rch/devel/pylayers/pylayers/antprop/channel.py:4627: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
rir = np.zeros((shy[0],N))
Lk.C
Ctilde : Ray Propagation Channel Tensor (2x2xrxf)
---------
between antennas local frames
Nray : 25
Nfreq : 100
fmin(GHz) : 1.0
fmax(GHz): 11.0
---1st ray 1st freq ---
global angles (th,ph) degrees :
[ 89.1 9.5]
[ 90.9 -170.5]
local angles (th,ph) degrees :
[ 89.1 9.5]
[ 90.9 -170.5]
| (0.110598827081-0.0932603392219j) (7.67365332983e-05-9.12653903417e-05j) |
| (7.67365332983e-05-9.12653903417e-05j) (0.10982834-0.0923439725161j) |
f = plt.figure(figsize=(10,10))
f,a=Lk.C.show(cmap='jet',fig=f,typ='l20',vmin=-120,vmax=-10)
fGHz=np.arange(2,6,0.1)
wav = wvf.Waveform(fcGHz=4,bandGHz=1.5)
wav.show()
Lk = DLink(L=L,a=tx,b=rx,fGHz=fGHz)
Warning Unable to read graph Gr
Warning Unable to read graph Gw
Layout Graph loaded
Position of the transmitter
Lk.a
array([ 2. , 3. , 1.5])
Position of the receiver
Lk.b
array([ 8. , 4. , 1.6])
cir = Lk.H.applywavB(wav.sf)
WARNING : Tchannel.applywavB is going to be replaced by Tchannel.applywav
/home/uguen/Documents/rch/devel/pylayers/pylayers/signal/bsignal.py:1074: VisibleDeprecationWarning: converting an array with ndim > 0 to an index will result in an error in the future
pstop1 = pstart1 + np.where(u1.x[pstart1:dim1]==xnew[-1])[0]
/home/uguen/Documents/rch/devel/pylayers/pylayers/signal/bsignal.py:1202: VisibleDeprecationWarning: converting an array with ndim > 0 to an index will result in an error in the future
x_new = self.x[imin:imax]
/home/uguen/Documents/rch/devel/pylayers/pylayers/signal/bsignal.py:1207: VisibleDeprecationWarning: converting an array with ndim > 0 to an index will result in an error in the future
y_new = self.y[..., imin:imax]
L.Gs.node[1]['name']='AIR'
L.Gs.node[2]['name']='AIR'
L.Gs.node[3]['name']='AIR'
#Aa = Antenna('Omni',fGHz=fGHz)
#Ab = Antenna('Omni',fGHz=fGHz)
Lk.eval(force=True,verbose=0,fGHz=fGHz)
Lk.plt_cir()
plt.xlim(0,50)
plt.title('AIR/AIR/AIR')
plt.figure()
L.Gs.node[1]['name']='METAL'
L.Gs.node[2]['name']='METAL'
L.Gs.node[3]['name']='METAL'
Lk.eval(force=True,verbose=0,fGHz=fGHz)
Lk.plt_cir()
plt.xlim(0,50)
plt.title('METAL/METAL/METAL')
plt.figure()
L.Gs.node[1]['name']='WOOD'
L.Gs.node[2]['name']='AIR'
L.Gs.node[3]['name']='WOOD'
Lk.eval(force=True,verbose=0,fGHz=fGHz)
Lk.plt_cir()
plt.xlim(0,50)
plt.title('WOOD/AIR/WOOD')
Signatures: 100.00000000000001it [00:00, 968.00it/s]
Signatures: 100.00000000000001it [00:00, 2984.53it/s]
/home/uguen/Documents/rch/devel/pylayers/pylayers/simul/link.py:2489: RuntimeWarning: divide by zero encountered in log10
ERdB = 10*np.log10(ER)
Signatures: 100.00000000000001it [00:00, 2006.53it/s]
<matplotlib.text.Text at 0x7fa35b746588>
We have modified successively the nature of the 3 surfaces in the sub
segment placed in the separation partition. The first was AIR, the
second WOOD and the third METAL. As the subsegment is placed on the LOS
path the blockage effect is clearly visible. The chosen antennas were
omni directional Antenna('Omni')