Ventana circular para filtrar datos
Publicado por Aura (4 intervenciones) el 13/03/2012 10:23:12
Buenas,
estudio la Conductividad Electrica del suelo y para ello esto se utiliza un sensor empujado por un quad, cada medida del sensor lleva asociada la posición X e Y mediante un GPS colocado en el quad.
Por tanto tengo una matriz de datos "tiempo de medida GPS", "coordenada X (utm en metros) medida con GPS", "coordenada Y (utm en metros) medida con GPS" y "valor de CE" y necesito programar en matlab un tipo de filtrado de datos que funcione de la siguiente manera:
1.- Elegir una ventana circular de búsqueda de radio = 28 metros, que su centro vaya recorriendo todos los puntos medidos.
2.- Calcular la media y desviación típica de los valores de CE contenidos en esa ventana, exceptuando el valor del punto a evaluar (el que esté en su centro)
3.- Calcular z=/x-m//desv; x=valor de CE del punto a evaluar, m=media y desv=desviación típica.
4.- Establecer un umbral de z=2.
5.- Elimiar la fila del punto evaluado si z>2 o dejarla si z<=2.
6.- Crear un archivo con los datos filtrados (los buenos) y otro con los datos eliminados (los malos)
Los pasos que yo había pensado seguir son un poco básicos, relacionados con mi nivel de matlab, pero creo que audará a entender mejor la pregunta que estoy haciendo:
1. Cargar el fichero y leer los datos.
2. Ordenar por GPS_TIME para tenerlos ordenados tal y como tomó los datos el sensor.
3. La X y Y de cada fila hacen referencia a un punto único. Ir fila por fila (es como ir punto por punto) y calcular la circunferencia de radio 28 centrada en ese punto
t=0:.01:2*pi;
r=28 %m;
x=X+r*cos(t);
y=Y+r*sin(t);
4. Si desde el primer punto hasta el punto evaluado "AND" desde el punto evaluado hasta el último punto, los puntos caen dentro de la circunferencia --> calcular la media y la desviación típica de todos los puntos incluidos en la ventana exceptuando el punto evaluado.
Si no caen dentro de la ventana --> No hacer nada.
5. Calcular Z para el punto, z=/punto-m//desv. "Punto (valor de CE) - media" en valor absoluto.
6. Si Z =<2 --> No hacer nada (el punto se deja xq es bueno)
Si Z>2 --> Guardar el punto (la fila) en una matriz nueva y guardar el archivo con el nombre* original terminado en "e" y eliminar el punto (la fila) del archivo original.
7. Guardar el archivo original ya filtrado con el nombre* original terminado en "f".
* No sé si es posible hacerlo en matlab, sino lo haré a mano.
Sin embargo me he quedado en el punto "3" y no sé cómo seguir, podría enviar el archivo de excel a quien estuviera interesado en ayudarme, ya que son demasiados datos como para pegarlos aquí.
Muchas gracias,
Aura.
estudio la Conductividad Electrica del suelo y para ello esto se utiliza un sensor empujado por un quad, cada medida del sensor lleva asociada la posición X e Y mediante un GPS colocado en el quad.
Por tanto tengo una matriz de datos "tiempo de medida GPS", "coordenada X (utm en metros) medida con GPS", "coordenada Y (utm en metros) medida con GPS" y "valor de CE" y necesito programar en matlab un tipo de filtrado de datos que funcione de la siguiente manera:
1.- Elegir una ventana circular de búsqueda de radio = 28 metros, que su centro vaya recorriendo todos los puntos medidos.
2.- Calcular la media y desviación típica de los valores de CE contenidos en esa ventana, exceptuando el valor del punto a evaluar (el que esté en su centro)
3.- Calcular z=/x-m//desv; x=valor de CE del punto a evaluar, m=media y desv=desviación típica.
4.- Establecer un umbral de z=2.
5.- Elimiar la fila del punto evaluado si z>2 o dejarla si z<=2.
6.- Crear un archivo con los datos filtrados (los buenos) y otro con los datos eliminados (los malos)
Los pasos que yo había pensado seguir son un poco básicos, relacionados con mi nivel de matlab, pero creo que audará a entender mejor la pregunta que estoy haciendo:
1. Cargar el fichero y leer los datos.
2. Ordenar por GPS_TIME para tenerlos ordenados tal y como tomó los datos el sensor.
3. La X y Y de cada fila hacen referencia a un punto único. Ir fila por fila (es como ir punto por punto) y calcular la circunferencia de radio 28 centrada en ese punto
t=0:.01:2*pi;
r=28 %m;
x=X+r*cos(t);
y=Y+r*sin(t);
4. Si desde el primer punto hasta el punto evaluado "AND" desde el punto evaluado hasta el último punto, los puntos caen dentro de la circunferencia --> calcular la media y la desviación típica de todos los puntos incluidos en la ventana exceptuando el punto evaluado.
Si no caen dentro de la ventana --> No hacer nada.
5. Calcular Z para el punto, z=/punto-m//desv. "Punto (valor de CE) - media" en valor absoluto.
6. Si Z =<2 --> No hacer nada (el punto se deja xq es bueno)
Si Z>2 --> Guardar el punto (la fila) en una matriz nueva y guardar el archivo con el nombre* original terminado en "e" y eliminar el punto (la fila) del archivo original.
7. Guardar el archivo original ya filtrado con el nombre* original terminado en "f".
* No sé si es posible hacerlo en matlab, sino lo haré a mano.
Sin embargo me he quedado en el punto "3" y no sé cómo seguir, podría enviar el archivo de excel a quien estuviera interesado en ayudarme, ya que son demasiados datos como para pegarlos aquí.
Muchas gracias,
Aura.
Valora esta pregunta


0