Как создать полосовой ограниченный гауссовский белый шум в MATLAB?

16

В некоторых работах я читал, что аддитивный шум ограничен гауссовым белым.
Как я могу имитировать этот тип шума, используя MATLAB?

Бо ЛИ
источник
В системах с непрерывным временем концепция ограниченного по полосе белого шума, независимо от того, является ли он гауссовским или нет, хорошо определена и хорошо понята. Для систем с дискретным временем проблема является более сложной, и вам необходимо рассмотреть, что такое ограничение полосы и как оно сравнивается с частотой Найквиста.
Дилип Сарват
2
@DilipSarwate: Для меня «ограниченный диапазон белого шума» - оксюморон! :-)
Питер К.
@PeterK. Понятие ограниченного белого шума используется в основном в полосовых системах, где характеристики шума вне полосы пропускания не имеют значения, тогда как в полосе пропускания шум неотличим от белого шума, который пропущен через идеальный полосовой фильтр, который пропускает точно полосу частот, которая это полоса пропускания. Это не более оксюморон, чем белый шум (без каких-либо уничижительных комментариев об ограничениях полосы). См. Также комментарий DRazick (который находится на месте) после ответа Jason R (с которым я не согласен).
Дилип Сарватэ
1
@DilipSarwate: Спасибо за объяснение. Я понимаю, но я все еще думаю, что это очень плохой выбор терминологии. Для меня «полосовой отфильтрованный белый шум» более точен, но я полагаю, что он заканчивается в том же месте.
Питер К.
1
@PeterK. К сожалению, «полосовой фильтр с белым шумом» обычно означает процесс, описанный в ответе JasonR. Начните с белого шума и отфильтруйте его через фильтр с передаточной функцией чтобы получить процесс с PSD, пропорциональным | H ( f ) | 2 . Ограниченный по полосе белый шум такой же, за исключением того, что мы настаиваем на том, что H ( f ) должна быть передаточной функцией идеального полосового фильтра. Ключевым моментом с белым шумом является то, что мы не можем поместить сигнал там, где шум a'i'nt, который применяется и к белому шуму с ограниченной полосой, пока мы ограничены, чтобы наши сигналы оставались в полосе.H(f)|H(f)|2H(f)
Dilip Sarwate

Ответы:

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
1
Facepalm . Конечно.
Спейси
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

Каждый раз, когда вы генерируете дискретные образцы шума (используя MATLAB's randn/rand к примеру) вы на самом деле порождают группу ограниченный шум.

Все, что вам нужно сделать, - это настроить дисперсию дискретных выборок на дисперсию «непрерывного» шума, из которого предположительно взяты выборки.

σcn2δ(t)fsfsσcn2

fs/2

Полное описание дается здесь - Как имитировать AWGN (аддитивный белый гауссов шум) в системах связи для определенной полосы пропускания .

Royi
источник
Более подробная информация здесь: dsp.stackexchange.com/questions/17494/…
Рой
2

Почему нельзя использовать подход, упомянутый в этом посте ?

Он начинается с нужных частот и работает в обратном направлении для формирования сигнала вместо фильтрации. Он использует код Python, но также ссылки на оригинальный код Matlab.

Есть ли какие-либо недостатки в этом?

MrUser
источник
1
Глядя на оригинальный код Matlab, он работает для размера блока n, вашей длины FFT. Если я хочу 2n сэмплов, вы можете удвоить длину FFT, что больше, чем 2 FFT. если вы сделаете 2 отдельных блока, произойдет прерывистый переход от первого блока ко второму. Вы могли бы использовать окно, чтобы сгладить переход, но тогда вам нужно сделать более 2 блоков, чтобы избежать скальпирования вашего временного ряда. Используя метод фильтра, когда фильтр находится в устойчивом состоянии, вы можете кормить его случайными числами столько, сколько хотите. Увеличение обработки для метода фильтра масштабируется линейно.
0

я понимаю, что этот вопрос всплыл в текущем представлении, потому что @Drazick изменил свой ответ 2013 года.

если вы генерируете хорошее равномерное псевдослучайное число в формате PDFИкс(скажем, используя rand()или frand(), если это хорошая версия), который варьируется от 0 до 1 (то есть0Икс<1), затем, если вы сделаете это 12 раз, сложите все 12 предположительно независимых и некоррелированных значений и вычтете 6,0 из этой суммы, вы получите нечто, очень близкое к единице-дисперсии и гауссовскому случайному числу с нулевым средним. если однородные псевдослучайные числа pdf являются «хорошими» (то есть они проявляют независимость друг от друга), эта сумма будет настолько же «белой», насколько вы можете получить сигнал с дискретным временем.

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

я могу редактировать это позже и добавить немного C-подобного псевдокода, чтобы показать это явно.

Роберт Бристоу-Джонсон
источник
-1

Создайте белый шум полного спектра и затем отфильтруйте его так, как будто вы хотите покрасить стену своего дома в белый цвет, поэтому вы решили покрасить весь дом в белый цвет, а затем закрасить весь дом, кроме стены. Идиотский (Но имеет смысл в электронике).

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

То, что я сделал, это просто: внутри основного (бесконечного) цикла я генерирую синусоиду на центральной частоте +/- случайное число от -half полосы пропускания до + halfbandwidth, затем я сохраняю эту частоту для произвольного числа выборок (гранулярность), и это это результат:

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

White noise 2kHz wide at 16kHz center frequency

Псевдокод:

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
    }


}
Zibri
источник
1
STFT не плоский по всей группе. Вы не показали, почему в вашей технике есть какое-то преимущество. Кстати, большинство красок хранится в виде серовато-белого цвета, а затем смешивается с пигментом. Оранжевая краска не сделана, только используя оранжевые компоненты. Там нет никакой дополнительной работы по генерации белого шума.
@StanleyPawlukiewicz В электронике вы не правы, потому что генератор шума и фильтр - это два очень простых «объекта». В программировании фильтр сложен по количеству инструкций намного больше, чем просто генерация необходимых данных. Поэтому при программировании предпочтительнее мой подход, если у вас есть приложения, критичные ко времени. Если вы проголосовали против, я предлагаю вам еще раз подумать об этом.
Зибри
1
Ваш шум не является предпочтительным. спектр не плоский по всей полосе. вызов трансцендентной функции на лету не быстрее, чем фильтрация. Ваши аргументы необоснованны
1
На самом деле пульсация внутри полосы является конструктивным параметром. Сказать, что они
1
Так как вашу технику так легко изменить, почему бы вам не написать свою собственную процедуру синусоидальной волны вместо того, чтобы ссылаться на нее и утверждать, что ваш код менее сложен, и сравнить ее с биквадом. пока вы добавляете его, как насчет версии с фиксированной запятой. Вы также можете подумать о том, как масштабируется ваша техника при увеличении количества образцов