Рожевий (


20

Які алгоритми генерування хорошого псевдовипадкового наближення до 1/f (рожевого) шуму, але придатні для впровадження з низькою обчислювальною вартістю на цілому DSP?


Як щодо пам’яті? Якщо це не викликає занепокоєння, але для обчислень, я б сказав, зробіть iDFT з випадковою фазою потрібної кривої частоти і збережіть її як статичну хвилю змін const у вашому пристрої.
Лише приблизно

@leftaroundabout - Чи помножуватимете DFT випадкового білого шуму на криву частоти 1 / f, тоді, якщо IDFT матиме кращі характеристики випадковості?
hotpaw2

1
Білий шум є по суті випадковим фазовим iFT постійної функції, тому він не повинен мати великої різниці.
Ліворуч близько

Відповіді:


11

6
Якщо цей сайт знизиться, ваша відповідь зникає, якби ви переносили основи кожного рішення, відповідь буде значно покращена, використовуючи сайт як орієнтир.
Кортук

@Kortuk: Відповідь - вікі спільноти, тому сміливо робіть це самі! Інформації, якої там, має бути достатньо для вказівки на інші веб-посилання (наприклад , відповідь datageist для першого варіанту). Я погоджуюся, що більше деталей було б добре.
Пітер К.

20

Лінійна фільтрація

Перший підхід у відповіді Петра (тобто фільтрація білого шуму) - це дуже простий підхід. У Спектральній обробці аудіосигналів JOS дає фільтр низького порядку, який можна використовувати для отримання гідного наближення , а також аналіз того, наскільки отримана спектральна щільність потужності відповідає ідеальній. Лінійна фільтрація завжди дасть наближення, але це може не мати значення на практиці. Перефразовуючи JOS:

Немає точного (раціонального, кінцевого порядку) фільтра, який може видавати рожевий шум від білого шуму. Це тому, що ідеальна амплітудна відповідь фільтра повинна бути пропорційною ірраціональній функції , деfпозначає частоту в Гц. Однак генерувати рожевий шум до будь-якої бажаної міри наближення досить просто, включаючи перцептивно точну.1/ff

Коефіцієнти фільтра, які він дає, такі:

B = [0.049922035, -0.095993537, 0.050612699, -0.004408786];
A = [1, -2.494956002, 2.017265875, -0.522189400];

Вони відформатовані як параметри функції фільтра MATLAB , тому для наочності вони відповідають такій функції передачі:

Н(z)=.041-.096z-1+.051z-2-.004z-31-2.495z-1+2.017z-2-.522z-3

Очевидно, що краще використовувати повну точність коефіцієнтів на практиці. Ось посилання на те, як звучить рожевий шум, отриманий за допомогою цього фільтра:

Для реалізації з фіксованою точкою, оскільки зазвичай зручніше працювати з коефіцієнтами в діапазоні [-1,1), деяка переробка функції передачі буде в порядку. Як правило, рекомендація полягає в розбитті речей на розділи другого порядку , але частина причини (на відміну від використання розділів першого порядку) полягає у зручності роботи з реальними коефіцієнтами, коли корені складні. У цьому конкретному фільтрі всі корені справжні, і, поєднуючись потім у розділи другого порядку, ймовірно, все-таки вийде деякий коефіцієнт знаменника> 1, тому три розділи першого порядку є розумним вибором:

Н(z)=1-б1z-11-а1z-1 1-б2z-11-а2z-1 1-б3z-11-а3z-1

де

б1=0,98223157, б2=0,83265661, б3=0.10798089
а1=0,99516897, а2=0,94384177, а3=0,55594526

Для запобігання переповнення знадобиться певний вибір послідовності цих секцій у поєднанні з вибором коефіцієнтів посилення для кожного розділу. Я не пробував жодного з інших фільтрів, наведених у посиланні у відповіді Петра , але подібні міркування, ймовірно, стосуватимуться.

Білий шум

Очевидно, що підхід фільтрації вимагає в першу чергу джерела однакових випадкових чисел. Якщо рутина бібліотеки недоступна для даної платформи, одним із найпростіших підходів є використання лінійного конгрурентного генератора . Один приклад ефективної реалізації фіксованої точки наводиться TI у генерації випадкових чисел на TMS320C5x (pdf) . Детальне теоретичне обговорення різних інших методів можна знайти у методах генерації випадкових чисел та методах Монте-Карло Джеймса Джєнта.

Ресурси

Кілька джерел на основі наступних посилань у відповіді Петра варто виділити.

  • Перший фрагмент посилань на коді на основі фільтрів Введення в обробку сигналів Orfanidis. Повний текст доступний за цим посиланням, і [у додатку B] він охоплює як рожевий, так і білий шум. Як зазначається в коментарі, Orfanidis здебільшого охоплює алгоритм Voss.

  • Спектр, що виробляється генератором шуму Voss-McCartney Pink . Внизу сторінки внизу сторінки, після широкого обговорення варіантів алгоритму Voss, на це посилання посилається гігантськими рожевими літерами . Це набагато простіше, ніж деякі попередні діаграми ASCII.

  • Бібліографія на 1 / ф шум Вентіана Лі. На це посилаються і в джерелі Петра, і в JOS. Він має запаморочливу кількість посилань на 1 / f шум взагалі, починаючи з 1918 року.


Будь-яка ідея, як він придумав ці коефіцієнти фільтра? Я думаю, що це просто нелінійне пристосування до потрібного схилу, але мені було б дуже цікаво знати, чи є більш конкретний алгоритм.
nibot

Моя найкраща здогадка була б однією з методик наближення, згаданих у його дипломній роботі . Це в будь-якому випадку чудово читати.
datageist

Нічого собі, це цілком документ! Дякуємо за посилання
nibot

1
Проблема з методом білого шуму фільтра полягає в тому, що ви не отримуєте таких же фазових співвідношень за величиною, як у випадку з автокорельованим часовим рядом. Таким чином, якщо ви намагаєтеся імітувати природні процеси, ви не повинні створювати білий шум і фільтрувати його. Фактично ви повинні створювати автокорельований шум як часовий ряд, тобто значення струму залежить від попереднього значення + шуму. Дивіться в статистиці "AR" процеси. Ви можете перевірити це, генеруючи шум, використовуючи обидва способи, потім FFT і побудуйте реальне проти уявного (складна площина частотної області). Ви помітите велику різницю в шаблоні
Пол S,

Привіт Пол, ласкаво просимо до DSP.SE. Якщо ви просто переймаєтесь тим, як звучить шум (наприклад, в аудіороботі), то головний інтерес - це спектр магнітуди. Було б чудово, якби ви могли детально розказати свої думки у новій відповіді. Я не думаю, що у нас на сайті ще є що описує цю техніку.
datageist

1

Я використовую алгоритм Корсіні і Салетті з 1990 року: Г. Корсіні, Р. Салетті, "Генератор послідовностей шумового спектра A 1 / f ^ гамма-потужності", транзакції IEEE з приладів та вимірювань, 37 (4), грудень, 1988, 615 -619. Коефіцієнт гамми становить від -2 до +2. Це добре працює для моїх цілей. Ред

Якщо ця спроба додати скріншот працює, на малюнку нижче показаний приклад того, як добре працює алгоритм Корсіні і Салетті (принаймні, як я це запрограмував ще в 1990 році). Частота дискретизації становила 1 кГц, гамма = 1, і середнє значення 1000 КД FFT PSD.

PSD для 1 / f шуму за допомогою алгоритму Корсіні та Салетті


Це випливає з мого попереднього повідомлення про генератор шуму Корсіні і Салетті (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 PSD низької частоти Високочастотні PSD Порівнюючи 2 1 / f генератори шуму

fc10fМfcfМ

аi=ехp[-2π10(i-N)/год-γ/2год-c]
бi=ехp[-2π10(i-N)/год-c]
де c = 1. Для отримання ПЗД C&S, як показано вище, нехай c = 0 і fМ=0,5fc.


1
Корсіні і Салетті: "Цей фільтр складається з N каскадних секцій першого порядку, кожен з яких має реальну пару полюс-нуль", і N полюсів "рівномірно розподілені по логарифму частоти з щільністю h полюсів на десятиліття частоти (p / d), і N нулів слідують відповідно ". Розділ «Дискусія» був надзвичайно гарно виконаний, тому не було проблем просто програмувати те, що вони сказали. Все, що у мене є, - моя стара копія та відсканована її копія. Для ПТД вище я використав 3 полюси / десятиліття, і ПСД є середньо-віднімається та одностороннім. Ed V
Ed V
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.