У деяких роботах я читав, що аддитивний шум - смуга гаусівського білого кольору.
Як я змоделюю цей тип шуму використовувати MATLAB?
У деяких роботах я читав, що аддитивний шум - смуга гаусівського білого кольору.
Як я змоделюю цей тип шуму використовувати MATLAB?
Відповіді:
Ви б генерували смуговий гауссовий шум, спочатку генеруючи білий шум, а потім фільтруючи його до потрібної смуги пропускання. Як приклад:
% 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);
Як невелике доповнення до відповіді Джейсона: зазвичай вам потрібно генерувати смугу без обмежень із заданою дисперсією . Ви можете додати цей код до коду, вказаного у відповіді Джейсона:
var = 3.0; % just an example
scale = sqrt(var)/std(nb);
nb = scale*nb; % nb has variance 'var'
Зауважте, що вам потрібно виконати масштабування після фільтрування, оскільки в цілому фільтр змінює відхилення від шуму.
Кожен раз, коли ви генеруєте дискретні зразки шуму (використовуючи randn
/ rand
наприклад MATLAB / ), ви фактично генеруєте смугу обмежених смуг.
Все, що вам потрібно зробити, - це пристосування дисперсії дискретних зразків до дисперсії шуму "Безперервний", з якого нібито взяті зразки.
Дано безперервний білий шум (широкий сенс) з дисперсією
Повний опис наведено тут - Як моделювати AWGN (аддитивний шум білого гаусса) в системах зв'язку для конкретної пропускної здатності .
Чому не можна використовувати підхід, згаданий у цій публікації ?
Він починається з потрібних частот і працює назад, щоб побудувати сигнал, а не фільтрувати. Він використовує код python, але також посилається на вихідний код Matlab.
Чи є якісь недоліки, як це зробити?
Я усвідомлюю, що це питання спливе в поточному погляді, оскільки @Drazick змінив свою відповідь 2013 року.
якщо ви генеруєте хороший однаковий pdf псевдовипадковий номер (скажімо, використовуючиrand()
frand()
"білий шум" - це, звичайно, неправильно, навіть для аналогових сигналів. "силовий сигнал" з плоским спектром аж до нескінченності також має нескінченну силу. фактично гауссовий і "білий" сигнал, що генерується, як описано, має кінцеву потужність (що є дисперсією і дорівнює 1) і кінцеву пропускну здатність, виражену як односторонній, є Nyquist. (тож "спектральна щільність потужності" або потужність на одиницю частоти дорівнює 1 / Найквіст.) масштабуйте її та компенсуйте її, як не завгодно.
я можу змінити це пізніше і додати якийсь С-подібний псевдо-код, щоб це явно показати.
Випускаючи білий шум у повному спектрі, а потім фільтруючи його, ви хочете пофарбувати стіну свого будинку білою, тому ви вирішите пофарбувати весь будинок білим, а потім пофарбувати весь будинок, крім стіни. Ідіотський. (Але має сенс в електроніці).
Я зробив невелику програму на С, яка може генерувати білий шум на будь-якій частоті та будь-якій пропускній здатності (скажімо, на центральній частоті 16 кГц та "в ширину" 2 кГц). Фільтрація не задіяна.
Що я зробив, це просто: всередині основного (нескінченного) циклу я генерую синусоїду на центральній частоті +/- випадкове число між -полосною пропускною здатністю та + половиною ширини, то я зберігаю цю частоту для довільної кількості зразків (зернистість) і це це результат:
Білий шум шириною 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
}
}