나는 위너 필터 시뮬레이션을 matlab에 만들었지 만, 결과가 정확하지 않아서 코드에서 실수를 한 것처럼 보입니다. 누군가 코드를 훑어보고 오류를 지적하면 고맙겠습니다.Matlab 필터 시뮬레이션 오류
k = 1:100;
sigma = 0.1;
s1 = randn(1,100);
n1 = randn(1,100) * sigma;
Pnum = [1 0.1];
Pdenum = [1 0.9];
Gnum = [1 0.9];
Gdenum = [1 0.1];
n = filter(Pnum, Pdenum, n1);
s = filter(Gnum, Gdenum, s1);
x = n + s;
rxx = xcorr(x);
rxs = xcorr(x,s);
toeplitz_rxx = toeplitz(rxx);
wopt = inv(toeplitz_rxx) * rxs;
wopt = inv(toeplitz_rxx) * transpose(rxs);
s_hat = filter(wopt,1,x);
error = x - s_hat; %this is where the wrong result is being calculated
plot(k,error, 'r',k,s_hat, 'b', k, x, 'g');
문제는 산출 오차가 정확하게 s_hat의 미러 이미지이다 : 여기
코드이다. 분명히이 말이 맞을 수 없습니다.미리 감사드립니다.
투표의 마감 : 낯선 사람에게 검사를 통해 코드의 오류를 찾아내는 것은 생산성 향상에 도움이되지 않습니다. 디버거 또는 인쇄 문을 사용하여 문제를 확인 (또는 적어도 격리) 한 다음보다 구체적인 질문으로 다시 돌아와야합니다 (일단 5 줄 [테스트 케이스] (http : /sscce.org)). –
예,이 코드는 Java 또는 C 코드가 아닙니다. 누군가가 도움을 원한다면 그는 그것을 matlab에 붙여 넣기 만하면됩니다. 나는 필요한 모든 정보만을 제공했다. – SneakyMummin
디버깅은 스스로해야 할 일입니다. 스택 오버플로는 문제를 해결하기 위해 기존 경로를 다 써버린 경우 (예 : 예상 한대로 작동하지 않는 단일 코드 행으로 좁혀진 경우)에 사용됩니다. –