Які алгоритми генерування хорошого псевдовипадкового наближення до (рожевого) шуму, але придатні для впровадження з низькою обчислювальною вартістю на цілому DSP?
Які алгоритми генерування хорошого псевдовипадкового наближення до (рожевого) шуму, але придатні для впровадження з низькою обчислювальною вартістю на цілому DSP?
Відповіді:
Лінійна фільтрація
Перший підхід у відповіді Петра (тобто фільтрація білого шуму) - це дуже простий підхід. У Спектральній обробці аудіосигналів JOS дає фільтр низького порядку, який можна використовувати для отримання гідного наближення , а також аналіз того, наскільки отримана спектральна щільність потужності відповідає ідеальній. Лінійна фільтрація завжди дасть наближення, але це може не мати значення на практиці. Перефразовуючи JOS:
Немає точного (раціонального, кінцевого порядку) фільтра, який може видавати рожевий шум від білого шуму. Це тому, що ідеальна амплітудна відповідь фільтра повинна бути пропорційною ірраціональній функції , деfпозначає частоту в Гц. Однак генерувати рожевий шум до будь-якої бажаної міри наближення досить просто, включаючи перцептивно точну.
Коефіцієнти фільтра, які він дає, такі:
B = [0.049922035, -0.095993537, 0.050612699, -0.004408786];
A = [1, -2.494956002, 2.017265875, -0.522189400];
Вони відформатовані як параметри функції фільтра MATLAB , тому для наочності вони відповідають такій функції передачі:
Очевидно, що краще використовувати повну точність коефіцієнтів на практиці. Ось посилання на те, як звучить рожевий шум, отриманий за допомогою цього фільтра:
Для реалізації з фіксованою точкою, оскільки зазвичай зручніше працювати з коефіцієнтами в діапазоні [-1,1), деяка переробка функції передачі буде в порядку. Як правило, рекомендація полягає в розбитті речей на розділи другого порядку , але частина причини (на відміну від використання розділів першого порядку) полягає у зручності роботи з реальними коефіцієнтами, коли корені складні. У цьому конкретному фільтрі всі корені справжні, і, поєднуючись потім у розділи другого порядку, ймовірно, все-таки вийде деякий коефіцієнт знаменника> 1, тому три розділи першого порядку є розумним вибором:
де
Для запобігання переповнення знадобиться певний вибір послідовності цих секцій у поєднанні з вибором коефіцієнтів посилення для кожного розділу. Я не пробував жодного з інших фільтрів, наведених у посиланні у відповіді Петра , але подібні міркування, ймовірно, стосуватимуться.
Білий шум
Очевидно, що підхід фільтрації вимагає в першу чергу джерела однакових випадкових чисел. Якщо рутина бібліотеки недоступна для даної платформи, одним із найпростіших підходів є використання лінійного конгрурентного генератора . Один приклад ефективної реалізації фіксованої точки наводиться TI у генерації випадкових чисел на TMS320C5x (pdf) . Детальне теоретичне обговорення різних інших методів можна знайти у методах генерації випадкових чисел та методах Монте-Карло Джеймса Джєнта.
Ресурси
Кілька джерел на основі наступних посилань у відповіді Петра варто виділити.
Перший фрагмент посилань на коді на основі фільтрів Введення в обробку сигналів Orfanidis. Повний текст доступний за цим посиланням, і [у додатку B] він охоплює як рожевий, так і білий шум. Як зазначається в коментарі, Orfanidis здебільшого охоплює алгоритм Voss.
Спектр, що виробляється генератором шуму Voss-McCartney Pink . Внизу сторінки внизу сторінки, після широкого обговорення варіантів алгоритму Voss, на це посилання посилається гігантськими рожевими літерами . Це набагато простіше, ніж деякі попередні діаграми ASCII.
Бібліографія на 1 / ф шум Вентіана Лі. На це посилаються і в джерелі Петра, і в JOS. Він має запаморочливу кількість посилань на 1 / f шум взагалі, починаючи з 1918 року.
Я використовую алгоритм Корсіні і Салетті з 1990 року: Г. Корсіні, Р. Салетті, "Генератор послідовностей шумового спектра A 1 / f ^ гамма-потужності", транзакції IEEE з приладів та вимірювань, 37 (4), грудень, 1988, 615 -619. Коефіцієнт гамми становить від -2 до +2. Це добре працює для моїх цілей. Ред
Якщо ця спроба додати скріншот працює, на малюнку нижче показаний приклад того, як добре працює алгоритм Корсіні і Салетті (принаймні, як я це запрограмував ще в 1990 році). Частота дискретизації становила 1 кГц, гамма = 1, і середнє значення 1000 КД FFT PSD.
Це випливає з мого попереднього повідомлення про генератор шуму Корсіні і Салетті (C&S). Наступні дві фігури показують, наскільки добре працює генератор C&S щодо генерації шумів низької частоти (гамма> 0) та високочастотних (гамма <0). На третьому малюнку порівнюються ПЗД 1 / f генератора генератора C&S (такий же, як і в моїй першій посаді) та приклад B.9 1 / f генератора, наведений у чудовій книзі професора Орфанідіса (рівняння B.29, стор. 736). Усі ці PSD - це в середньому 1000 FD-дисків 32K FFT. Всі вони є односторонніми і середньо-відніманими. Для ПЗД C&S я використовував 3 полюси / десятиліття і вказав 4 десятиліття (0,05 до 500 Гц) як бажаний діапазон корисного використання. Тож генератор C&S мав n = 12 полюсних і нульових пар. Частота дискретизації становила 1 кГц, Nyquist - 500 Гц, а роздільна здатність - трохи більше 0,0305 Гц. Ред V