{"id":62,"date":"2017-01-07T20:07:31","date_gmt":"2017-01-08T01:07:31","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/estg1003\/?p=62"},"modified":"2026-04-16T09:28:49","modified_gmt":"2026-04-16T14:28:49","slug":"sigma-delta-codec-deco-python","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/stp-aplica\/sigma-delta-codec-deco-python\/","title":{"rendered":"Sigma-Delta Codificador y decodificador con Python"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<p>\u03a3\u0394:<\/p>\n\n\n\n<p><a href=\"\/algoritmos101\/#codec\">Codificador<\/a><\/p>\n\n\n\n<p><a href=\"\/algoritmos101\/#algoritmocodec\">algoritmo Codec<\/a><\/p>\n\n\n\n<p><a href=\"\/algoritmos101\/#deco\">Decodificador<\/a><\/p>\n\n\n\n<p><a href=\"\/algoritmos101\/#algoritmodeco\">algoritmo Deco<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"codec\">1. Sigma-Delta Codificador con Python<\/h2>\n\n\n\n<p><strong><em>Referencia<\/em><\/strong>: Leon-Couch, 3\u20138 Modulaci\u00f3n Delta, p.192; <a href=\"https:\/\/en.wikipedia.org\/wiki\/Delta-sigma_modulation\">Delta-sigma_modulation, Wikipedia<\/a> ; <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/telg1001\/sigma-delta-modulacion\/\">Sigma-Delta \u2013 Modulaci\u00f3n<\/a><\/p>\n\n\n\n<p>La se\u00f1al de entrada es el archivo de sonido:<\/p>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/drive.google.com\/file\/d\/0B-o6TQEqtOmla2dEcWtOV3FCLTQ\/view?usp=sharing&amp;resourcekey=0-LfHX913LVGgYecMWDJ3brQ\">440Hz_44100Hz_16bit_05sec.wav<\/a><\/p>\n\n\n\n<p>que es tipo monof\u00f3nica. La modulaci\u00f3n delta-sigma se aplica usando los par\u00e1metros:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0394Y = deltaY = 0.3 * max(sonido)<\/li>\n\n\n\n<li>rango de observaci\u00f3n [0, 0.002] segundos para la gr\u00e1fica<\/li>\n\n\n\n<li>muestras en el rango de observaci\u00f3n: k<\/li>\n<\/ul>\n\n\n\n<p><strong>Nota<\/strong>: En el caso de sonido est\u00e9reo, con dimensi\u00f3n kx2, se usa solo un canal (sonido[:,0])<\/p>\n\n\n\n<p>Hay que tomar en cuenta que para graficar, la misma se satura con un n\u00famero grande de muestras . Para escuchar el sonido el tiempo de 'termina' ser\u00e1 de al menos 1 segundo.<br><img decoding=\"async\" src=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/estg1003\/files\/2017\/04\/deltasigmacodec.png\" alt=\"codifica Delta Sigma\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"algoritmocodec\">1.1 Algoritmo en Python para Codec<\/h3>\n\n\n\n<p>A continuaci\u00f3n se describe el algoritmo para codificar en Python, que el el bloque de ingreso especifica el rango de observaci\u00f3n en segundos.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Modulacion Delta Sigma - Codificador\n# entrada x(t), salida: y&#x5B;n]\n# propuesta:edelros@espol.edu.ec\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport scipy.io.wavfile as waves\n\n# INGRESO \n# archivo = input('archivo de sonido:' )\narchivo = '440Hz_44100Hz_16bit_05sec.wav'\nmuestreo, sonido = waves.read(archivo)\n\n# rango de observaci\u00f3n en segundos\ninicia = 0\ntermina = 0.002\ncanal = 0   #Usar un canal en caso de estereo\n<\/pre><\/div>\n\n\n<pre class=\"wp-block-code alignwide\"><code>c:\\python34\\lib\\site-packages\\scipy\\io\\wavfile.py:179: WavFileWarning: Chunk (non-data) not understood, skipping it. WavFileWarning)<\/code><\/pre>\n\n\n\n<p>Si el <strong>archivo.wav<\/strong> contiene etiquetas, el proceso de lectura emite una advertencia (WavFileWarning) que no afecta al proceso de codificaci\u00f3n.<\/p>\n\n\n\n<p>Se extrae solo una porci\u00f3n del <strong>sonido<\/strong> que contiene las <strong>k<\/strong> muestras en el intervalo de observaci\u00f3n y se env\u00eda graficar.<\/p>\n\n\n\n<p>La se\u00f1al <strong>xdigital<\/strong> y <strong>ysalida<\/strong> se calcula con las <strong>diferencia<\/strong>s entre el valor de cada <strong>muestra<\/strong> anal\u00f3gica y el valor <strong>xdigital<\/strong> anterior; se toma en cuenta solo el <strong>signo<\/strong> para acumular y generar el vector <strong>ysalida<\/strong>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# PROCEDIMIENTO\n# Codificar Sigma-Delta\ndeltaY = 0.1*np.max(sonido) \ndeltaT = 1\/muestreo \n\n# Usar un canal en caso de estereo\ncanales=sonido.shape\ncuantos=len(canales)\ncanal = 0   \nif (cuantos==1): # Monof\u00f3nico\n    uncanal=sonido&#x5B;:]  \nif (cuantos==2): # Est\u00e9reo\n    uncanal=sonido&#x5B;:,canal] \n\n# Extrae solo una porcion del sonido\ndonde = int(inicia\/deltaT)\n# tiempo muestreo de la se\u00f1al anal\u00f3gica\nt = np.arange(inicia,termina,deltaT) \nk = len(t) \n\nmuestra = np.copy(uncanal&#x5B;donde:donde+k])\n\n# Se\u00f1al Digital\nxdigital = np.zeros(k, dtype=float) \nysalida = np.zeros(k, dtype=int) \n\nfor i in range(1,k):\n    diferencia = muestra&#x5B;i]-xdigital&#x5B;i-1]\n    if (diferencia&gt;0):\n        signo = 1\n    else:\n        signo = -1\n    xdigital&#x5B;i] = xdigital&#x5B;i-1]+signo*deltaY\n    ysalida&#x5B;i] = signo\n    \nparametros=np.array(&#x5B;deltaT,deltaY,k])\n\n<\/pre><\/div>\n\n\n<p>Los resultados de pueden observar de dos maneras, en los <strong>archivos.txt<\/strong> de par\u00e1metros y datos, o en una gr\u00e1fica.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# SALIDA\nprint('par\u00e1metros:&#x5B;deltaT, deltaY, k]')\nprint(parametros)\nprint('datos:')\nprint(ysalida)\nnp.savetxt('deltasigma_parametros.txt',parametros)\nnp.savetxt('deltasigma_datos.txt',ysalida,fmt='%i')\nprint('... archivos.txt guardados ...')\n<\/pre><\/div>\n\n\n<pre class=\"wp-block-code alignwide\"><code>par\u00e1metros:&#091;deltaT, deltaY, k]\n&#091;  2.26757370e-05   6.80100000e+03   8.90000000e+01]\ndatos:\n&#091; 0  1 -1  1 -1  1  1 -1  1 -1  1  1 -1  1 -1  1 -1  1  1 -1  1 -1  1 -1  1 -1  1 -1  1 -1  1 -1  1 -1 -1  1 -1  1 -1  1 -1 -1  1 -1  1 -1 -1  1 -1  1 -1 -1  1 -1  1 -1 -1  1 -1  1 -1 -1  1 -1  1 -1  1 -1 -1  1 -1  1 -1  1 -1  1 -1  1 -1  1 -1  1 -1  1  1 -1  1 -1  1]\n... archivos.txt guardados ...\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Gr\u00e1ficas<\/h3>\n\n\n\n<p>para graficar y no saturar el gr\u00e1fico, se recomienda observar solo una porci\u00f3n de los datos determinada por 'verdesde' y 'verhasta' muestras desde [0,k-1]<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\nverdesde=0\nverhasta=90\n\n# Graficar\nplt.figure(1)       # define la grafica\nplt.suptitle('Codificador Delta-Sigma')\n\nplt.subplot(211)    # grafica de 2x1 y subgrafica 1\nplt.ylabel('x(t), x&#x5B;n]')\nplt.plot(t&#x5B;verdesde:verhasta],muestra&#x5B;verdesde:verhasta], 'g')\nplt.step(t&#x5B;verdesde:verhasta],xdigital&#x5B;verdesde:verhasta], where='post',color='m') # Puntos x&#x5B;n]\n\nplt.subplot(212)    # grafica de 2x1 y subgrafica 2\nplt.ylabel('y&#x5B;n]')\n#plt.plot(ysalida, 'bo')     # Puntos y&#x5B;n]\nplt.axis((verdesde,verhasta,-1.1,1.1))\npuntos=np.arange(verdesde,verhasta,1)     #posicion eje x para escalon\nplt.step(puntos&#x5B;verdesde:verhasta],ysalida&#x5B;verdesde:verhasta], where='post')\n\nplt.show()\n<\/pre><\/div>\n\n\n<p><img decoding=\"async\" src=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/estg1003\/files\/2017\/04\/deltasigmacodec.png\" alt=\"codifica Delta Sigma\"><br><strong>Archivos Resultantes<\/strong>: <a href=\"https:\/\/drive.google.com\/file\/d\/1xCK0d8xgJJ4b0HKZB0yYdSCJoTpdOVOA\/view?usp=sharing\">deltasigma_datos.txt<\/a>, <a href=\"https:\/\/drive.google.com\/file\/d\/1HcMBnKGpYnFu03AndjCk9VYCEROGw8Iw\/view?usp=sharing\">deltasigma_parametros.txt<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"deco\">2. Sigma-Delta Decodificador con Python<\/h2>\n\n\n\n<p><strong>Referencia<\/strong>: Leon-Couch, 3\u20138 Modulaci\u00f3n Delta, p.192 ; <a href=\"https:\/\/en.wikipedia.org\/wiki\/Delta-sigma_modulation\">Delta-sigma_modulation Wikipedia<\/a>, <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/telg1001\/sigma-delta-modulacion\/\">Sigma-Delta \u2013 Modulaci\u00f3n<\/a><\/p>\n\n\n\n<p>La se\u00f1al de entrada para el decodificador es la se\u00f1al codificada en los <strong>archivo.txt<\/strong> del ejemplo anterior:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p><a href=\"https:\/\/www.dropbox.com\/s\/oqzcnauc90samvc\/deltasigma_datos.txt?dl=0\">deltasigma_datos.txt<\/a><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p><a href=\"https:\/\/www.dropbox.com\/s\/4uyzxnx4bd8yefc\/deltasigma_parametros.txt?dl=0\">deltasigma_parametros.txt<\/a><\/p>\n<\/div>\n<\/div>\n\n\n\n<p>Los archivos para ser le\u00eddos deben copiarse al directorio donde se encuentra el algoritmo.py.<\/p>\n\n\n\n<p>Los par\u00e1metros obtenidos del <strong>archivo.txt<\/strong> son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0394Y = deltaY = datos[1]<\/li>\n\n\n\n<li>\u0394t = datos[0]<\/li>\n\n\n\n<li>muestras en el rango de observaci\u00f3n: <strong>k<\/strong> como tama\u00f1o del arreglo <strong>yentrada<\/strong>.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/estg1003\/files\/2017\/04\/deltasigmadeco.png\" alt=\"DeltaSigma_Decodificador\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"algoritmodeco\">2.1 Algoritmo en Python para Deco<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Modulacion Sigma-Delta Decodificador\n#  entrada y&#x5B;n], salida: x&#x5B;n]\n# propuesta:edelros@espol.edu.ec\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport scipy.io.wavfile as waves\n\n# INGRESO - Lectura de datos desde archivos\n# archivoparam = intput('archivo.txt de parametros: ')\n# archivodatos = input('archivo.txt de datos: ')\n# arhivoaudio = input('archivo.wav a grabar: ')\n\narchivoparam = 'deltasigma_parametros.txt'\narchivodatos = 'deltasigma_datos.txt'\narchivoaudio = 'sigmadeltaaudio.wav'\n\nparam = np.loadtxt(archivoparam,dtype=float)\nyentrada = np.loadtxt(archivodatos,dtype=int)\n<\/pre><\/div>\n\n\n<p>Decodificar la se\u00f1al +1 y -1 en el vector <strong>yentrada<\/strong> consiste en acumular los valores de la secuencia en <strong>xdigital<\/strong> usando escalones de tama\u00f1o <code>deltaY<\/code>.<\/p>\n\n\n\n<p>Se procede de forma semejante para los tiempos <code>td<\/code> usados para el eje de las abscisas usando pasos <code>deltaT<\/code>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# PROCEDIMIENTO\ndeltaT = param&#x5B;0] # Tama\u00f1o delta en eje tiempo\ndeltaY = param&#x5B;1] # Tama\u00f1o delta en eje Y\nk = len(yentrada) # n\u00famero de muestras\nxdigital = np.zeros(k, dtype='int16')\npunto = np.zeros(k, dtype=int)      # n\u00famero de muestras\ntd = np.zeros(k, dtype=float)    # tiempo muestreo\n\n# DECOdifica Sigma-Delta\nxdigital&#x5B;0] = yentrada&#x5B;0]\npunto&#x5B;0] = 0\ntd&#x5B;0] = 0\nfor i in range(1,k):\n    punto&#x5B;i] = i\n    td&#x5B;i] = deltaT*i\n    xdigital&#x5B;i] = xdigital&#x5B;i-1]+yentrada&#x5B;i]*deltaY\n<\/pre><\/div>\n\n\n<p>El resultado puede ser observado en los vectores, en una gr\u00e1fica de los vectores y en un <strong>archivoaudio.wav<\/strong>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# SALIDA\nprint('entrada: ')\nprint(yentrada)\nprint('salida: ')\nprint(xdigital)\n\n<\/pre><\/div>\n\n\n<pre class=\"wp-block-code alignwide\"><code>entrada: \n&#091; 0  1 -1  1 -1  1  1 -1  1 -1  1  1 -1  1 -1  1 -1  1  1 -1  1 -1  1 -1  1 -1  1 -1  1 -1  1 -1  1 -1 -1  1 -1  1 -1  1 -1 -1  1 -1  1 -1 -1  1 -1  1 -1 -1  1 -1  1 -1 -1  1 -1  1 -1 -1  1 -1  1 -1  1 -1 -1  1 -1  1 -1  1 -1  1 -1  1 -1  1 -1  1 -1  1  1 -1  1 -1  1]\nsalida: \n&#091;     0   6801      0   6801      0   6801  13602   6801  13602   6801   13602  20403  13602  20403  13602  20403  13602  20403  27204  20403 27204  20403  27204  20403  27204  20403  27204  20403  27204  20403  27204  20403  27204  20403  13602  20403  13602  20403  13602  20403  13602   6801  13602   6801  13602   6801      0   6801      0   6801  0  -6801   0  -6801      0  -6801 -13602  -6801 -13602  -6801  -13602 -20403 -13602 -20403 -13602 -20403 -13602 -20403 -27204 -20403  -27204 -20403 -27204 -20403 -27204 -20403 -27204 -20403 -27204 -20403  -27204 -20403 -27204 -20403 -13602 -20403 -13602 -20403 -13602]<\/code><\/pre>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Graficar\nplt.figure(1)       # define la grafica\nplt.suptitle('Decodifica Delta-Sigma')\n\nplt.subplot(211)    # grafica de 2x1 y subgrafica 1\nplt.ylabel('entrada: y&#x5B;n]')\nplt.axis((0,k-1,-1.1,1.1)) # Ajusta ejes\nplt.step(punto,yentrada, where='post')\n\nplt.subplot(212)    # grafica de 2x1 y subgrafica 2\nplt.ylabel('salida: x&#x5B;t]')\nxmax = np.max(xdigital)+0.1*np.max(xdigital)# rango en el eje y\nxmin = np.min(xdigital)-0.1*np.max(xdigital)\nplt.axis((0,td&#x5B;k-1],xmin,xmax)) # Ajusta ejes\nplt.step(td,xdigital, where='post', color='m')\n\nplt.show()\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/estg1003\/files\/2017\/04\/deltasigmadeco.png\"><img loading=\"lazy\" decoding=\"async\" width=\"815\" height=\"615\" src=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/estg1003\/files\/2017\/04\/deltasigmadeco.png\" alt=\"\" class=\"wp-image-4\" \/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Archivo de Audio del decodificador<\/h3>\n\n\n\n<p>Para crear el archivo de audio que permita escuchar el resultado del decodificador, se utiliza una instrucci\u00f3n de <code>scipy<\/code> que requiere:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>el nombre del <strong>archivoaudio.wav<\/strong>: 'sigmadeltaaudioruido.wav'<\/li>\n\n\n\n<li>la frecuencia de <strong>muestreo<\/strong> del sonido: muestreo<\/li>\n\n\n\n<li>el arreglo con la se\u00f1al digital reconstruida: xdigital<\/li>\n<\/ul>\n\n\n\n<p>El <strong>archivo.wav<\/strong> creado puede ejecutarse con <em>Windows Media Player<\/em>:<br><a href=\"https:\/\/www.dropbox.com\/s\/3t8nceoaloj8roa\/sigmadeltaaudio440Hz_1s.wav?dl=0\">sigmadeltaaudio440Hz_1s.wav<\/a><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Salida\n# Archivo de audio.wav\nmuestreo = int(1\/deltaT)\nwaves.write(archivoaudio, muestreo, xdigital)\nprint(' ... ' + archivoaudio + ' ...')\n\n<\/pre><\/div>\n\n\n<pre class=\"wp-block-code\"><code>... sigmadeltaaudio.wav ...<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/estg1003\/files\/2017\/04\/deltasigmaaudiowmplayer.png\" alt=\"windowsmediaplayer\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\u03a3\u0394: Codificador algoritmo Codec Decodificador algoritmo Deco 1. Sigma-Delta Codificador con Python Referencia: Leon-Couch, 3\u20138 Modulaci\u00f3n Delta, p.192; Delta-sigma_modulation, Wikipedia ; Sigma-Delta \u2013 Modulaci\u00f3n La se\u00f1al de entrada es el archivo de sonido: 440Hz_44100Hz_16bit_05sec.wav que es tipo monof\u00f3nica. La modulaci\u00f3n delta-sigma se aplica usando los par\u00e1metros: Nota: En el caso de sonido est\u00e9reo, con dimensi\u00f3n [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"wp-custom-template-entrada-stp-ejercicios","format":"standard","meta":{"footnotes":""},"categories":[202],"tags":[],"class_list":["post-62","post","type-post","status-publish","format-standard","hentry","category-stp-aplica"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/62","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/users\/8043"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/comments?post=62"}],"version-history":[{"count":2,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/62\/revisions"}],"predecessor-version":[{"id":22307,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/62\/revisions\/22307"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=62"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=62"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=62"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}