Observer design for nonlinear systems