{"id":668,"date":"2016-12-12T09:23:13","date_gmt":"2016-12-12T14:23:13","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/estg1003\/?p=668"},"modified":"2026-04-04T10:53:59","modified_gmt":"2026-04-04T15:53:59","slug":"cdf-pmf-senal-triangular","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/stp-u02eva\/cdf-pmf-senal-triangular\/","title":{"rendered":"cdf -Se\u00f1al triangular"},"content":{"rendered":"\n<p><strong>Referencia<\/strong>: Leon W Couch ap\u00e9ndice B p675<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Se\u00f1al Triangular, pmf, cdf<\/h2>\n\n\n\n<p>Se obtiene barriendo una ventana estrecha de <strong>\u0394x<\/strong> voltios de ancho, verticalmente a lo largo de las formas de onda y despu\u00e9s midiendo la frecuencia relativa de la ocurrencia de voltajes en la ventana <strong>\u0394x<\/strong>.<\/p>\n\n\n\n<p>El eje de tiempo se divide en <strong>n<\/strong> intervalos y la forma de onda aparece <strong>n\u0394x<\/strong> veces dentro de estos intervalos en la ventana \u0394x.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"232\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/07\/triangularpmf01.png\" alt=\"se\u00f1al triangular pmf Leon W Couch ap\u00e9ndice B p675\" class=\"wp-image-664\" \/><\/figure>\n\n\n\n<p>Para observar lo indicado usando python, se presenta el siguiente grupo de instrucciones:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Generar la se\u00f1al<\/h3>\n\n\n\n<p>En un intervalo [<strong>a<\/strong>,<strong>b<\/strong>] de tiempo, con <strong>n<\/strong> muestras en el intervalo y una se\u00f1al triangular con frecuencia <strong>fs<\/strong> Hz.<\/p>\n\n\n\n<p>Las librer\u00edas de se\u00f1ales de <code>scipy<\/code> tiene la se\u00f1al diente de sierra, con par\u00e1metro de <strong>simetr\u00eda<\/strong> que permite variar la forma del tri\u00e1ngulo para ajustarlo a una se\u00f1al sim\u00e9trica como la del ejemplo.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport scipy.signal as signal\nimport scipy.stats as stats\n\n# INGRESO\n# Rango en tiempo de la se\u00f1al y muestras\na = 0\nb = 1\nn = 2000\n# Frecuencia de la se\u00f1al en Hz\nfs = 5\n\n# PROCEDIMIENTO\n# simetria de la se\u00f1al triangular diente de sierra\nsimetria = 0.5\nt = np.linspace(a, b, n)\nsenal = signal.sawtooth(2 * np.pi * fs * t, simetria)\n\n# SALIDA\nplt.plot(t,senal)\nplt.title('Se\u00f1al Triangular')\nplt.xlabel('t')\nplt.ylabel('se\u00f1al')\nplt.show()\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/07\/triangularpmf02.png\"><img decoding=\"async\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/07\/triangularpmf02.png\" alt=\"\" class=\"wp-image-665\" \/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Determinar la funci\u00f3n de probabilidad de masa PMF<\/h3>\n\n\n\n<p>Se divide el rango de valores posibles de la se\u00f1al en <strong>m<\/strong> intervalos.<\/p>\n\n\n\n<p>Para simplificar el conteo de valores por rango se usa la funci\u00f3n <code>scipy.stats.relfreq<\/code>, que cuenta en <strong>m<\/strong> intervalos entre el rango de la se\u00f1al, dando como resultado las frecuencias relativas a intervalos \u0394x<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\sum_{i=0}^{N}p_i(x)=1 <\/span>\n\n\n\n<p>Si se considera aproximar la funci\u00f3n a cont\u00ednua para observaci\u00f3n, ser\u00e1 necesario compensar el vector de relativas al dividir por <strong>\u0394x<\/strong> pues el conteo relativo depende del n\u00famero de divisiones <strong>m<\/strong>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Funci\u00f3n de Probabilidad de Masa, PMF\nm = 20  # intervalos en an\u00e1lisis\n\n#PROCEDIMIENTO\nrelativa = stats.relfreq(senal, numbins = m )\ndeltax   = relativa.binsize\n\n# considerando el deltax, para valor de PMF\nrelcontinua = relativa.frequency\/deltax\n\n# Eje de frecuencias, por cada deltax\nsenalmin = np.min(senal)\nsenalmax = np.max(senal)\nsenalrango = np.linspace(senalmin,senalmax,m)\n\n# SALIDA\nprint('frecuencia relativa:')\nprint(relativa.frequency)\nprint('Rango de Se\u00f1al')\nprint(senalrango)\nprint('Aproximaci\u00f3n a cont\u00ednua')\nprint(relcontinua)\n\n# SALIDA Grafico de PMF\npa = 0-0.1 # rango eje frecuencias\npb = 1+0.1\n\nplt.subplot(211)\nplt.axis(&#x5B;senalmin-deltax,senalmax+deltax,pa,pb])\nplt.bar(senalrango,relativa.frequency, width=deltax*0.8)\nplt.xlabel('Amplitud de se\u00f1al')\nplt.ylabel('PMF')\n\nplt.subplot(212)\nplt.axis(&#x5B;senalmin-deltax,senalmax+deltax,pa,pb])\nplt.plot(senalrango,relcontinua)\nplt.xlabel('Amplitud de se\u00f1al')\nplt.ylabel('Aproximaci\u00f3n a PDF')\nplt.show()\n<\/pre><\/div>\n\n\n<pre class=\"wp-block-code alignwide\"><code>frecuencia relativa:\n&#091; 0.027  0.052  0.053  0.053  0.052  0.053  0.052  0.053  0.052  0.053  0.053  0.052  0.053  0.052  0.053  0.052  0.053  0.053  0.052  0.027]\nRango de Se\u00f1al\n&#091;-1.        -0.8947895 -0.789579  -0.6843685 -0.579158  -0.4739475 -0.368737  -0.2635265 -0.158316  -0.0531055  0.052105   0.1573155  0.262526   0.3677365  0.472947   0.5781575  0.683368   0.7885785  0.893789   0.9989995]\nAproximaci\u00f3n a cont\u00ednua\n&#091; 0.25662838  0.49424725  0.503752    0.503752    0.49424725  0.503752   0.49424725  0.503752    0.49424725  0.503752    0.503752    0.49424725  0.503752    0.49424725  0.503752    0.49424725  0.503752    0.503752  0.49424725  0.25662838]\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"465\" height=\"305\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/07\/triangularpmf03.png\" alt=\"pmf se\u00f1al triangular gr\u00e1fica 03\" class=\"wp-image-666\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Determinar la Funci\u00f3n de distribuc\u00ed\u00f3n acumulada<\/h3>\n\n\n\n<p>Considere el caso discreto, solo es necesario ir acumulando los valores de \"relativa\".<\/p>\n\n\n\n<p>Al usar la aproximaci\u00f3n a cont\u00ednua, la sumatoria debe considerar el \u00e1rea bajo la curva, por lo que los valores se multiplican por \u0394x antes de acumular los valores de las frecuencias.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Funci\u00f3n distribuci\u00f3n acumulada\nacumulada = np.cumsum(relcontinua*deltax)\n\n# Salida CDF\nplt.step(senalrango,relcontinua,label='pdf', where='post')\nplt.step(senalrango,acumulada,label='cdf', where='post')\nplt.xlabel('Amplitud de se\u00f1al')\nplt.title(' Funci\u00f3n de distribui\u00f3n acumulada , CDF')\nplt.legend()\nplt.show()\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"502\" height=\"364\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/07\/triangularpmf04.png\" alt=\"pmf se\u00f1al triangular gr\u00e1fica 04\" class=\"wp-image-21975\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p><strong>Tarea<\/strong>: realice el ejercicio con otras se\u00f1ales peri\u00f3dicas.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Referencia: Leon W Couch ap\u00e9ndice B p675 Se\u00f1al Triangular, pmf, cdf Se obtiene barriendo una ventana estrecha de \u0394x voltios de ancho, verticalmente a lo largo de las formas de onda y despu\u00e9s midiendo la frecuencia relativa de la ocurrencia de voltajes en la ventana \u0394x. El eje de tiempo se divide en n intervalos [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"wp-custom-template-entrada-stp-unidades","format":"standard","meta":{"footnotes":""},"categories":[214],"tags":[],"class_list":["post-668","post","type-post","status-publish","format-standard","hentry","category-stp-u02eva"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/668","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=668"}],"version-history":[{"count":4,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/668\/revisions"}],"predecessor-version":[{"id":23053,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/668\/revisions\/23053"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=668"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=668"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=668"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}