diff --git a/SimPlatform/Functions.py b/SimPlatform/Functions.py
new file mode 100644
index 0000000000000000000000000000000000000000..1f851f463dfd0062d0a3dc89f5747795bd7cb444
--- /dev/null
+++ b/SimPlatform/Functions.py
@@ -0,0 +1,64 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Wed Aug 15 13:26:41 2018
+
+@author: Yi Zhang
+"""
+
+import numpy as np
+from numpy.random import normal,uniform,rand,randint,choice
+from SimPlatform.Parameters import params_default
+
+"""Parameters for envelope of amplitude of tissue"""
+         
+"""
+ 1.sigrange: standard variation for two-dimensional gaussian as the amplitude envelop of tissue,
+         unit mm. sig=[sig1min,sig1max,sig2min,sig2max]. sig1 corresponds to y dimension,
+         sig2 corresponds to x dimension.
+ 2.num: number of the max areas of tissue
+"""        
+
+class Envelope:
+    def __init__(self,params=params_default):
+        self.pixel=params['pixel']
+        self.shape=params['shape']
+    
+    def GMenvelope(self,params=params_default):
+        """
+        generate a mixed gaussian matrix as envelope of amplitude for tissue
+        """
+        self.sigrange=params['sigrange']
+        self.num=params['numev']
+    
+        ev={}
+        m={}
+        sig={}
+        loc_ev={}
+        theta_ev={}
+        for i in range(self.num):
+            sig[i]=[uniform(self.sigrange[0],self.sigrange[1]),
+                   uniform(self.sigrange[2],self.sigrange[3])]
+            
+            m[i]=max(int(3*sig[i][0]/self.pixel[0]),int(3*sig[i][1]/self.pixel[1]))
+            xv=np.arange(-m[i],m[i]+1)*self.pixel[1]
+            yv=np.arange(-m[i],m[i]+1)*self.pixel[0]
+            xv,yv=np.meshgrid(xv,yv)
+            
+            theta_ev[i]=uniform(0,2*np.pi)
+            xv1=xv*np.cos(theta_ev[i])-yv*np.sin(theta_ev[i])
+            yv1=xv*np.sin(theta_ev[i])+yv*np.cos(theta_ev[i])
+            
+            ev[i]=np.exp(-xv1**2/2/sig[i][0]**2-yv1**2/2/sig[i][1])
+            loc_ev[i]=(randint(self.shape[0]),randint(self.shape[1]))
+        
+        #set location of envelope
+        A=np.zeros(self.shape)
+        for i in range(self.num):
+            y1,y2,x1,x2=[max(0,loc_ev[i][0]-m[i]),min(self.shape[0],loc_ev[i][0]+m[i]+1),
+                        max(0,loc_ev[i][1]-m[i]),min(self.shape[1],loc_ev[i][1]+m[i]+1)]
+                        
+            ye1,ye2,xe1,xe2=[y1-loc_ev[i][0]+m[i],y2-loc_ev[i][0]+m[i],
+                            x1-loc_ev[i][1]+m[i],x2-loc_ev[i][1]+m[i]]
+                            
+            A[y1:y2,x1:x2]+=ev[i][ye1:ye2,xe1:xe2]
+        return A
\ No newline at end of file