MATLAB의 일반화 된 가우스 노이즈 생성기
-
19-09-2019 - |
문제
MATLAB에서 일반화 된 가우스 노이즈 생성기를 만들어야합니다.
GGN은 임의의 신호입니다 v
다음 분포 :
v ~ GN(mi, alfa, beta) :
p(v; mi, alfa, beta) = (beta/(2*alfa*gamma(1/beta))) * exp(-(abs(v - mi)/alfa).^beta )
여기서 P는 값 v에 대해 계산 된 프로 블리티입니다.
참고 gamma
값을 계산하는 Matlab 함수로 내장되어 있습니다. 감마 기능.
다음과 같은 방식으로 발전기를 만들려고했습니다.
function gn = GN(dim1, dim2, mi, alfa, beta)
gn = zeros(dim1, dim2);
for i=1:dim1
for j=1:dim2
v = mi + 10*(alfa^2)* rand(1) - 5*(alfa^2);
prob = rand(1);
while(p(v, mi, alfa, beta) < prob)
v = mi + 10*alfa* rand(1) - 5*alfa;
prob = rand(1);
end
gn(i,j) = v;
end
end
function pval = p(v, mi, alfa, beta)
pval = (beta/(2*alfa*gamma(1/beta))) * exp(-(abs(v - mi)/alfa).^beta );
그러나 루프는 무한한 것처럼 보입니다.
또한 :
beta = 2
이 생성기는 평균 값을 가진 정상 가우시안 분포와 동일한 값을 반환해야합니다. mi
표준 편차 alfa^2/2
편집하다좋아, Doug는 나를 올바른 방향으로 가리켰다. 우리는 그것을 만들어야합니다 v
선택할 가능성이 높거나 적은 값 (10* STD가 상당히 양호하다고 가정하고 확률 조건을 확인합니다.
새로운 것을 그리는 것도 중요합니다 prob
각 확률 검사에 대한 값 (while loop).
그래서 문제는입니다 해결되었습니다
이 생성기는 다음을 생성 할 수 있습니다.
- 가우스 소음 beta = 2
-Laplasian (임펄스) 소음 beta = 1
해결책
나는 이것을 시도했고 그것은 잘 작동했다. 임의의 임계 값을 0.1 ([0 1]에서 유효한 선택)로 설정합니다. PVAL은 인정되는 프로브보다 훌륭해야합니다.
>> GN(2,2,1,1,2)
prob =
0.1000
pval =
0.4738
prob =
0.1000
pval =
0.2674
prob =
0.1000
pval =
0.4885
prob =
0.1000
pval =
0.5473
ans =
0.5821 0.1358
0.6204 0.8254
임의의 임계 값이 1에 가까울 때 승리하기가 어려운 복권 인 것처럼 보입니다. PVAL에 나오는 가능한 숫자를 주목하십시오.
그것은 무한 루프가 아니며, 당신이 Matlab에게 복권을 얻을 때까지 여러 번 임의의 숫자를 선택하도록 요청하는 것만으로도! 약간의 a처럼 보입니다 Bogosort