Як генерувати смугу білого гаусового білого шуму в MATLAB?


16

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


У системах безперервного часу концепція білого шуму, обмеженого смугою, гауссова чи ні, добре визначена і добре зрозуміла. Для систем дискретного часу питання складніше, і вам потрібно врахувати, що таке обмеження смуг і як воно порівнюється з частотою Найквіста.
Діліп Сарват

2
@DilipSarwate: Для мене "білий смуговий шум" - це оксиморон! :-)
Пітер К.

@PeterK. Поняття про обмежений діапазон білого шуму використовується в першу чергу в смугових системах, де характеристики шуму поза прохідною смугою не мають значення, тоді як в межах прохідної смуги шум не відрізняється від білого шуму, який пройшов через ідеальний смуговий фільтр, який пропускає саме смугу частот, - смуга пропускання. Це не більше оксиморону, ніж білий шум (без певних зауважень щодо обмеження смуг). Дивіться також коментар DRazick (який знаходиться на місці) після відповіді Джейсона Р (з якою я не згоден).
Діліп Сарват

1
@DilipSarwate: Дякую за пояснення. Я це розумію, але все ще думаю, що це дуже поганий вибір термінології. Для мене "бій-шум відфільтрований через смугу пропускань" є більш точним, але я вважаю, що він закінчується там же.
Пітер К.

1
@PeterK. На жаль, "фільтр білого шуму" пропускає смугу часто означає процес, описаний у відповіді JasonR. Почніть з білого шуму і профільтруйте його через фільтр з функцією передачі щоб отримати процес з PSD, пропорційний . Діапазон обмеженого білого шуму той самий, за винятком того, що ми наполягаємо, що має бути функцією передачі ідеального смугового фільтра. Ключовим моментом білого шуму є те, що ми не можемо подати сигнал там, де шум a'i'nt, який застосовується до обмеженого смугою білого шуму, поки ми обмежені, щоб наші сигнали залишалися в діапазоні. | H ( f ) | 2 H ( f )H(f)|H(f)|2H(f)
Діліп Сарват

Відповіді:


19

Ви б генерували смуговий гауссовий шум, спочатку генеруючи білий шум, а потім фільтруючи його до потрібної смуги пропускання. Як приклад:

% design FIR filter to filter noise to half of Nyquist rate
b = fir1(64, 0.5);
% generate Gaussian (normally-distributed) white noise
n = randn(1e4, 1);
% apply to filter to yield bandlimited noise
nb = filter(b,1,n);

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

8
Однією з особливостей гауссових випадкових величин є те, що сума двох незалежних гауссових RV також розподілена гауссом. Оскільки вхідний шум білий, ви можете розглядати кожен зразок на виході фільтра як суму безлічі незалежних гауссових випадкових змінних (де дисперсія кожного RV залежить від дисперсії вхідного шуму та значень відповідного фільтруючого крана). Тому зразки на виході з фільтра також розподіляються по Гауссу. Однак шум, очевидно, вже не білий, оскільки існує кореляція між послідовними зразками на виході фільтра.
Джейсон R

Ця властивість більш докладно описана у Вікіпедії . Зауважте, що властивість все-таки зберігається, навіть якщо вхідний шум кольоровий (див. Розділ "Корельовані випадкові змінні").
Джейсон R

1
обличчя . Звичайно.
Спейсі

3
Однак цей метод не створюватиме білий шум. Не потрібно застосовувати фільтр, кожен дискретний дискретизований шум для початку обмежений.
Рой

9

Як невелике доповнення до відповіді Джейсона: зазвичай вам потрібно генерувати смугу без обмежень із заданою дисперсією . Ви можете додати цей код до коду, вказаного у відповіді Джейсона:σ2

var = 3.0;  % just an example  
scale = sqrt(var)/std(nb);
nb = scale*nb;  % nb has variance 'var'

Зауважте, що вам потрібно виконати масштабування після фільтрування, оскільки в цілому фільтр змінює відхилення від шуму.


2
Гарна думка. Якщо масштабувати коефіцієнти фільтра так, що n=0N|h[n]|2=1

@Matt Приємне доповнення!
Спейсі

4

Кожен раз, коли ви генеруєте дискретні зразки шуму (використовуючи randn/ randнаприклад MATLAB / ), ви фактично генеруєте смугу обмежених смуг.

Все, що вам потрібно зробити, - це пристосування дисперсії дискретних зразків до дисперсії шуму "Безперервний", з якого нібито взяті зразки.

Дано безперервний білий шум (широкий сенс) з дисперсією σcn2δ(t)fsfsσcn2

fs/2

Повний опис наведено тут - Як моделювати AWGN (аддитивний шум білого гаусса) в системах зв'язку для конкретної пропускної здатності .


Більше інформації тут: dsp.stackexchange.com/questions/17494/…
Royi

2

Чому не можна використовувати підхід, згаданий у цій публікації ?

Він починається з потрібних частот і працює назад, щоб побудувати сигнал, а не фільтрувати. Він використовує код python, але також посилається на вихідний код Matlab.

Чи є якісь недоліки, як це зробити?


1
дивлячись на оригінальний код matlab, він працює на розмір блоку n, вашу довжину fft. Якщо я хочу 2н зразків, ви можете подвоїти довжину футів, що більше, ніж робити 2 фути. якщо ви зробите 2 окремих блоки, відбудеться переривчастий перехід від першого до другого блоку. ви можете використовувати вікно, щоб згладити перехід, але тоді вам потрібно зробити більше двох блоків, щоб уникнути масштабування часу. Використовуючи метод фільтра, коли фільтр перебуває в стаціонарному стані, ви можете подавати його довільними числами скільки завгодно. Збільшення обробки методу фільтра масштабується лінійно.

0

Я усвідомлюю, що це питання спливе в поточному погляді, оскільки @Drazick змінив свою відповідь 2013 року.

якщо ви генеруєте хороший однаковий pdf псевдовипадковий номер (скажімо, використовуючиxrand()frand()0x<1

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

я можу змінити це пізніше і додати якийсь С-подібний псевдо-код, щоб це явно показати.


-1

Випускаючи білий шум у повному спектрі, а потім фільтруючи його, ви хочете пофарбувати стіну свого будинку білою, тому ви вирішите пофарбувати весь будинок білим, а потім пофарбувати весь будинок, крім стіни. Ідіотський. (Але має сенс в електроніці).

Я зробив невелику програму на С, яка може генерувати білий шум на будь-якій частоті та будь-якій пропускній здатності (скажімо, на центральній частоті 16 кГц та "в ширину" 2 кГц). Фільтрація не задіяна.

Що я зробив, це просто: всередині основного (нескінченного) циклу я генерую синусоїду на центральній частоті +/- випадкове число між -полосною пропускною здатністю та + половиною ширини, то я зберігаю цю частоту для довільної кількості зразків (зернистість) і це це результат:

Білий шум шириною 2 кГц на центральній частоті 16 кГц

Білий шум шириною 2 кГц на центральній частоті 16 кГц

Псевдокод:

while (true)
{

    f = center frequency
    r = random number between -half of bandwidth and + half of bandwidth

<secondary loop (for managing "granularity")>

    for x = 0 to 8 (or 16 or 32....)

    {

        [generate sine Nth value at frequency f+r]

        output = generated Nth value
    }


}

1
STFT не є рівним по всій смузі. Ви не показали, чому є якась перевага вашої техніки. Більшість фарби запасається як сірувато-біла, а потім змішується з пігментом. Помаранчева фарба виготовляється не просто використанням помаранчевих інгредієнтів. Немає зайвої роботи з генерування білого шуму.

@StanleyPawlukiewicz В електроніці ви таке, тому що генератор шуму і фільтр - це два дуже простих "об'єкти". У програмуванні фільтр є складним за кількістю інструкцій, ніж просто генеруванням необхідних даних. Тож при програмуванні кращий мій підхід, якщо у вас є критично важливі для часу програми. Якщо ви зголосилися, я пропоную вам подумати над цим ще раз.
Зібрі

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

1
Насправді вбудована пульсація - це параметр конструкції. Сказати, що їх пік на центральній частоті також неправдивий

1
Оскільки вашу техніку так легко змінити, чому б вам не написати свій власний синусоїдальний рутинник замість того, щоб посилатися на один і стверджувати, що ваш код менш складний і порівнювати його з двозначним. поки ви додаєте його, як щодо версії з фіксованою точкою. ви також можете подумати про те, як масштабується ваша техніка, збільшуючи кількість зразків
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.