Глава 6. Работа с данными
269
• Учтите, что максимальная измеримая частота равна половине частоты дис
кретизации, то есть примерно 22 кГц.
z
z
columnTruncateLength:
232
• Определяет долю сохраняемой частотной информации. По умолчанию каж
дый аудиокадр содержит
fftSize
точек данных, в нашем случае 1024, охваты
вая таким образом весь спектр частот, от 0 до максимума (22 кГц). Впрочем,
чаще всего наибольший интерес представляют низкие частоты. Частоты че
ловеческой речи обычно не превышают 5 кГц, поэтому мы сохраняем только
часть данных, соответствующую частотам от 0 до 5 кГц.
• В данном случае 232 = (5 кГц / 22 кГц)
×
1024.
z
z
numFramesPerSpectrogram:
43
• По ряду непересекающихся окон (кадров) вычисляется FFT аудиосэмпла
для создания спектрограммы. Данный параметр определяет, сколько именно
таких окон учитывается в каждой из возвращаемых спектрограмм. Форма
возвращаемой спектрограммы:
[numFramesPerSpectrogram,
fftSize,
1]
, то
есть
[43,
232,
1]
в нашем случае.
• Длительность кадра равна
sampleRate/fftSize
. В нашем случае 44 кГц
×
1024
составляет примерно 0,023 секунды.
• Промежутков между кадрами нет, так что длительность спектрограммы
в целом составит 43
×
0,023 = 0,98, то есть примерно одну секунду.
z
z
smoothingTimeConstant:
0
• Указывает, насколько нужно смешивать данные предыдущего кадра с теку
щим. Значение должно быть от 0 до 1.
z
z
includeSpectogram:
true
• Если равно
true
, вычисляется и выдается в виде тензора спектрограмма. Если
приложению не нужно вычислять спектрограмму (фактически только в слу
чае, когда требуется волновое представление), установите эту опцию в
false
.
z
z
includeWaveform:
true
• Если равно
true
, сохраняется и выдается в виде тензора волновое представ
ление сигнала. Можно задать и значение
false
, если это представление вы
зывающей стороне не требуется. Учтите, что одна из опций
includeSpectogram
и
includeWaveform
должна быть равна
true
и если они обе равны
false
, будет
возвращена ошибка. В данном случае мы задали их обе равными
true
, чтобы
продемонстрировать возможность подобного варианта, но в большинстве
приложений достаточно только одной.
Подобно потоку видеоданных, поток аудиоданных иногда начинается не сразу,
и начальные данные с устройства будут бессмысленными. Среди них часто встречают
ся нули и бесконечности, хотя конкретные значения и длительность «прогрева» зави
сят от платформы. Оптимальное решение — «прогреть» микрофон в течение короткого
промежутка времени, отбросив несколько первых сэмплов, пока не начнут поступать
корректные данные. Обычно 200 миллисекунд данных для этого вполне достаточно.
270
Do'stlaringiz bilan baham: |