¿Cuál es el tipo de datos de optimización de memoria más apropiado en Matlab para importar un archivo de audio que tiene un valor máximo de 0.495971679687500 y el valor mínimo es -0.488983154296875?

Los números 0.495971679687500 y -0.488983154296875 significan que está leyendo su archivo wave con el tipo double predeterminado. Estos no son valores reales sino las representaciones de coma flotante escaladas del tipo int16 (esa es la representación nativa de los datos en el archivo de onda). double ocupa cuatro veces más espacio que int16 .

Según su información, el archivo de onda tiene datos de 16 bits. Cuando lees el archivo de onda, Matlab primero lo convierte en double , luego lo normaliza entre -2 ^ 15 y 2 ^ 15-1, luego se vuelve a normalizar entre -1 y 1 para devolverte el resultado. Por ejemplo, si X_int16 es su valor int16 original, entonces matlab reescala esto de acuerdo con:
X_double=(1 - (-1))*(double(X_int16) -(-2^15))/(2^15 -1 -(-2^15) +1) +(-1);

La forma más fácil de ahorrar memoria es mediante el uso de wavread(data,'native') , que devuelve datos int16 y ocupa 1/4 del espacio utilizado anteriormente. Este es el tipo de datos más eficiente que podría usar sin perder la fidelidad en su conjunto de datos.

Sin embargo, hay un problema con este enfoque. Matlab no permite el uso de ningún tipo que no sea double o single en estadísticas o algoritmos de señales (por ejemplo, FFT). Por lo tanto, debe usar al menos valores de punto flotante de precisión simple para analizar sus datos de audio. Convertir la precisión doble en precisión simple es sencillo, X_single=single(X_double) , toma la mitad de la memoria utilizada por el tipo doble.

Si tiene acceso a la caja de herramientas de punto fijo, puede ‘posiblemente’ diseñar algoritmos específicos que funcionen con enteros para las funciones estadísticas / DSP. Pero eso es mucho trabajo. Usaría las ideas de segmentación discutidas a continuación para manejar la sobrecarga de memoria.

Editar resumen: inicialmente consideré los valores double leídos por Matlab como los valores canónicos o ‘medidos’. Después de un poco de consideración, estaba claro que ese no era el caso, y matlab estaba reescalando los valores nativos. Aún le quedan unos 75 Mb por conjunto de datos, incluso si usa int16 . Por lo tanto, las observaciones anteriores sobre el análisis de los errores de cuantización siguen siendo válidas si desea comprimir el conjunto de datos a int8. Hay otras cuantificaciones óptimas o con pérdidas posibles (cuantización no uniforme), pero son un poco más sofisticadas.


Sus datos son principalmente ruido con vocalizaciones intermitentes. Por lo tanto, debería poder encontrar una manera de segmentar los datos (usando la detección de inicio / salida) a secuencias que solo contienen vocalizaciones y descartar los segmentos de ruido puro. Eso reducirá el tamaño bruto de los datos y le dará los conjuntos exactos que necesita para los algoritmos de clasificación. La segmentación del conjunto de datos no afecta a la STFT utilizada para obtener los espectrogramas (siempre que la frecuencia de muestreo sea coherente).

Estos conceptos están cubiertos en DSP básico (los textos de Oppenheim, etc / recursos en línea también son útiles). La única diferencia es que su aplicación requiere grandes conjuntos de datos.

También puede jugar con la memoria de almacenamiento dinámico Java utilizada por Matlab en la configuración.

Matlab tiene soporte nativo para grandes conjuntos de datos en 2014b Archivos grandes y Big Data

More Interesting

¿Existe un equivalente al tono perfecto en matemáticas / programación de computadoras? ¿Un atributo que se considera que no se puede aprender pero que es invaluable si lo posee?

No estoy interesado en los cursos de cálculo y matemáticas, ¿CS CS es la opción correcta?

¿Hay alguna prueba matemática de que los lenguajes de computadora modernos pueden representar cualquier algoritmo finito usando una cantidad finita de código?

¿Se puede aplicar la proporción áurea (Fibonacci) con beneficios en informática?

¿Cuáles son las mejores universidades / facultad para un doctorado en informática teórica?

Cómo aumentar la velocidad de cálculo de la función trigonométrica en una computadora

¿Cuál es la relación entre un código Huffman y la serie Fibonacci?

¿Se puede descifrar algún código?

¿Cómo se ve la integridad de NP?

¿Cuál es el tipo de datos de optimización de memoria más apropiado en Matlab para importar un archivo de audio que tiene un valor máximo de 0.495971679687500 y el valor mínimo es -0.488983154296875?

¿Podría alguien ayudarme a determinar qué camino en mi educación se adaptaría mejor a mis intereses?

¿Qué asignatura de matemática es más relevante para la ingeniería de software, la combinatoria o la teoría de números?

¿Cómo escribirías un programa que pueda calcular los dígitos de phi (proporción áurea)?

¿Qué es la criptografía de clave pública en términos simples? ¿Cómo se relaciona con los números primos?

¿Cómo pruebo o refuto lo siguiente: f (n) = o (g (x)) implica f (n) = O (g (n))?