В начале поста хочу рассказать о некоторой неточности, совершенной мной в предыдущем посте. А именно, "треугольно" распределенный шум берут в диапазоне $[-2\Delta, 2\Delta]$ (при этом мощность его будет $W = 2\Delta^{2}/3$). Придумали его не для того, чтобы звучать тише, а чтобы сделать первый и второй условные моменты функции ошибки $E[\epsilon^{m}|x] = \int_{-\infty}^{\infty} \epsilon^{m}p_{\epsilon|x}(\epsilon, x) d\epsilon$ независимыми от $x$. Привожу цитату из статьи Quantization and Dither: A Theoretical Survey авторов Stanley P.Lipshitz, Robert A. Wannamaker и John Vanderkooy:
Вот так звучит этот шум (исходный сигнал тот же, что и в прошлом посте):
Sine wave (triangular high-pass dither) 440 Hz (44100 Hz, 7 bit)
Именно такой шум используется в Audacity в виде треугольного. В следующем посте я расскажу ещё про одну технику понижения слышимости шума — noise shaping.
Now consider a triangular-pdf dither of 2-LSB peak-to-peak amplitude resulting from the sum of two independent rectangular-pdf noises $v_{1}$ and $v_{2}$, each of 1-LSB peak-to-peak amplitude (...)
(...) so this dither renders both the first and second moments of the total error independent of $x$. The second moment of the total error is a constant $\Delta^{2}/4$ for all inputs, (...)
Ну что же, ошибки случаются ;-) Стоит заметить, что при применении такого шума тишина уже не будет звучать как тишина. Даю послушать:
Sine wave (triangular dither) 440 Hz (44100 Hz, 7 bit)
Sine wave (triangular dither) 440 Hz (44100 Hz, 7 bit)
Теперь я расскажу о шумах, которые используются для dithering и не являются белыми (то есть их мощность распределена по используемым частотам неравномерно). Для этого ещё раз вернемся к фильтрам. Здесь я буду использовать такие фильтры, что результирующий сигнал будет иметь вид:
$f'_{n} = \sum_{i = 0}^{N-1} \phi_{i} f_{n-i}$
То есть фильтр для получения семпла в данный момент времени будет использовать этот семпл и $N-1$ прошлых семплов.
Используя уже известный нам инструмент (Фурье-преобразование), найдем АЧХ фильтра ($\omega_{ref}$ — частота дискретизации):
$\left|\Phi(\omega)\right|^{2} = \sum_{k=0}^{N-1} \phi_{k}^{2} + 2 \sum_{k=1}^{N-1} (\sum_{l=0}^{N - k - 1} \phi_{l}\phi_{l+k}) cos (\frac{2\pi}{\omega_{ref}}k\omega)$
при прохождении через данный фильтр мощность сигнала изменится в $A$ раз, где
$A = \frac{\int_{-\omega_{ref}/2}^{\omega_{ref}/2} \left|\Phi(\omega)\right|^{2} d\omega}{\omega_{ref}} = \sum_{k=0}^{N-1} \phi_{k}^{2}$
Возьмем фильтр, преобразующий сигнал по формуле $f'_{n} = f_{n-1} - f_{n}$ Его АЧХ равно (используя формулу выше):
$\left|\Phi(\omega)\right| = \sqrt {2 (1 + cos (\frac{2\pi}{\omega_{ref}}\omega))}$
Получается, что это такой вот high-pass фильтр
АЧХ high-pass фильтра. По горизонтали — частоты в долях $\omega_{ref}$ |
Теперь пропустим через него равномерно распределенный шум в диапазоне $[-\Delta, \Delta]$. Получится шум в диапазоне $[-2\Delta, 2\Delta]$ с мощностью $W = 2 \Delta^{2}/3$. По сути это тот же треугольно распределенный шум (так как две участвующих в фильтре случайные величины так и останутся независимыми), но со спектром как на картинке выше! Этот шум сконцентрирован больше в верхних частотах, которые человек слышит хуже.
На компьютере генератор такого шума можно реализовать как замыкание:
(defun get-filtered-triangle ()
(let ((oldval 0))
(lambda (magnitude)
(let ((noise (uniform-noise magnitude)))
(prog1 (- oldval noise)
(setq oldval noise))))))
Вот так звучит этот шум (исходный сигнал тот же, что и в прошлом посте):
Sine wave (triangular high-pass dither) 440 Hz (44100 Hz, 7 bit)
Именно такой шум используется в Audacity в виде треугольного. В следующем посте я расскажу ещё про одну технику понижения слышимости шума — noise shaping.
Comments
Post a Comment