2012-04-29 5 views
1

나는 위너 필터 시뮬레이션을 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의 미러 이미지이다 : 여기

코드이다. 분명히이 말이 맞을 수 없습니다.

미리 감사드립니다.

+1

투표의 마감 : 낯선 사람에게 검사를 통해 코드의 오류를 찾아내는 것은 생산성 향상에 도움이되지 않습니다. 디버거 또는 인쇄 문을 사용하여 문제를 확인 (또는 적어도 격리) 한 다음보다 구체적인 질문으로 다시 돌아와야합니다 (일단 5 줄 [테스트 케이스] (http : /sscce.org)). –

+0

예,이 코드는 Java 또는 C 코드가 아닙니다. 누군가가 도움을 원한다면 그는 그것을 matlab에 붙여 넣기 만하면됩니다. 나는 필요한 모든 정보만을 제공했다. – SneakyMummin

+0

디버깅은 스스로해야 할 일입니다. 스택 오버플로는 문제를 해결하기 위해 기존 경로를 다 써버린 경우 (예 : 예상 한대로 작동하지 않는 단일 코드 행으로 좁혀진 경우)에 사용됩니다. –

답변

0

문제 없습니다.

나는 당신이 무엇을하려고하는지에 대해 아이디어가 완벽하게 입니다. 그러나 당신이하려고하는 것이 신호 대 잡음비를 얻고, 일부 선형 1 차 시스템을 통해 그 효과를 모방하려한다면, PG 다항식을 수정해야합니다. 그렇다면 완전히 틀린 것입니다. help filter을 입력하고 AB 정의를 참조하십시오. 토플 리츠에 병이 조절은 여전히있다

k = 1:100; 
sigma = 0.1; 
s1 = randn(1,100); 
n1 = randn(1,100) * sigma; 
Pnum = [0 0.1]; 
Pdenum = [1 -0.9]; 
Gnum = [0 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) * 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'); 

:

이 올바른 코드입니다. 나는 그런 식으로 두지 만, 당신은 여전히 ​​다루기에 재미가 있습니다. 이것은 쉽게 해결할 수 있습니다.

그들은 사실입니다. StackOverflow는 숙제를 해결하는 것이 아니라 빛을 찾는 데 도움을주기위한 것입니다.