Obtendo deslocamento dos dados do acelerômetro com o Core Motion

Estou desenvolvendo um aplicativo de realidade aumentada que (no momento) deseja exibir um cubo simples no topo de uma superfície e seja capaz de se mover no espaço (girando e deslocando) para olhar o cubo em todos os ângulos diferentes. O problema de calibrar a câmera não se aplica aqui, pois peço ao usuário que coloque o iPhone na superfície em que ele deseja colocar o cubo e pressione um botão para redefinir a atitude. Para descobrir a rotação da câmera é muito simples com o giroscópio e o Core Motion. Eu faço assim:

if (referenceAttitude != nil) {
    [attitude multiplyByInverseOfAttitude:referenceAttitude];
}

CMRotationMatrix mat = attitude.rotationMatrix;

GLfloat rotMat[] = {
    mat.m11, mat.m21, mat.m31, 0,
    mat.m12, mat.m22, mat.m32, 0,
    mat.m13, mat.m23, mat.m33, 0,
    0, 0, 0, 1
};

glMultMatrixf(rotMat);

Isso funciona muito bem. De qualquer maneira, surgem mais problemas quando tento encontrar o deslocamento no espaço durante uma aceleração. O exemplo do Apple Teapot com Core Motion apenas adiciona os valores x, ye z do vetor de aceleração ao vetor de posição. Isso (além de não ter muito sentido) resulta no retorno do objeto à posição original após uma aceleração. (Como a aceleração passa de positiva para negativa ou vice-versa). Eles fizeram assim:

translation.x += userAcceleration.x;
translation.y += userAcceleration.y;
translation.z += userAcceleration.z;

O que devo fazer para descobrir o deslocamento da aceleração em alguns aspectos? (com diferença horária conhecida). Procurando outras respostas, parece que tenho que integrar duas vezes para obter velocidade da aceleração e, em seguida, posição da velocidade. Mas não há nenhum exemplo no código, e eu não acho que isso seja realmente necessário. Além disso, existe o problema de que, quando o iPhone ainda está em um avião, os valores do acelerômetro não são nulos (acho que há algum ruído). Quanto devo filtrar esses valores? Eu deveria filtrá-los?