В чем разница между double и int16 при использовании аудиоплеера в matlab
У меня вектор хранит аудиоданные, с частотой 48к. Данные состоят из целых чисел, максимальное значение составляет около 4k. Тип вектора <1x768000 double>. Когда я собираю свой плеер с этим типом вектора, как показано ниже:
a1 = audioplayer(A,48000);
a1.play();
результирующий звук очень шумный, например, значение SNR меньше 1(что означает, что уровень шума выше, чем то, что я хочу услышать).
Однако, когда я приведу данные к int16 и воспроизведу звук, как показано ниже:
a2 = audioplayer(int16(A),48000);
a2.play();
Результирующий звук очень плавный, а SNR примерно 7-8 или что-то в этом роде (не измерено и не рассчитано, шум едва различим, но есть уверенность.)
Итак, вот еще раз мой вопрос: в чем разница между double и int16 при использовании аудиоплеера в matlab?
PS: я могу предоставить, если вы хотите.
PS2: A, как обычно, содержит речь и немного шума (не особого типа, вероятно, из-за плохого микрофона и т. Д.).
1 ответ
Нашел ответ по API. Согласно API для аудиоплеера принимает значения от -1 до 1, когда ввод имеет двойной тип. Когда я впервые использую его в двойном типе, он не масштабирует значения между -1 и 1, просто пытается воспроизвести их. Вместо того, чтобы использовать исходные значения A, масштабирование перед игрой решает проблему.
a3 = audioplayer(A*/max(abs(A)),48000);
a3.play();
масштабирует вектор правильно. это так же хорошо, как
a2 = audioplayer(int16(A),48000);
a2.play();