주요 콘텐츠

pinknoise

핑크 잡음 생성

설명

X = pinknoise(n)은 길이가 n인 핑크 잡음 열 벡터를 반환합니다.

예제

X = pinknoise(sz1,sz2)sz1×sz2 행렬을 반환합니다. 출력 X의 각 채널(열)은 독립적인 핑크 잡음 신호입니다.

예제

X = pinknoise(sz)는 벡터 sz의 요소로 정의된 차원을 갖는 벡터 또는 행렬을 반환합니다. sz는 양의 정수로 구성된 요소를 1개 또는 2개 가진 행 벡터여야 합니다. 출력 X의 각 채널(열)은 독립적인 핑크 잡음 신호입니다.

예제

X = pinknoise(___,typename)은 데이터형이 typename인 핑크 잡음의 배열을 반환합니다. typename 입력값은 'single' 또는 'double'일 수 있습니다. typename은 위에 열거된 구문의 입력 인수와 함께 지정할 수 있습니다.

X = pinknoise(___,'like',p)p와 같은 핑크 잡음의 배열을 반환합니다. typename, 'like' 둘 중 하나를 지정할 수는 있지만 둘을 같이 지정할 수는 없습니다.

예제

예제

모두 축소

44.1kHz의 샘플 레이트를 사용하여 100초간의 핑크 잡음을 생성합니다.

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 object. The axes object with title Power Spectral Density of Pink Noise (Averaged), xlabel Frequency (Hz), ylabel PSD (dB/Hz) contains an object of type line.

16kHz의 샘플 레이트를 사용하여 500초간의 핑크 잡음을 생성합니다.

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 object. The axes object with title Relative Probability of Pink Noise Amplitude, xlabel Amplitude, ylabel Probability contains an object of type histogram.

48kHz의 샘플 레이트를 사용하여 5초간의 스테레오 핑크 잡음 신호를 생성합니다.

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

pn = pinknoise(duration*fs,numChan);

스테레오 핑크 잡음 신호를 들어봅니다.

sound(pn,fs)

핑크 잡음 함수의 채널은 독립적으로 생성됩니다. 비대각선 상관 계수는 0(상관 관계가 없음)에 가깝습니다.

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.5dB의 신호 레벨을 생성하는데, 이는 오디오 신호의 전력에 가깝습니다.

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

입력 오디오를 생성된 핑크 잡음과 8dB SNR로 혼합합니다.

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

noise = noise.*scaleFactor;

결과로 생성되는 SNR이 8dB인지 확인한 다음 처음 5초를 들어봅니다.

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

입력 인수

모두 축소

핑크 잡음의 행 개수로, 음이 아닌 정수로 지정됩니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

각 차원의 크기로, 음이 아닌 정수 또는 음이 아닌 정수의 개별 인수 2개로 지정됩니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

각 차원의 크기로, 음이 아닌 정수로 구성된 요소를 1개 또는 2개 가진 행 벡터로 지정됩니다. 이 벡터의 각 요소는 대응하는 차원의 크기를 나타냅니다.

데이터형: 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++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

버전 내역

R2019b에 개발됨

참고 항목

| |