Hola Hernán,
Por aca todo bien. Algún dia tendríamos que encontrarnos, no?
Hernán Ordiales escribió:
>
> On 11/7/06, Juan Vuletich <jvuletich@...> wrote:
> > Hola Hernán,
> > Qué tal, tanto tiempo?
>
> bien che! vos?
>
> > Muy interesante lo que nos contás.
>
> me alegro! :D
>
> >La verdad, nunca me habia dado cuenta
> > que si padeas con ceros las señales para hacerlas más largas que la
suma
> > de las longitudes originales, la convolución circular se convierte
en no
> > circular, y la FFT sirve para calcularla. Buen truco. De cualquier
> > manera, hay algunas cosas a tener en cuenta al hacer como nos contás:
>
> bueno, solo apliqué al audio lo que lei en algún libro por ahi :D
Leer libros también vale!
> > - Es común calcular la FFT de las señales de a pedazos, con ventanas
> > deslizantes. En este caso, no se puede hacer esto. (ya sé que lo sabés,
> > pero igual lo aclaro.)
>
> sep, pero ver [1]
>
> > - La técnica no te sirve si querés procesamiento online (o sea
empezar a
> > generar la salida sin tener la entrada completa). Para hacer
> > procesamiento online se puede usar el pasado de las señales, pero no el
> > futuro. En particular, el procesamiento en tiempo real siempre es
> > online. Y es cuando la performance más nos interesa.
>
> sep, pero ver [1]
>
> > - Si la respuesta al impulso tiene pocos coeficientes distintos de cero
> > (p.ej. menos de 20 o 25), y la señal es larga (p.ej. más 4 o 5
minutos),
> > puede ser más rápido una convolución optimizada.
>
> si
>
> > Estás de acuerdo?
>
> en parte :D
>
> [1] Como el sistema es causal, calculo que se puede usar el método
> "overlap-add method" para calcular la FFT y creo que con eso se podría
> hacer algo simil real-time. O sea, dividir la señal en pedazos, a
> medida que "va llegando" por ejemplo en muestras de tamaño similar a
> la RI, procesarlas y luego sumar las salidas (el sistema esta
> "modelado" como lineal y por lo tanto se puede hacer esto)
>
Si. No se me había ocurrido, pero creo que tiene que andar bien. De
cualquier manera, aunque el sistema no necesita "conocer el futuro", tu
técnica sí. La única manera de hacerlo online (o tiempo real) es
introductir un retardo de tamaño igual a la longitud de la FFT.
Me acabo de dar cuenta que como la FFT tiene que tener una longitud al
menos igual a la suma de la longitud de la respuesta al impulso más la
longitud de los pedazos de señal que tomás, la maera de reducir el
retardo es reducir el tamaño de esos pedazos. Esto aumenta el costo de
cálculo. Llevado al extremo, es tomar pedazos de señal de longitud 1, y
obtener retardo cero. Y entonces lo que estás haciendo al sumar los
pedazos es de nuevo la convolución en el dominio temporal!
O sea, el "overlap-add" de segmentos procesados en el dominio de Fourier
es un híbrido entre el dominio de Fourier "puro" y la convolución
temporal. Cuán cerca estas de uno u otro extremo lo decidís con el
tamaño de segmentos de señal a procesar.
Interesante, no?
> me diste una muy buena idea, gracias!
> voy a ver si implemento algo de esto cuando me haga un poco de tiempo
> y lo pongo en el blog y/o aca :D
>
> Saludos!
> --
> Hernán
> http://h.ordia.com.ar
> GnuPG: 0xEE8A3FE9
Bueno, la idea fue tuya!
Saludos,
Juan
Pd. Alguna vez intenté convencerte de programar en Smalltalk? Tiene
todas las ventajas de Matlab, todas las de C, y algunas extras (bueno
para interfaces al usuario, por ejemplo). Podés ver algunas cosas que
hice en Smalltalk en www.jvuletich.org .