Tema 1 · Señales (Parte I)
Departament d’Enginyeria Electrònica
Escola Tècnica Superior d’Enginyeria
Despatx 2.2.14
Grado en Ingeniería Electrónica de Telecomunicación (GIET)
Curso 2026/2027
La correlación y la convolución van en la Parte II.
Prerrequisitos
Una señal es una función que transporta información sobre un fenómeno.
Una función asigna a cada valor de la variable independiente uno relacionado con la variable dependiente. Matemáticamente, lo expresamos como
\[x: \mathbb{R} \to \mathbb{R}, \qquad t \;\longmapsto\; x(t)\]
Conveniene repasar los conjuntos numéricos:
Relación entre conjuntos
Cada conjunto contiene al anterior: \(\mathbb{N} \subset \mathbb{Z} \subset \mathbb{Q} \subset \mathbb{R} \subset \mathbb{C}\).
\[x(t) = A\cos(\omega t + \phi)\]
\(x(t) = 2\cos(\pi t + \pi/2)\): \(T = 2\) s y \(t_0 = -0{,}5\) s
Lo que usaremos todo el curso
La exponencial compleja \(e^{j\theta}\) gira sobre el círculo unidad, y su parte real es una oscilación.
Son aquellas en las que cada término se obtiene multiplicando el anterior por una razón constante \(r\).
Término general: \(\;a_k = a_0\,r^k\)
Suma Finita, con \(r \neq 1\): \(\displaystyle\sum_{k=n_1}^{n_2} r^k = \frac{r^{n_1} - r^{\,n_2+1}}{1-r}\)
Suma Infinita, solo si \(|r| < 1\): \(\;\displaystyle\sum_{k=n_1}^{\infty} r^k = \frac{r^{n_1}}{1-r}\)
Convergencia de series geométricas
Muy importante, la serie geométrica infinita \(\sum_{k=0}^{\infty} r^k\) converge solo si \(|r| < 1\), y en ese caso su suma infinita es \(1/(1-r)\).
📐 Ejemplo 1.1: Serie geométrica
Dada la serie \(\left\lbrace 1,\ \frac{1}{2},\ \frac{1}{4},\ \frac{1}{8},\ \frac{1}{16},\ \dots \right\rbrace\) :
Cada término es la mitad del anterior, así que \(a_0 = 1\) y \(r = \tfrac{1}{2}\):
\(a_k = \left(\tfrac{1}{2}\right)^k\), y por tanto \(a_{10} = \left(\tfrac{1}{2}\right)^{10} = \tfrac{1}{1024}\).
\(\displaystyle\sum_{k=0}^{2} \left(\tfrac{1}{2}\right)^k = \frac{1 - (1/2)^3}{1 - 1/2} = \frac{7}{4}\)
Como \(|r| < 1\), converge: \(\displaystyle\sum_{k=0}^{\infty} \left(\tfrac{1}{2}\right)^k = \frac{1}{1 - 1/2} = 2\)
\[\frac{1}{2} + \frac{1}{4} + \frac{1}{8} + \frac{1}{16} + \dots = \sum_{k=1}^{\infty} \left(\frac{1}{2}\right)^k = \frac{1/2}{1 - 1/2} = 1\]
Cada elemento relaciona dos señales: la tensión \(v(t)\) y la corriente \(i(t)\).
Resistencia (ley de Ohm)
\[v(t) = R\,i(t)\]
Condensador
\[i(t) = C\,\frac{dv(t)}{dt}\]
Bobina
\[v(t) = L\,\frac{di(t)}{dt}\]
En función del eje horizontal, una señal puede ser:
Continua: \(\; x(\cdot): \mathbb{R} \to \mathbb{R}\), para todo instante \(t \in \mathbb{R}\).
Discreta: \(\; x[\cdot]: \mathbb{Z} \to \mathbb{R}\), solo en muestras \(n \in \mathbb{Z}\).
Notación
Usaremos paréntesis \((\cdot)\) para señales continuas \(x(t)\); y corchetes \([\cdot]\) para señales discretas, \(x[n]\).
📐 Ejemplo 1.2: Representación de señales
Dibuja las siguientes señales:
a) \(x_1[n] = \{1,\ -1,\ \underset{\uparrow}{2},\ 3,\ 1\}\), donde la flecha indica la muestra \(n = 0\) y la señal es nula fuera de las muestras indicadas
b) \(x_2[n] = \begin{cases} \left(\tfrac{1}{2}\right)^{n}, & n \geq 0 \\ \left(\tfrac{1}{2}\right)^{-n}, & n < 0 \end{cases}\)
c) \(x_3(t) = \begin{cases} t + 1, & -1 \leq t < 1 \\ 1, & 1 \leq t < 2 \\ 0, & \text{en otro caso} \end{cases}\)
d) \(x_4(t) = |\cos(\pi t)|\)
En función del eje vertical, una señal puede ser:
// Misma señal que fig_muestreo (_senal_conversion en figuras_ch01.py): continua de fondo en
// azul claro y muestras en rojo cada Ts.
{
const x = t => 0.58 * Math.sin(2 * Math.PI * 0.42 * t + 4.23)
+ 0.21 * Math.sin(2 * Math.PI * 1.27 * t + 3.26)
+ 0.10 * Math.sin(2 * Math.PI * 3.08 * t + 5.94);
const Ts = Math.round(ts_mu * 10) / 10;
const continua = d3.range(0, 4.0005, 0.004).map(t => ({t, v: x(t)}));
const muestras = d3.range(0, Math.floor(4 / Ts + 1e-9) + 1).map(n => ({t: n * Ts, v: x(n * Ts)}));
return Plot.plot({
width: 900, height: 260, marginTop: 36, marginBottom: 50, marginLeft: 56,
style: {margin: "0 auto", display: "block"},
x: {label: "t", labelAnchor: "center", labelArrow: "none", labelOffset: 46, domain: [-0.2, 4.2], ticks: d3.range(0, 4.01, 0.5)},
y: {label: null, domain: [-1.05, 1.05], ticks: [-1, -0.5, 0, 0.5, 1], grid: true},
marks: [
Plot.frame({stroke: "#333"}),
Plot.ruleY([0], {stroke: "#555", strokeWidth: 0.8}),
Plot.line(continua, {x: "t", y: "v", stroke: "#2c7fb8", strokeWidth: 2, strokeOpacity: 0.25}),
Plot.ruleX(muestras, {x: "t", y1: 0, y2: "v", stroke: "#e74c3c", strokeWidth: 1.5}),
Plot.dot(muestras, {x: "t", y: "v", fill: "#e74c3c", r: 3}),
Plot.text([`Muestreo: x[n] = x(nTₛ), con Tₛ = ${Ts.toFixed(1)} s`], {frameAnchor: "top", dy: -20, fill: "#222"})
]
});
}Periodo y frecuencia de muestreo
Llamamos periodo de muestreo (\(T_s\), del inglés, sampling) al intervalo de tiempo transcurrido entre dos muestras consecutivas; y a su inversa, la frecuencia de muestreo (\(f_s = 1/T_s\)), medida en Hz.
// Misma señal y estilo que fig_cuantizacion: continua de fondo en azul claro, niveles
// permitidos punteados y señal cuantizada en rojo. L = 2^B niveles repartidos en [-1, 1].
{
const x = t => 0.58 * Math.sin(2 * Math.PI * 0.42 * t + 4.23)
+ 0.21 * Math.sin(2 * Math.PI * 1.27 * t + 3.26)
+ 0.10 * Math.sin(2 * Math.PI * 3.08 * t + 5.94);
const L = 2 ** b_cu, paso = 2 / L;
const niveles = d3.range(L).map(k => (k - (L - 1) / 2) * paso);
const q = v => Math.min(Math.max((Math.floor(v / paso) + 0.5) * paso, niveles[0]), niveles[L - 1]);
const continua = d3.range(0, 4.0005, 0.0005).map(t => ({t, v: x(t), q: q(x(t))}));
return Plot.plot({
width: 900, height: 260, marginTop: 36, marginBottom: 50, marginLeft: 56,
style: {margin: "0 auto", display: "block"},
x: {label: "t", labelAnchor: "center", labelArrow: "none", labelOffset: 46, domain: [-0.2, 4.2], ticks: d3.range(0, 4.01, 0.5)},
y: {label: null, domain: [-1.05, 1.05], ticks: [-1, -0.5, 0, 0.5, 1]},
marks: [
Plot.frame({stroke: "#333"}),
Plot.ruleY(niveles, {stroke: "#b0b0b0", strokeWidth: 0.8, strokeDasharray: "2 3"}),
Plot.ruleY([0], {stroke: "#555", strokeWidth: 0.8}),
Plot.line(continua, {x: "t", y: "v", stroke: "#2c7fb8", strokeWidth: 2, strokeOpacity: 0.25}),
Plot.line(continua, {x: "t", y: "q", stroke: "#e74c3c", strokeWidth: 2}),
Plot.text([`Cuantización: B = ${b_cu} bits, L = 2${"⁰¹²³⁴⁵⁶⁷⁸⁹"[b_cu]} = ${L} niveles`], {frameAnchor: "top", dy: -20, fill: "#222"})
]
});
}Bits y niveles de cuantización
Los cuantizadores se definen por su número de bits \(B\), que determina el número de niveles de cuantización: \(L = 2^B\).
📐 Ejemplo 1.3: Entradas y salidas de un Arduino Nano
Identifica las entradas y salidas del Arduino Nano y su tipo (analógico o digital).
📐 Ejemplo 1.4: Señal PWM
Esto es una señal PWM. ¿Es analógica o digital? ¿Continua o discreta? Busca información sobre para qué sirve.
Nota
Todas las señales elementales y sus propiedades fundamentales deben ser conocidas de memoria, puesto que son la base de la asignatura. Presta especial atención a las diferencias entre las versiones discretas y continuas de las señales exponencial y senoidal ya que es motivo frecuente de confusión.
\[u(t) = \begin{cases} 1, & t \geq 0 \\ 0, & t < 0 \end{cases} \qquad\qquad u[n] = \begin{cases} 1, & n \geq 0 \\ 0, & n < 0 \end{cases}\]
\[r(t) = t\,u(t) \qquad\qquad r[n] = n\,u[n]\]
\[r(t) = t\,u(t) \qquad\qquad r[n] = n\,u[n]\]
Nota
Fíjate que, en la definición, la multiplicación por el escalón unitario es lo que consigue que la rampa esté definida solamente a partir del instante cero. Podemos decir aquí que el escalón actúa como “ventana”. El enventanado es un cocepto muy importante en Tratamiento Digital de Señales.
\[x(t) = A\,e^{\sigma t}\,u(t), \qquad \sigma \in \mathbb{R}\]
\[x[n] = A\,a^n\,u[n], \qquad a \in \mathbb{R} \]
| Comportamiento | Continua: \(A\,e^{\sigma t}\,u(t)\) | Discreta: \(A\,a^n\,u[n]\) |
|---|---|---|
| Decae (estable) | \(\sigma < 0\) | \(0 < a < 1\) |
| Constante (escalón) | \(\sigma = 0\) | \(a = 1\) |
| Crece (inestable) | \(\sigma > 0\) | \(a > 1\) |
| Alternante y estable | — | \(-1 < a < 0\) |
| Alternante y constante | — | \(a = -1\) |
| Alternante e inestable | — | \(a < -1\) |
Estabilidad
\[x(t) = A\,\cos(\omega t + \phi)\,u(t), \qquad x[n] = A\,\cos(\Omega n + \Phi)\,u[n], \qquad \omega, \Omega \in \mathbb{R} \]
Diferencias importantes
Las senoidales continuas y discretas presentan diferencias importantes, que conviene tener muy claras
📐 Ejemplo 1.5: Evoluciones en la vida cotidiana
Piensa situaciones de la vida cotidiana que presenten, a lo largo del tiempo, una evolución:
a) exponencial.
b) oscilatoria.
c) oscilatoria amortiguada.
Una senoidal continua \(x(t) = A\,\cos(\omega t + \phi)\) es siempre periódica y su frecuencia analógica \(\omega\) se mide en radianes por segundo (rad/s)
Siempre se cumple la ya conocida relación entre frecuencia y periodo
\[\omega = 2\pi f = \frac{2\pi}{T}\]
\[ \frac{T_1}{T_2} = \frac{M}{N}, \quad M, N \in \mathbb{N}\]
¿Cómo lo aplicamos?
En la práctica, si vemos que el cociente \(T_1/T_2\) es racional, entonces la suma de senoidales es periódica y \(T_0 = \text{mcm}(T_1, T_2)\).
Una senoidal digital \(x[n] = A\,\cos(\Omega n + \Phi)\) no siempre es periódica y la “frecuencia digital” \(\Omega\) se mide en radianes por muestra (rad/muestra):
Para que sea periódica, con periodo \(N \in \mathbb{Z}\), el desfase introducido en esas \(N\) muestras debe ser múltiplo entero de \(2\pi\):
\[ \Omega N = 2\pi M, \qquad M \in \mathbb{Z} \]
¿Cómo lo aplicamos?
El periodo \(N_0\) (si existe) es el menor entero positivo que cumple
\[\frac{\Omega}{2\pi} = \frac{M}{N_0}, \qquad M, N_0 \in \mathbb{Z}\]
Si dicho cociente es irracional, la senoidal no es periódica.
\[ \cos(\Omega n + \Phi) = \cos\big((\Omega - 2\pi k)n + \Phi\big),\quad k,n \in \mathbb{Z} \]
\[ \cos(\omega t + \phi) \neq \cos\big((\omega - 2\pi k)t + \phi\big),\quad k \in \mathbb{Z},\, t \in \mathbb{R} \]
¿Cómo simplificamos una senoidal digital?
📐 Ejemplo 1.6: Periodo y representación
Determina si las siguientes señales son periódicas y, en caso de serlo, calcula su periodo y dibújalas:
a) \(x_1[n] = \cos\left( \frac{\pi}{4}n \right)\)
b) \(x_2[n] = \cos\left( n \right)\)
c) \(x_3[n] = \cos\left( \frac{3\pi}{5}n + \frac{12\pi}{5} \right)\)
d) \(x_4[n] = \cos\left( \frac{7\pi}{4}n + \frac{3\pi}{4} \right)\)
\(\dfrac{\Omega}{2\pi} = \dfrac{\pi/4}{2\pi} = \dfrac{1}{8}\) es racional: periódica con \(N = 8\) (\(M = 1\)).
\(\dfrac{\Omega}{2\pi} = \dfrac{1}{2\pi}\) es irracional: no periódica, no hay \(N_0\) entero.
El cociente \(\dfrac{\Omega}{2\pi} = \dfrac{3\pi/5}{2\pi} = \dfrac{3}{10}\) es racional, por tanto, periódica con \(N = 10\) (\(M = 3\)). Como \(\Omega \leq \pi\), simplemente sacando factor común se llega a \(x_3[n] = \cos\left(\frac{3\pi}{5}(n+4)\right)\).
El cociente \(\dfrac{\Omega}{2\pi} = \dfrac{7\pi/4}{2\pi} = \dfrac{7}{8}\) es racional, por tanto, periódica con \(N = 8\) (\(M = 7\)). Como \(\Omega > \pi\), es equivalente a \(\Omega' = \frac{7\pi}{4} - 2\pi = -\frac{\pi}{4}\), y como el coseno es par, sus muestras son las mismas que las de \(\cos\left(\frac{\pi}{4}n - \frac{3\pi}{4}\right)\). Sacando factor común se llega a \(x_4[n] = \cos\left(\frac{\pi}{4}(n-3)\right)\).
📐 Ejemplo 1.7: Periodicidad
Determina si las siguientes señales son periódicas y, en caso de serlo, calcula su periodo:
a) \(x_1(t) = \cos(2t) + \sin(3t)\)
b) \(x_2(t) = \cos(3t) + \sin(\pi t)\)
c) \(x_5[n] = \cos\left(\dfrac{\pi n}{3}\right) + \sin\left(\dfrac{\pi n}{4}\right)\)
d) \(x_6[n] = \cos\left(\dfrac{\pi n}{5}\right) + \sin\left(\dfrac{n}{2}\right)\)
\(T_1 = \pi\), \(T_2 = \frac{2\pi}{3}\); \(\frac{T_1}{T_2} = \frac{3}{2}\) racional: periódica, \(T_0 = \text{mcm}(\pi, 2\pi/3) = 2\pi\).
\(T_1 = \frac{2\pi}{3}\), \(T_2 = 2\); \(\frac{T_1}{T_2} = \frac{\pi}{3}\) irracional: no periódica.
\(\frac{\Omega_1}{2\pi} = \frac{1}{6}\) y \(\frac{\Omega_2}{2\pi} = \frac{1}{8}\): periódica, \(N_0 = \text{mcm}(6, 8) = 24\).
\(N_1 = 10\), pero \(\frac{\Omega_2}{2\pi} = \frac{1}{4\pi}\) es irracional: no periódica.
\[ x(t) = A\,e^{\sigma t}\cos(\omega t + \phi)\,u(t), \qquad x[n] = A\,a^n\cos(\Omega n + \Phi)\,u[n] \]
Estabilidad
sac = {
const w = w_sac, f = f_sac;
const x = t => t < 0 ? 0 : Math.exp(a_sac * t) * Math.cos(w * t + f);
return {
senal: d3.range(-0.5, 5.0001, 0.005).map(t => ({t, x: x(t)})),
env: d3.range(0, 5.0001, 0.02).map(t => ({t, e: Math.exp(a_sac * t)})),
tau: a_sac < 0 && 1 / Math.abs(a_sac) <= 5 ? [1 / Math.abs(a_sac)] : []
};
}
Plot.plot({
width: 1216, height: 340,
x: {label: "t (s)", domain: [-0.5, 5]},
y: {label: "x(t)", grid: true, domain: a_sac <= 0 ? [-1.15, 1.15] : undefined},
marks: [
Plot.ruleY([0]),
Plot.line(sac.env, {x: "t", y: "e", stroke: "#555", strokeDasharray: "4 4"}),
Plot.line(sac.env, {x: "t", y: d => -d.e, stroke: "#555", strokeDasharray: "4 4"}),
Plot.ruleX(sac.tau, {stroke: "#41ab5d", strokeDasharray: "6 4", strokeWidth: 2}),
Plot.text(sac.tau, {x: d => d, frameAnchor: "top", text: () => "τ", dx: 12, fill: "#41ab5d"}),
Plot.areaY(sac.senal, {x: "t", y: "x", fill: "#2c7fb8", fillOpacity: 0.25}),
Plot.line(sac.senal, {x: "t", y: "x", stroke: "#2c7fb8", strokeWidth: 2.5})
]
})viewof a_am = Inputs.range([-1.2, 1.2], {value: 0.9, label: "a", format: v => v.toFixed(2)})
// Casilla marcada: el deslizador pasa a ser k, con Ω = kπ y k en pasos de 0.01 (racional, así
// que el coseno es periódico), y el campo numérico se sustituye por k como fracción simplificada.
// Al cambiar la casilla vuelve al valor por defecto: en Quarto, `this` no es el valor anterior.
viewof w_am = {
if (!pi_am) {
return Inputs.range([0, Math.PI], {value: Math.PI / 8, label: "Ω (rad/muestra)",
format: v => v.toFixed(2)});
}
const el = Inputs.range([0, 1], {value: 0.4, step: 0.01, label: "k (Ω = kπ)"});
const mcd = (p, q) => Number.isInteger(p) && Number.isInteger(q) ? (q === 0 ? p : mcd(q, p % q)) : 1;
const fraccion = v => {
const m = Math.round(v * 100), g = mcd(m, 100) || 100;
return 100 / g === 1 ? `${m / g}` : `${m / g}/${100 / g}`;
};
const campo = el.querySelector('input[type="number"]');
const texto = document.createElement("span");
texto.className = "ojs-fraccion";
campo.style.display = "none";
campo.after(texto);
const actualizar = () => { texto.textContent = fraccion(el.value); };
el.addEventListener("input", actualizar);
actualizar();
return el;
}
viewof pi_am = Inputs.toggle({label: "Coseno periódico", value: false})
W_am = pi_am ? w_am * Math.PI : w_am{
const num = v => v.toFixed(2);
const base = a_am < 0 ? `(${num(a_am)})` : num(a_am);
const fase = Math.abs(f_am) < 0.005 ? "" : f_am < 0 ? ` - ${num(-f_am)}` : ` + ${num(f_am)}`;
// Con la casilla marcada, Ω = kπ = (m/100)π como fracción simplificada de π
const mcd = (p, q) => Number.isInteger(p) && Number.isInteger(q) ? (q === 0 ? p : mcd(q, p % q)) : 1;
const m = Math.round(w_am * 100), g = mcd(m, 100) || 100;
const p = m / g, q = 100 / g;
const frac = p === 0 ? "0" : q === 1 ? `${p === 1 ? "" : p}\\pi` : `\\tfrac{${p === 1 ? "" : p}\\pi}{${q}}`;
const omega = pi_am ? frac : num(W_am);
const periodo = N0_am ? `N₀ = ${N0_am} muestra${N0_am > 1 ? "s" : ""}` : "—";
return html`<div>
<div class="ojs-ecuacion">${tex`\displaystyle x[n] = ${base}^{\,n}\cos(${omega}\,n${fase})\,u[n]`}</div>
<div class="ojs-texto"><p>Periodo: ${periodo}</p></div>
</div>`;
}amort = {
const n = d3.range(0, 41);
return {
marcas: N0_am > 1 ? d3.range(0, 41, N0_am) : [],
muestras: n.map(i => ({n: i, x: Math.pow(a_am, i) * Math.cos(W_am * i + f_am)})),
env: n.map(i => ({n: i, e: Math.pow(Math.abs(a_am), i)}))
};
}
Plot.plot({
width: 1216, height: 300,
x: {label: "n"},
y: {label: "x[n]", grid: true, domain: Math.abs(a_am) <= 1 ? [-1.15, 1.15] : undefined},
marks: [
Plot.ruleY([0]),
Plot.ruleX(amort.marcas, {stroke: "#e74c3c", strokeDasharray: "5 4"}),
Plot.line(amort.env, {x: "n", y: "e", stroke: "#555", strokeDasharray: "4 4"}),
Plot.line(amort.env, {x: "n", y: d => -d.e, stroke: "#555", strokeDasharray: "4 4"}),
Plot.ruleX(amort.muestras, {x: "n", y1: 0, y2: "x", stroke: "#2c7fb8", strokeWidth: 2}),
Plot.dot(amort.muestras, {x: "n", y: "x", fill: "#2c7fb8", r: 4})
]
})\[\delta[n] = \begin{cases} 1, & n = 0 \\ 0, & n \neq 0 \end{cases}\]
Respuesta impulsional
Cuando excitamos un sistema con un impulso, la salida que obtenemos contiene toda la información sobre su comportamiento.
\[ \delta(t): \quad \int_{-\infty}^{\infty} \delta(t)\, dt = 1, \quad \delta(t) = 0 \; \forall\, t \neq 0 \]
Significado
Lo importante es comprender su significado físico, análogo al impulso discreto: un evento súbito.
\[\int_{-\infty}^{\infty} x(t)\,\delta(t - t_0)\,dt = x(t_0)\]
\[\sum_{n=-\infty}^{\infty} x[n]\,\delta[n - n_0] = x[n_0]\]
Aplicación
Esta propiedades seran cruciales a la hora de calcular convoluciones y correlaciones ya que permiten simplificar mucho los cálculos.
\[x(t) = \underbrace{\frac{x(t) + x(-t)}{2}}_{x_p(t)} + \underbrace{\frac{x(t) - x(-t)}{2}}_{x_i(t)}\]
Aplicación
Se puede aplicar directamente estas fórmulas para obtener la descomposición de cualquier señal en su parte par e impar.
📐 Ejemplo 1.8: Descomposición de una señal continua
Dibuja la señal \(x(t) = (1 + t)^2\) y calcula su descomposición como suma de una señal par y una impar.
Como \(x(-t) = (1-t)^2\), las fórmulas dan directamente:
\[x_p(t) = \frac{(1+t)^2 + (1-t)^2}{2} = 1 + t^2\]
\[x_i(t) = \frac{(1+t)^2 - (1-t)^2}{2} = 2t\]
📐 Ejemplo 1.9: Descomposición de una señal discreta
Dibuja la señal \(x[n] = \{\underset{\uparrow}{1},\, 1,\, 1\}\) y calcula su descomposición como suma de una señal par y una impar.
Basta tabular \(x[n]\) y \(x[-n]\) y aplicar las fórmulas muestra a muestra:
| \(n\) | \(-2\) | \(-1\) | \(0\) | \(1\) | \(2\) |
|---|---|---|---|---|---|
| \(x[n]\) | 0 | 0 | 1 | 1 | 1 |
| \(x[-n]\) | 1 | 1 | 1 | 0 | 0 |
| \(x_p[n]\) | 0,5 | 0,5 | 1 | 0,5 | 0,5 |
| \(x_i[n]\) | −0,5 | −0,5 | 0 | 0,5 | 0,5 |
Tender a cero no hace finita a una señal.
📐 Ejemplo 1.10: Duración de una señal
Representa las siguientes señales y determina si son de duración finita o infinita:
a) \(x_1[n] = u[n] - u[n-1]\)
b) \(x_2(t) = e^{-t}\cos(4\pi t) \; u(t)\)
La resta de dos escalones desplazados una muestra deja una sola muestra no nula: \(x_1[n] = \delta[n]\). Duración finita.
Senoidal amortiguada con \(\sigma = -1\): la envolvente \(e^{-t}\) tiende a cero pero nunca lo alcanza. Duración infinita. La constante de tiempo es \(1/|\sigma| = 1\) s, donde la envolvente vale \(e^{-1} \approx 0{,}37\), y la oscilación tiene periodo \(T = 2\pi/\omega = 0{,}5\) s.
Se van a ilustrar las diferentes operaciones con la siguiente señal de ejemplo:
\[x(t) = \begin{cases} 2t, & 0 \leq t < 1 \\ 2, & 1 \leq t < 2 \\ -1, & 2 \leq t < 3 \\ 0, & \text{en otro caso} \end{cases}\]
\[y(t) = x(t - t_0) \qquad t_0 > 0:\ \text{retardo (derecha)} \qquad t_0 < 0:\ \text{adelanto (izquierda)}\]
\[y(t) = x(-t)\]
\[y(t) = x(at), \quad a > 0 \qquad a > 1:\ \text{compresión} \qquad 0 < a < 1:\ \text{expansión}\]
La señal se comprime o expande según el valor de \(a\).
En discreto, llamamos diezmado a la compresión y sobremuestreo a la expansión
Queremos obtener \(y(t) = x(2t - 2)\) a partir de \(x(t)\):
Regla
Para \(y(t) = x(at + b)\), primero se desplaza, \(v(t) = x(t + b)\), y después se escala, \(y(t) = v(at)\).
\[y(t) = x(t) + c \qquad c > 0:\ \text{sube} \qquad c < 0:\ \text{baja}\]
\[y(t) = -x(t)\]
\[y(t) = A\,x(t), \quad A > 0 \qquad A > 1:\ \text{amplificación} \qquad 0 < A < 1:\ \text{atenuación}\]
La señal se amplifica o atenúa según el valor de \(A\) (muchas veces llamado ganancia)
Es común expresar la ganancia en decibelios: \(A_{dB} = 20\log_{10}A\)
viewof g_op = Inputs.range([-2, 2], {value: 1, step: 0.5, label: "A (ganancia)", format: v => v.toFixed(2)})
viewof c_op = Inputs.range([-2, 2], {value: 0, step: 0.5, label: "c (offset)", format: v => v.toFixed(2)})
// Se vuelve a crear (desmarcada) con cada reto nuevo
viewof sol_op = { nuevo_op; return Inputs.toggle({label: "Ver solución", value: false}); }xop = v => (v >= 0 && v < 1) ? 2 * v : (v >= 1 && v < 2) ? 2 : (v >= 2 && v < 3) ? -1 : 0
t_op = d3.range(-6, 6.001, 0.005)
// Transformación oculta con valores sencillos; se sortea de nuevo al pulsar «Nuevo reto».
// Se descarta la identidad, que es el punto de partida de los controles.
reto_op = {
nuevo_op;
const elegir = xs => xs[Math.floor(Math.random() * xs.length)];
let r;
do {
r = {a: elegir([-2, -1, -0.5, 0.5, 1, 2]), b: elegir([-3, -2, -1, 0, 1, 2, 3]),
A: elegir([-2, -1, -0.5, 0.5, 1, 2]), c: elegir([-1, 0, 1])};
} while (r.a === 1 && r.b === 0 && r.A === 1 && r.c === 0);
return r;
}
ops = t_op.map(t => ({t, x: xop(t), objetivo: reto_op.A * xop(reto_op.a * t + reto_op.b) + reto_op.c,
intento: g_op * xop(a_op * t + b_op) + c_op}))
// Acierto si las curvas coinciden, aunque se llegue con otros parámetros
acierto_op = ops.every(d => Math.abs(d.objetivo - d.intento) < 1e-6){
const num = v => `${+v.toFixed(2)}`;
const suma = v => v === 0 ? "" : v < 0 ? ` - ${num(-v)}` : ` + ${num(v)}`;
// Coeficiente delante de una expresión, sin escribir 1 ni -1: x(-t + 1) en lugar de 1x(-1t + 1)
const coef = (v, expr) => v === 1 ? expr : v === -1 ? `-${expr}` : `${num(v)}\\,${expr}`;
if (sol_op) {
const r = reto_op;
const formula = `y(t) = ${coef(r.A, `x(${coef(r.a, "t")}${suma(r.b)})`)}${suma(r.c)}`;
return html`<div class="ojs-ecuacion">${tex`\displaystyle ${formula}`}</div>`;
}
return html`<div class="ojs-texto"><p>${acierto_op ? "✅ <b>¡Correcto!</b>" : "Mueve los controles hasta que la curva azul tape la roja."}</p></div>`;
}Plot.plot({
width: 1216, height: 256,
x: {label: "t", domain: [-6, 6]}, y: {label: null, domain: [-5.5, 5.5], grid: true},
color: {legend: true, domain: ["x(t)", "objetivo", "tu intento"], range: ["#aaa", "#e74c3c", "#2c7fb8"]},
marks: [
Plot.ruleY([0]),
Plot.line(ops, {x: "t", y: "x", stroke: () => "x(t)"}),
Plot.areaY(ops, {x: "t", y: "objetivo", fill: "#e74c3c", fillOpacity: 0.25}),
Plot.line(ops, {x: "t", y: "objetivo", stroke: () => "objetivo", strokeWidth: 2}),
Plot.line(ops, {x: "t", y: "intento", stroke: () => "tu intento", strokeWidth: 2.5, strokeDasharray: "8 5"})
]
})📐 Ejemplo 1.11: Transformaciones de una señal
Dada la función:
\[x(t) = \begin{cases} t + 1, & -1 \leq t < 0 \\ 1, & 0 \leq t < 2 \\ 0, & \text{en otro caso} \end{cases}\]
dibuja, las siguientes señales:
a) \(y_1(t) = x(t-2)\) \(\qquad\) b) \(y_2(t) = x(3-t)\)
c) \(y_3(t) = x(2t+2)\) \(\qquad\) d) \(y_4(t) = -2\,x(1-t/2) +1\)
Energía
La energía es una medida absoluta de la magnitud de una señal:
\[E_x = \sum_{n=-\infty}^{\infty} |x[n]|^2\]
\[E_x = \int_{-\infty}^{\infty} |x(t)|^2\,dt\]
Potencia media
La potencia media es una medida de la magnitud de una señal por unidad de tiempo:
\[P_x = \lim_{N\to\infty} \frac{1}{2N+1} \sum_{n=-N}^{N} |x[n]|^2\]
\[P_x = \lim_{T\to\infty} \frac{1}{2T} \int_{-T}^{T} |x(t)|^2\,dt\]
Potencia de señales periódicas
Para una señal periódica basta promediar sobre un periodo, lo que permite simplificar el cálculo de la integral (o el sumatorio).
En función de su energía y potencia, decimos que las señales son:
| Energía | Potencia | |
|---|---|---|
| De energía | \(0 < E_x < \infty\) | \(P_x = 0\) |
| De potencia | \(E_x = \infty\) | \(0 < P_x < \infty\) |
Exclusión mutua y señales no acotadas
📐 Ejemplo 1.12: Energía y potencia
Calcula la energía y la potencia media de las siguientes señales, y clasifícalas:
a) \(x_1[n] = 3\big(u[n] - u[n-5]\big)\)
b) \(x_2(t) = 4\cos\left(100\pi t + \frac{\pi}{3}\right)\)
c) \(x_3[n] = \left(\frac{1}{2}\right)^n u[n]\)
Es un pulso de 5 muestras (\(n = 0,\ldots,4\)) de amplitud 3, así que el sumatorio tiene solo cinco términos no nulos:
\[E_{x_1} = \sum_{n=0}^{4} |3|^2 = 5 \cdot 9 = 45\]
\[P_{x_1} = \lim_{N\to\infty} \frac{1}{2N+1} \sum_{n=-N}^{N} |x_1[n]|^2 = \lim_{N\to\infty} \frac{45}{2N+1} = 0\]
Energía finita y potencia nula, por tanto, se trata de una señal de energía.
Es periódica (\(T = \frac{2\pi}{100\pi} = \frac{1}{50}\) s \(= 20\) ms), luego basta promediar un periodo:
\[P_{x_2} = \frac{1}{T}\int_{0}^{T} \left|4\cos\left(100\pi t + \tfrac{\pi}{3}\right)\right|^2 dt = \frac{16}{T}\int_{0}^{T} \cos^2\left(100\pi t + \tfrac{\pi}{3}\right) dt\]
Se linealiza el cuadrado con \(\cos^2\alpha = \dfrac{1 + \cos 2\alpha}{2}\):
\[P_{x_2} = \frac{16}{T}\int_{0}^{T} \frac{1 + \cos\left(200\pi t + \frac{2\pi}{3}\right)}{2}\,dt = \frac{8}{T}\underbrace{\int_{0}^{T} dt}_{\displaystyle = \,T} + \frac{8}{T}\underbrace{\int_{0}^{T} \cos\left(200\pi t + \tfrac{2\pi}{3}\right) dt}_{\displaystyle = \,0}\]
La segunda integral se anula, porque en \(T\) el coseno recorre dos periodos completos. Queda, por tanto, \(P_{x_2} = 8\). La energía es infinita, ya que la señal es periódica y no tiende a cero. Se trata por tanto de una señal de potencia.
Es una señal de duración infinita que tiende a cero. Si calculamos su cuadrado, tenemos que
\[ |x_3[n]|^2 = \left|\left(\tfrac{1}{2}\right)^n\right|^2 = \left(\tfrac{1}{4}\right)^{n}\]
Por tanto, la energía es:
\[E_{x_3} = \sum_{n=0}^{\infty} \left(\tfrac{1}{4}\right)^{n} = \frac{1}{1 - \tfrac{1}{4}} = \frac{4}{3}\]
Al ser la energía finita, la potencia es nula:
\[P_{x_3} = \lim_{N\to\infty} \frac{1}{2N+1} \sum_{n=0}^{N} \left(\tfrac{1}{4}\right)^{n} = \lim_{N\to\infty} \frac{4/3}{2N+1} = 0\]
Es, por tanto, una señal de energía: que la duración sea infinita no impide que la energía sea finita, basta con que la señal decaiga lo bastante deprisa.
Señales y Sistemas Lineales - GIET - 2026/2027