5.10: Espectrogramas
- Page ID
- 85376
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)
( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\id}{\mathrm{id}}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\kernel}{\mathrm{null}\,}\)
\( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\)
\( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\)
\( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)
\( \newcommand{\vectorA}[1]{\vec{#1}} % arrow\)
\( \newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow\)
\( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vectorC}[1]{\textbf{#1}} \)
\( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)
\( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)
\( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)- Los espectrogramas representan visualmente la señal del habla y se explica brevemente el cálculo del Espectrograma.
Sabemos cómo adquirir señales analógicas para procesamiento digital (prefiltrado, muestreo y conversión A/D) y para calcular espectros de señales de tiempo discreto (usando el algoritmo FFT), pongamos estos diversos componentes juntos para aprender cómo se calcula el espectrograma mostrado Figura 5.10.1 a continuación, que se utiliza para analizar el habla. El habla se muestreó a una velocidad de 11.025 kHz y se pasó a través de un convertidor A/D de 16 bits.
Los discos compactos de música (CD) codifican sus señales a una frecuencia de muestreo de 44.1 kHz. Aprenderemos la justificación de este número más adelante. La frecuencia de muestreo de 11.025 kHz para el habla es 1/4 de la frecuencia de muestreo de CD, y fue la frecuencia de muestreo más baja disponible acorde con los anchos de banda de la señal de voz disponibles en mi computadora.
Al observar la Figura 5.10.1, la señal duró poco más de 1.2 segundos. ¿Cuánto tiempo duró la señal muestreada (en términos de muestras)? ¿Cuál fue la velocidad de datos durante el proceso de muestreo en bps (bits por segundo)? Suponiendo que el almacenamiento de la computadora está organizado en términos de bytes (cantidades de 8 bits), ¿cuántos bytes de memoria de computadora consume el habla?

Solución
Número de muestras es igual a 1.2 × 11025 = 13230
La velocidad de datos es 11025 × 16 = 176.4 kbps
El almacenamiento requerido sería de 26460 bytes
La señal discreta de tiempo resultante, mostrada en la parte inferior de la Figura 5.10.1, cambia claramente su carácter con el tiempo. Para mostrar estos cambios espectrales, la señal larga se seccionó en cuadros: comparativamente cortos, grupos contiguos de muestras. Conceptualmente, se calcula una transformada de Fourier de cada trama utilizando la FFT. Cada trama no es tan larga como para que se retengan variaciones significativas de señal dentro de una trama, pero no tan cortas que perdamos el carácter espectral de la señal. En términos generales, el espectro de la señal de voz se evalúa en segmentos de tiempo sucesivos y se apilan uno al lado del otro para que el eje x corresponda al tiempo y a la frecuencia del eje y, con el color que indica la amplitud espectral.
Un detalle importante surge cuando examinamos cada señal enmarcada de la figura anterior.

En los bordes de la trama, la señal puede cambiar muy abruptamente, una característica que no está presente en la señal original. Una transformación de tal segmento revela una curiosa oscilación en el espectro, un artefacto directamente relacionado con este cambio brusco de amplitud. Una mejor manera de enmarcar señales para espectrogramas es aplicar una ventana: dar forma a los valores de la señal dentro de un marco para que la señal decae con gracia a medida que se acerca a los bordes. Esta conformación se logra multiplicando la señal enmarcada por la secuencia w (n). Al seccionar la señal, aplicamos esencialmente una ventana rectangular:
\[w(n)=1,0\leq n\leq N-1 \nonumber \]
Una ventana mucho más agraciada es la ventana de Hanning; tiene la forma coseno
\[w(n)=\frac{1}{2}\left ( 1-\cos \left ( \frac{2\pi n}{N}\right )\right ) \nonumber \]
Como se muestra en la Figura 5.10.2, esta conformación reduce en gran medida las oscilaciones espurias en el espectro de cada cuadro. Considerando el espectro del marco de ventana de Hanning, encontramos que las oscilaciones resultantes de aplicar la ventana rectangular oscurecieron un formante (el que se encuentra a poco más de la mitad de la frecuencia Nyquist).
¿Cuál podría ser la fuente de estas oscilaciones? Para obtener una idea, ¿cuál es la transformada discreta de Fourier de longitud- 2N de un pulso de longitud- N? El pulso emula la ventana rectangular, y ciertamente tiene bordes. Compara tu respuesta con la transformada de longitud- 2N de una ventana Hanning de longitud- N.
Solución
Las oscilaciones se deben a la transformada de Fourier de la ventana del vagón, que equivale a la función sinc.

Si examina las secciones de señal de ventana en secuencia para examinar el efecto de la ventana sobre la amplitud de la señal, vemos que hemos logrado modular en amplitud la señal con la ventana repetida periódicamente (Figura 5.10.3). Para aliviar este problema, los fotogramas se superponen (normalmente por la mitad de una duración de fotograma). Esta solución requiere más cálculos de transformada de Fourier que los necesarios mediante ventanas rectangulares, pero los espectros se comportan mucho mejor y los cambios espectrales se capturan mucho mejor.
La señal de voz, tal como se muestra en la Figura 5.10.1 anterior, se secciona en tramas superpuestas de igual longitud, con una ventana de Hanning aplicada a cada trama. Los espectros de cada uno de estos se calculan y se muestran en espectrogramas con frecuencia que se extiende verticalmente, ubicación temporal de ventana que se ejecuta horizontalmente y magnitud espectral codificada por colores. La Figura 5.10.4 ilustra estos cálculos.

¿Por qué los valores específicos de 256 para N y 512 para K? Otro problema es ¿cómo se computó la transformada longitud-512 de cada marco de ventana de longitud 256?
Solución
Estos números son potencias de dos, y el algoritmo FFT se puede explotar con estas longitudes. Para calcular una transformación más larga que la duración de la señal de entrada, simplemente hacemos una almohadilla cero de la señal.