Генерация ряда слегка случайных целых чисел в массиве NumPy - PullRequest
0 голосов
/ 15 октября 2019

Я хочу создать композитные тестовые аудиосигналы в массиве. Мне нужно, чтобы значения были целыми числами, округленными до ближайшего целого числа. Во-вторых, я хочу добавить случайный шум или дизеринг.

Вы можете увидеть ниже код, который я использую в настоящее время. Он должен содержать 24-битные целые числа (если я правильно понял), даже если он хранится в 32-битных целочисленных словах (чтобы соответствовать аудиосэмплам pcm, которые обычно хранятся таким образом).

В этом примере первый тон синусоидальной волны будет 1000,2 Гц при половинном пиковом значении (-6dBfs). Здесь есть еще два синусоидальных компонента, хотя на практике они могут содержать любое их число. Теперь я хочу добавить немного дизеринга. Это будет рассчитано как случайное значение для каждой ординаты в массиве. Это добавило бы небольшое случайно сгенерированное значение, например, между + и - 0.5 пика к каждому элементу массива (каждому аудиосэмплу).

x = np.linspace(0, 48000, 48000, False, dtype = "int32")

pcm_array:np.dtype(np.int32) = 
    (1073741824 * np.sin(((x + 0) * 1000.2 / 48000) * 2 * np.pi)) + 
    (10737418.24 * np.sin(((x + 0) * 1049.7 / 48000) * 2 * np.pi)) + 
    (1.073741824 * np.sin(((x + 0) * 1200.5 / 48000) * 2 * np.pi))

Мой код, кажется, работает нормально, но не включает случайный компонент 'дизеринг'. Может кто-нибудь дать мне знать, как это сделать, а также заверить меня, что я получу целые числа с 24-битным разрешением.

...