문제

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top