Pink noise with specific power P
조회 수: 17 (최근 30일)
이전 댓글 표시
I need to generate pink noise signal with a specific power P. I can't figure it out on how to do that using the built-in function. Any help?
댓글 수: 0
채택된 답변
Star Strider
2023년 8월 26일
편집: Star Strider
2023년 8월 28일
Create a scaling constant defined by:
k = sqrt(DesiredPower / ActualPower)
then multiply that by the original vector.
Equivalently:
newVector = sqrt(DesiredPower/mean(OriginalVector.^2)) * OriginalVector
The resulting vector has the desired power.
Try this —
vp = @(x) mean(x.^2); % Mean Power
n = 100;
pn1 = pinknoise(n); % Pink Noise Vector
vp_pn1 = vp(pn1) % Mean Power Of Pink Noise Vector
P = 25; % Desired Pink Noise Power
k = sqrt(P / vp_pn1) % Scaling Constant
pn2 = pn1 * k; % Scaled Pink Noise Vector
vp_pn2 = vp(pn2) % Mean Power Of Scaled Pink Noise Mean Power
figure
pspectrum(pn1)
title('Original')
figure
pspectrum(pn2)
title('Scaled')
EDIT — (28 August 2023 at 15:10)
To create pink noise with the same power as a particular signal, use a variation of this —
load handel.mat
filename = 'handel.wav';
audiowrite(filename,y,Fs);
clear y Fs
[y,Fs] = audioread('handel.wav')
pn = pinknoise(numel(y))
NewVector2 = @(OriginalSound,OriginalVector) sqrt(mean(OriginalSound.^2) ./ mean(OriginalVector.^2)) * OriginalVector;
Power_pn = mean(pn.^2)
Power_OriginalSound = mean(y.^2)
Power_NewVector = mean(NewVector2(y,pn).^2) % The Original 'pinknoise' Vector Now Has The Same Power As The Tyh Vector
.
댓글 수: 0
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Audio I/O and Waveform Generation에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!