EL AUDIO Y LOS BITS

  • Iniciador del tema Iniciador del tema matias_buenas
  • Fecha de inicio Fecha de inicio
Ahora este el el script python para el resampleo. Tampoco es un formulón de la leche:



#! /usr/bin/env python

import math
import os


#definicion la funcion sinc

def sinc(x):
try:
return math.sin(x) / x
except ZeroDivisionError: # sinc(0) = 1
return 1.0

# Parte de script que muestrea un tono de frecuencia elegida

# frecuencia angular de la onda a muestrear
w = math.pi*freq

# frecuencia de muestreo inicial (44.1 KHz)
sampl1 = 44100.

# frecuencia angular del filtro de Shannon
w1 = math.pi*sampl1

# numero de muestras a tomar
m1 = 100

# instante en que tomamos el primer muestreo.
ini_p = 0.06/freq

# frecuencia de remuestreo. Multiplo de la frecuencia de muestreo
sampl2 = sampl1 * 10

# numero de muestras en remuestreo. Son sampl2/sampl1 veces mas
m2 = m1 *int(sampl2 /sampl1)

# Ventana del filtro (terminos del sumatorio de "Shannon")
ventana1 = 10

# ventana en remuestreo
ventana2 = ventana1 *int(sampl2 /sampl1)

# lista donde anadir los puntos del remuestreo en pares (tiempo, amplitud)
remuestra = []

#Leo el fichero con la onda
f = open('onda.dat','r')

# muestra es la lista con las muestras leidas a pares tiempo, amplitud
muestra = []
for line in f.readlines():
muestra.append([float(line[:line.find(' ',2)]),float(line[line.find(' ',2)+1:])])


# En el fichero resample.dat tengo el resampleo de la onda
f2 = open('resample.dat','w')


# Insertar ceros para manejarme con la ventana
for i in range(0,ventana2):
tiempo = ini_p+(-ventana2*2+i)/sampl2
remuestra.append([tiempo,0.0])
f2.write(str(tiempo)+' '+ str(0.0)+'\n')


#Remuestreo con el teorema de Shannon
for j in range(ventana,len(muestra)-ventana1):
for k in range(0,int(sampl2/sampl1)):
tiempo = muestra[j][0]+k/sampl2
valor = 0
for h in range(int(j-ventana1),int(j+ventana1)):
valor = valor + muestra[h][1]*sinc(w1*(tiempo-muestra[h][0]))
remuestra.append([tiempo,valor])
f2.write(str(tiempo)+' '+ str(valor)+'\n')


f2.close()



LO copiais lo salvais como resampleo.py y al ejecutarlo os saca la onda resampleada a partir de onda.dat. A partir de una onda aserrada saco el tono a 22 KHz muestreado a 10 veces los 44.100 Hz y sale algo asi:



¿Es magia? ¿Es trampa? ¿No pasa por los puntos? ¿Hacen falta mil ingenieros para reconstruir correctamente un tono a 22 KHz a partir de un muestreo al doble de frecuencia?

La única distorsión que hay, que es dificil de ver es la del número de términos que tomo, en vez de infinitos o "muchos", solo tomo 10 a cada lado del punto a remuestrear.
 
El "ringing":




Claro que hay "ringing". En algún sitio arranca la onda desde cero. Ese punto se escapa al teorema de Nyquist. Pero vamos que nadie se va a morir escuchando esto. Y ningún disco arranca de 0 a 100 en 0 segundos. Problema resuelto.
 
LA TEORIA DE LOS "CUANTOS"

¡¡ Por fin !!

Es difícil de explicar con literatura así que vayamos con un ejemplo . Supongamos que el fenómeno que queremos muestrear (nuestra onda de sonido) es un ascensor bajando por un edificio de esos antiguos en los que la escalera va rodeando al ascensor . Lo relevante es saber en qué piso está el ascensor porque hemos deducido que con esa resolución es más que suficiente para lo que precisamos .

Bien, la bajada contínua por el ascensor es el fenómeno analógico . El "digital" sería un tío que corriera por las escaleras a la suficiente velocidad (al menos el doble) como para llegar antes que el asecensor a cada planta y así poder saber en qué planta está en cada momento, que es el objetivo a digitalizar.

El teorema de Nyquist viene a decir que si al menos el tío de las escaleras va al doble de la velocidad (frecuencia de muestreo) del ascensor, SIMEPRE podremos saber con precisión en qué planta está, o sea, muestrear correctamente la onda y eso es correcto y matemáticamente demostrable .

Ahora sigo .
 
Yota dijo:
¿Propondriais en este caso el estandar de los CDs libro rojo de un tamaño de palabra de 16 bits y una velocidad de muestreo de 44.1kHz"?

¿De qué departamento soy?

¿Marketing? 128 bits y 1 MHz

¿Ingeniería de producto? 16 bits y 44.1 KHz. Eso sí. Por favor ¿me lo puedes muestrear siguiendo una ley logarítmica en vez de PCM-lineal? Es por mejorar un poquito el ruido de fondo en señales a bajo nivel.
 
Yota dijo:
¿Propondriais en este caso el estandar de los CDs libro rojo de un tamaño de palabra de 16 bits y una velocidad de muestreo de 44.1kHz"?


¡¡¡Riiiing riiing riiing!!!!

Yota - Digame???

- Hola, que soy de ingeniería. Que me lo he pensado mejor. Que sean 24 bits y la ley de muestreo la que le guste al de marketing. ¿Te importa que comprima la información señal con un algoritmo sin-perdidas? Es para que quepa más.

Marketing: ¡Una mierda! Ya aceptamos los 60 minutos y más allá, cuando con 45 minutos la gente debería conformarse. ¿Que es esto de meter "Las Walkirias del Nibelungo" en un solo disquito de 1 euro?
 
LA TEORIA DE LOS "CUANTOS"

Muy interesantes tus análisis, wynton . Ahora que había cogido yo carrerilla con los "cuantos" esos, je, je ;) Ya veo cómo eco me va a dar un garrotazo por pararme un rato :P
Pero me tengo que parar a ver tus post , wynton . Así que luego sigo si puedo, eco :-[
 
wynton dijo:
¿Que es esto de meter "Las Walkirias del Nibelungo" en un solo disquito de 1 euro?

TIRORIRORIIIIII, TIRORIRORIIIIII....
- wynton, ¿quieres coger el teléfono de una vez?
- ¿Siiiii?
- Aquí matias_buenas . Y una higa que te den, que eso de la ópera del anillo del Nibelungo me ha costado un huevo :P

(Bueno, es que es la ópera completa dirigida por Levine muy recomendable, por cierto, 72 euros en ECI y 943 mínutos) . Lo contábamos aquí :

matias_buenas dijo:
Como dije, hace poquito adquirí esto
B00006L9ZT.01.LZZZZZZZ.jpg


que estaba en ECI a unos 72 euros me parece .

Son 7 DVDs (unos 941 minutos) y aún no he terminado de verla entera, pero me gusta y engancha . Es la primera vez que compro una ópera en DVD (dicho sea de paso) y si bien la calidad de imagen no es su fuerte (aunque se ve bien está muy comprimida en algunos tramos y es NTSC) he de reconocer que el sonido está muy bien . Viene en pcm 16/48, dolby digital y dts (5.1 los dos últimos ) con el sistema ANSI II.

Técnicamente, me parece que James Levine (el director) es muy bueno, no sabía yo que tanto.

A título de curiosidad, tengo en vinilo esto, dirigido por Solti del sello Decca de 1968 (creo) y que precisamente ayer lo oí . Cuando oí la voz de Fricka me dije, esta voz me suena, es la del DVD, estoy seguro, me levanté, miré el disco miré el DVD y ¡BINGO! Fíjate, es la misma Fricka del DVD, Christa Ludwig, pero unos 32 años después. No oigo tan mal después de todo ::).

Pues me parece muy recomendable este pack, de verdad . :-*

Saludos.


Perdón por el OFF TOPIC . Un saludo. ;)
 
¡¡¡Venga tios!!!

Osciloscopio no tendreís. Pero un PC con excel.

No digo ya gnuplot para sacar gráficas guapis. Pero el excel.....

¿Alguién se anima a ponerle errores de redondeo?
¿Y jitter?

¿Y a restar al resampling la función seno y pintar el error? Eso es la distorsión?

¿Efecto de disminuir la ventana?

¿Cambiar parámetros hasta que salgan aberraciones?

Por cierto, cuidado con los multiespacios del script. La marca de bloque (if, bucle,...) en python se hace por inserción de tabuladores. Y python tiene un editor que se llama idle y marca las palabras con "colorines".

El script con las dos partes al completo:


#! /usr/bin/env python

import math
import os


#definicion la funcion sinc

def sinc(x):
try:
return math.sin(x) / x
except ZeroDivisionError: # sinc(0) = 1
return 1.0


# Parte de script que muestrea un tono de frecuencia elegida

# Ancho de banda en Hz
bw=20000

# frecuencia de la onda a muestrear
freq = 1.1025*bw

# frecuencia angular de la onda a muestrear
w = math.pi*freq

# frecuencia de muestreo inicial (44.1 KHz)
sampl1 = 44100.

# frecuencia angular del filtro de Shannon
w1 = math.pi*sampl1

# numero de muestras a tomar
m1 = 100

# instante en que tomamos el primer muestreo.
ini_p = 0.06/freq

# frecuencia de remuestreo. Multiplo de la frecuencia de muestreo
sampl2 = sampl1 * 10

# numero de muestras en remuestreo. Son sampl2/sampl1 veces mas
m2 = m1 *int(sampl2 /sampl1)

# Ventana del filtro (terminos del sumatorio de "Shannon")
ventana1 = 10

# ventana en remuestreo
ventana2 = ventana1 *int(sampl2 /sampl1)

# lista donde anadir los puntos del muestreo en pares (tiempo, amplitud)
muestra = []

# lista donde anadir los puntos del remuestreo en pares (tiempo, amplitud)
remuestra = []

# fichero de salida con el muestreo de la onda de prueba sin error de cuantizacion
# se llama onda.dat
f = open('onda.dat','w')

# anadir ceros que desplazan el muestreo. Retardo para poder "meter el filtro".
for i in range(0,ventana1*2):
tiempo = ini_p+(-ventana1*2+i)/sampl1
muestra.append([tiempo,0.0])
f.write(str(tiempo)+' '+ str(0.0)+'\n')

# Muestreo de la onda
for i in range(0,m1):
tiempo = ini_p + i/sampl1
valor = math.sin(w*tiempo)
muestra.append([tiempo,valor])
f.write(str(tiempo)+' '+ str(valor)+'\n')

f.close()

#Aqui comienza la fase de remuestreo



f2 = open('resample.dat','w')

print ventana2/sampl2, ventana1/sampl1

for i in range(0,ventana2):
tiempo = ini_p+(-ventana2*2+i)/sampl2
remuestra.append([tiempo,0.0])
f2.write(str(tiempo)+' '+ str(0.0)+'\n')


#Remuestreo
for j in range(ventana1,len(muestra)-ventana1):
for k in range(0,int(sampl2/sampl1)):
tiempo = muestra[j][0]+k/sampl2
valor = 0
for h in range(int(j-ventana1),int(j+ventana1)):
valor = valor + muestra[h][1]*sinc(w1*(tiempo-muestra[h][0]))
valor_corr = math.sin(w*tiempo)
error = abs(valor-valor_corr)/abs(valor_corr)
print tiempo, valor, error
remuestra.append([tiempo,valor,valor_corr,error])
f2.write(str(tiempo)+' '+ str(valor)+' '+str(valor_corr)+'\n')


f2.close()




EDITO: ESTABAN MAL ALGUNAS VARIABLES DEL SCRIPT
OS PONGO EL CÁLCULO DEL ERROR.
 
El error sobre la onda bien hecha:



Es mímino donde la onda es máxima y máximo (37%) donde la onda es mínima.

Es decir, en cero.

Así es la vida.
 
Re: LA TEORIA DE LOS "CUANTOS"

matias_buenas dijo:
El teorema de Nyquist viene a decir que si al menos el tío de las escaleras va al doble de la velocidad (frecuencia de muestreo) del ascensor, SIMEPRE podremos saber con precisión en qué planta está, o sea, muestrear correctamente la onda y eso es correcto y matemáticamente demostrable .

Pero hay un momento en que el ascensor está entre el tercero y el cuarto . Es una especie de "drop out" digital . Si la escalera (que va dando vueltas al ascensor) permite ver en todo momento al ascensor siempre podemos saber en qué momento está . Pero si es un canal cerrado, sólo podremos saber si está en una planta y si somos lo suficientemente rápidos mirando por el cristal podemos ver si le queda mucho o poco por llegar a la planta en la que estamos.

Pero el hecho es que diremos que está en el cuarto o en el tercero . Es decir, en trozos o "cuantos" de su escala, no que está entre el tercero y el cuarto .

La velocidad instantánea es la derivada del espacio respecto del tiempo y eso nos permite calcular la velocidad EN un instante de tiempo determinado INSTANTÁNEO . Pero si lo que calculamos es la velocidad en un intervalo, decimos que la velocidad es media y es la relación entre el espacio y el tiempo. Joerl >:(, el teléfono otra vez.
 
Con m=1000 muestras y la ventana1=100.

Es decir pasamos de 20 términos a 200 en la interpolación ¿no tenemos prisa verdad, aguantaremos el retardo?



El error ya es aceptable, 7% en el paso por cero.

Y este error no es por el algoritmo de Shannon sino porque soy un cutre.

*******************************************************

No hace falta entender de pe-a-pa el algoritmo del remuestreo/filtro analógico de la señal.
No hace falta programarlo. Ya lo hará alguien.
Las gráficas están claras ¿no? Tampoco es una "hazaña bélica", esto "cabe" en dos posts del hilo. No es física de partículas.


Si el tio de Chesky no graba bien la batería (que por cierto, vaya mierda de bateria grabada en el último Telarc de McCoy Tyner, mucho DSD y mucho micro y es una full completa), pues que aprenda a poner los micros o a mezclar.

No es que yo sepa, pero el mundo está lleno de tíos y de tías que saben hacerlo.

¿Pasamos al dithering? ¿Al muestreo?
 
Veo que pareceis tenerlo todo muy claro, pero yo que llevo horas dale que te pego actualizando en instalando software en un ordenata nuevo me siento mas perdido que el hijo de Lindberg.
 
Pues ECO, siento desilusionarte, pero nos quedamos sin la teoría de los "cuantos digitales" . :-[

Vale, asumo que no soy un experto en matemáticas y que he olvidado lo poco que sabía y que quizá otro pueda hacer una formulación que eche atrás lo que ahora digo aunque me extraña . Y es que soy un poco cabezota y creo que el planteamiento de mi modelo matemático es más que correcto . Y las soluciones son taxativas : no existen los cuantos que yo presumía, es un invariante en ese aspecto la frecuencia de muestreo y no afecta . Una señal analógica, ceteris paribus, que proviene de una digital no tiene esos saltos o cuantos de señal que apuntaba yo que podría ocurrir . Se abrió una línea de investigación que terminó el Domingo con esa conclusión .

Una pena . Era una teoría prometedora pero no era correcta, ya está. Ojo que sin embargo, ha aparecido como un problema la fácil generación de frecuencias aliasing porque digamos que no existe el filtro perfecto, por decirlo de algún modo . Porque un corte a los burro, puede eliminar frecuencias aliasing, sí, pero también llevarse de paseo armónicos altos audibles (hecho que pasaba con los primeros Cds, de ahí su sonido metálico, chillón) . Y filtros suavecitos pueden hacer que no se cumpla el teorema de Nyquist en el sentido de que aparecen frecuencias aliasing, pero esa es otra historia .

Si Nyquist se cumple, se cumple. Punto. Y eso exige la limitación en el ancho de banda.

¿Ha valido la pena entonces comerme la cabeza? Pues para mi al menos sí . No sólo aprendes cosas, sino que es un buen ejercicio mental .

Saludos.
 
El ignorante ataca de nuevo.
¿Qué es el Aliasing?
Por cierto, Yota ha indicado un enlace interesante en otro hilo sobre el que ya preguntaré...
Saludos,
Eco
 
Uno de lo requisitos del teorema de Nyquist es que necesitamos como frecuencia de muestreo, al menos el doble de la máxima frecuencia del fenómenos que queremos digitalizar . Y hablábamos que en el CD con 44.100 Hz podríamos registrar sin problemas hasta 20.000 Hz.

El problema del aliasing es cuando en la señal que queremos digitalizar se nos cuela una señal que no cumpal ese teorema . Un simple armónico por encima nos la lía . Entonces, el problema es que el teorema de Nyquist no se cunple (la señal no está limitada en frecuencia) y no podemos reconstruir la onda original .

Para eso, lo que se hace es filtrar la señal a 20 Khz como mucho con un filtro paso bajo . Pero los filtros no tienen una pendiente de caída vertical o, en caso de casi o tenerla, un corte tan brusco puede afectar a la musicalidad de la señal . A 44,1 Khz tenemos un margen pequeño de actuación (de 20 a 22.050 Hz) . Y esa es una de las ventajas de digitalizar a 96 khz por ejemplo .

Da igual que no oigas a 45 Khz . Te quedan otros 51 Khz para hacer un filtro con la pendiente más suave o musical que quieras.

Un ejemplo de aliasing que todos conocemos y que entenderás fácilmente en el vídeo es cuando los radios de las ruedas de un coche o moto que parecen girar muy despacio o incluso en sentido contrario. El caso del cine muestrea la realidad a una frecuencia de 24 fotogramas por segundo. Siguiendo el criterio de muestras, no se pueden recuperar movimientos de frecuencia superior a 12 Hz (la mitad, criterio Nyquist), produciéndose un aliasing temporal (frecuencias fantasma) cuando esto no se cumple y no podemos recuperar la onda original (en este caso el movimiento de la rueda).

El efecto en la TV se aprecia también en el llamado efecto Moiré o en los famosos "dientes de sierra" .

El efecto de aliasing genera básicamente dos señales de frecuencia fantasma : una de frecuencia igual a la frecuencia de muestreo menos la frecuencia de la señal muestreada, y
otra de frecuencia igual a la frecuencia de muestreo mas la frecuencia de la señal muestreada.
 
Gracias, HOOKEVE, y sí, puede que tengas razón .

Pero como la portada es en espacio limitada y ya tenemos uno sobre los bits chincheteado aunque más genérico y que es ÉSTE , pues he editado el primer post y he añadido un link a éste, para que no se pierda, algo así como los hilos de Loewe en la sección de Cine en Casa, de foma que está interconectado .

Un saludo .
 
Deberiais dejar este FORO...estais colapsando la centralita de "proteccion del ciudadano" ;D ;D ;D

Y eso que estamos en Agosto!!!

Felicidades!!! aunque estoy perdido hace unos cuantos "post", un poco complejo para los no iniciados en la terminologia y las teorias que manejais.

Un abrazo!!!
 
Atrás
Arriba