exponenta event banner

pinknoise

Генерировать розовый шум

Описание

пример

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

пример

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

пример

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

X = pinknoise(___,typename) возвращает массив розовых шумов типа данных typename. 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)

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

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

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

noise = noise.*scaleFactor;

Убедитесь, что результирующий SNR равен 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++ с помощью MATLAB ® Coder™

.

См. также

| |

Представлен в R2019b