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

Сгенерируйте 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

Создайте 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-24-96-stereo-63secs.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×2

   -0.3505   -1.6718

noisePowerdB = 10*log10(noisePower)
noisePowerdB = 1×2

  -29.6072  -29.5546

signalPowerdB = 10*log10(signalPower)
signalPowerdB = 1×2

  -29.9577  -31.2264

Смешайте входное аудио со сгенерированным розовым шумом в ОСШ на 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 = 1×2

    8.0000    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