pinknoise

Сгенерируйте розовый шум

Описание

пример

X = pinknoise(n) возвращает вектор-столбец длины розового шума n.

пример

X = pinknoise(sz1,sz2) возвращает sz1-by- sz2 матрица. Каждый канал (столбец) выхода X является независимым сигналом розового шума.

пример

X = pinknoise(sz) возвращает вектор или матрицу с размерностями, заданными элементами вектора sz. sz должен быть одно- или двухэлементным вектором-строкой положительных целых чисел. Каждый канал (столбец) выхода X является независимым сигналом розового шума.

X = pinknoise(___,typename) возвращает массив розового шума типа данных typename. The typename Вход может быть либо 'single' или 'double'. Можно комбинировать typename с любым из входных параметров в предыдущих синтаксисах.

пример

X = pinknoise(___,'like',p) возвращает массив розового шума вроде p. Можно задать любой из typename или 'like', но не то и другое.

Примеры

свернуть все

Сгенерируйте 100 секунд розового шума со скоростью дискретизации 44,1 кГц.

fs = 44.1e3;
duration = 100;

y = pinknoise(duration*fs);

Постройте график средней степени спектральной плотности (PSD) сгенерированного розового шума.

[~,freqVec,~,psd] = spectrogram(y,round(0.05*fs),[],[],fs);
meanPSD = mean(psd,2);

semilogx(freqVec,db(meanPSD,"power"))
xlabel('Frequency (Hz)')
ylabel('PSD (dB/Hz)')
title('Power Spectral Density of Pink Noise (Averaged)')
grid on

Figure contains an axes. The axes with title Power Spectral Density of Pink Noise (Averaged) contains an object of type line.

Сгенерируйте 500 секунд розового шума со скоростью дискретизации 16 кГц.

fs = 16e3;
duration = 500;

y = pinknoise(duration*fs);

Постройте график относительной вероятности амплитуды розового шума. Амплитуда всегда ограничена между -1 и 1.

histogram(y,"Normalization","probability","EdgeColor","none")
xlabel("Amplitude")
ylabel("Probability")
title("Relative Probability of Pink Noise Amplitude")
grid on

Figure contains an axes. The axes with title Relative Probability of Pink Noise Amplitude contains an object of type histogram.

Создайте 5-секундный стерео-розовый шумовой сигнал со скоростью дискретизации 48 кГц.

fs = 48e3;
duration = 5;
numChan = 2;

pn = pinknoise(duration*fs,numChan);

Слушайте стерео розовый сигнал шума.

sound(pn,fs)

Каналы функции розового шума генерируются независимо. Обратите внимание, что внедорожные коэффициенты корреляции близки к нулю (некоррелированы).

R = corrcoef(pn(:,1),pn(:,2))
R = 2×2

    1.0000   -0.0190
   -0.0190    1.0000

Коррелированный и некоррелированный розовый шум имеет различные психоакустические эффекты. Когда шум коррелирует, звук менее эмбиентный и более централизованный. Чтобы прослушать коррелированный розовый шум, отправьте один канал сигнала розового шума на свое стерео устройство. Эффект наиболее выражен при использовании наушников.

sound([pn(:,1),pn(:,1)],fs)

Чтение в аудио файла.

[audioIn,fs] = audioread("MainStreetOne-16-16-mono-12secs.wav");

Создайте сигнал розового шума того же размера и типа данных, что и audioIn.

noise = pinknoise(size(audioIn),'like',audioIn);

Добавьте розовый шум в аудиосигнал и затем прослушайте первые 5 секунд.

noisyMainStreet = noise + audioIn;
sound(noisyMainStreet(1:fs*5,:),fs)

The pinknoise функция генерирует аппроксимацию -29,5 дБ сигнала, который близок к степени аудиосигнала.

noisePower = sum(noise.^2,1)/size(noise,1);
signalPower = sum(audioIn.^2,1)/size(audioIn,1);
snr = 10*log10(signalPower./noisePower)
snr = 1.9791
noisePowerdB = 10*log10(noisePower)
noisePowerdB = -29.6665
signalPowerdB = 10*log10(signalPower)
signalPowerdB = -27.6874

Смешайте входной аудио с сгенерированным розовым шумом при 8 дБ ОСШ.

desiredSNR = 8;
scaleFactor = sqrt(signalPower./(noisePower*(10^(desiredSNR/10))));

noise = noise.*scaleFactor;

Проверьте результирующий ОСШ 8 дБ, а затем прослушайте первые 5 секунд.

noisePower = sum(noise.^2,1)/size(noise,1);
snr = 10*log10(signalPower./noisePower)
snr = 8.0000
noisyMainStreet = noise + audioIn;
sound(noisyMainStreet(1:fs*5,:),fs)

Входные параметры

свернуть все

Количество строк розового шума, заданное как неотрицательное целое число.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Размер каждой размерности, заданный как неотрицательное целое число или два отдельных аргумента неотрицательных целых чисел.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Размер каждой размерности, заданный как одно- или двухэлементный вектор-строка неотрицательных целых чисел. Каждый элемент этого вектора указывает размер соответствующей размерности.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Тип данных для создания, заданный как 'double' или 'single'.

Типы данных: char | string

Прототип создаваемого массива, заданный как числовой массив. Сгенерированный розовый шум является совпадающим типом данных, что и p.

Типы данных: single | double

Выходные аргументы

свернуть все

Розовый шум, возвращенный как вектор-столбец или матрица независимых каналов.

Типы данных: single | double

Совет

  • Конкатенация нескольких векторов розового шума не приводит к розовому шуму. Для потоковых приложений используйте dsp.ColoredNoise.

Алгоритмы

Розовый шум генерируется путем передачи равномерно распределенных случайных чисел через ряд случайным образом инициированных SOS-фильтров. Получившееся распределение амплитуд розового шума квазигауссово и ограничено между − 1 и 1. Получившаяся спектральная плотность степени розового шума (PSD) обратно пропорциональна частоте:

S(f)1f

Расширенные возможности

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.

См. также

| |

Введенный в R2019b