Namespaces
Variants
Actions
(Difference between revisions)

Reducing accelerometer sensor noise with Qt

Jump to: navigation, search
(Makivioj -)
 
(Makivioj -)
Line 47: Line 47:
 
     if (bufferPos < BUFFER_SIZE) {
 
     if (bufferPos < BUFFER_SIZE) {
 
         readingBuffer->append(reading);
 
         readingBuffer->append(reading);
         bufferPos++;         return false;
+
         bufferPos++;
 +
        return false;
 
     }
 
     }
 
     else {
 
     else {

Revision as of 16:15, 4 July 2011

This code snippet shows how to reduce accelerometer noise using Qt.

Contents

Introduction

In the CS000915 - Reducing accelerometer sensor noise code snippet, it was shown how to reduce accelerometer noise in Symbian/C++. This code snippet will show how this same noise filtering can be achieved using Qt.

Summary

Qt provides a possibility to add custom filters for QSensor objects. These filters can be used for decreasing the sensors notifying frequency. For the accelerometer a filter can be added by implementing the QAccelerometerFilter interface and adding it for the QAccelerometer object via the addFilter method. In this code snippet sixteen sensor readings are collected to a buffer and the average of these readings is set as the notified reading.

Preconditions

Qt 4.7 or higher is installed.

Sources

accelerometerfilter.h

#include <QAccelerometerFilter> 
#include <QList>
 
QTM_USE_NAMESPACE
 
#define BUFFER_SIZE 16
 
class AccelerometerFilter : public QObject, public QAccelerometerFilter
{
Q_OBJECT
 
public:
explicit AccelerometerFilter(QObject *parent = 0);
private:
QList<QAccelerometerReading*> *readingBuffer;
int bufferPos;
public slots:
bool filter(QAccelerometerReading *reading);

accelerometerfilter.cpp

#include "accelerometerfilter.h"  
 
AccelerometerFilter::AccelerometerFilter(QObject *parent) :
QAccelerometerFilter(), readingBuffer(new QList<QAccelerometerReading*>())
{
}
 
bool AccelerometerFilter::filter(QAccelerometerReading *reading)
{
if (bufferPos < BUFFER_SIZE) {
readingBuffer->append(reading);
bufferPos++;
return false;
}
else {
bufferPos = 0;
qreal xSum = 0, ySum = 0, zSum = 0;
for (int i = 0; i < readingBuffer->count(); i++) {
xSum += readingBuffer->at(i)->x();
ySum += readingBuffer->at(i)->y();
zSum += readingBuffer->at(i)->z();
}
readingBuffer->clear();
reading->setX(xSum / BUFFER_SIZE);
reading->setY(ySum / BUFFER_SIZE);
reading->setZ(zSum / BUFFER_SIZE);
return true;
}
}

myaccelerometer.h

#include <QAccelerometer> 
#include <QVariant>
 
QTM_USE_NAMESPACE
 
class MyAccelerometer : public QObject {
Q_OBJECT
public:
explicit MyAccelerometer(QObject *parent = 0);
private:
QAccelerometer *accelerometer;
signals:
void accelerationChanged(QVariant, QVariant, QVariant);
public slots:
void updateAcceleration();

myaccelerometer.cpp

#include <QAccelerometerReading> 
#include "myaccelerometer.h"
#include "accelerometerfilter.h"
 
MyAccelerometer::MyAccelerometer(QObject *parent) :
QObject(parent), accelerometer(new QAccelerometer(this)) {
accelerometer->addFilter(new AccelerometerFilter(this));
connect(accelerometer, SIGNAL(readingChanged()), this, SLOT(updateAcceleration()));
accelerometer->start();
}
 
void MyAccelerometer::updateAcceleration() {
QAccelerometerReading *reading = accelerometer->reading();
emit accelerationChanged(QVariant(reading->x()), QVariant(reading->y()), QVariant(reading->z()));
}

Postconditions

This code snippet demonstrated how to reduce accelerometer noise using Qt.

Article Metadata

Tested with
Devices(s): Nokia N8-00, Nokia E7-00

Compatibility
Platform(s): Symbian, Maemo, Harmattan, Qt 4.7

Article
Keywords: sensors, accelerometer, filter, noise
Created: makivioj (04 Jul 2011)
Last edited: makivioj (04 Jul 2011)
108 page views in the last 30 days.
Nokia Developer aims to help you create apps and publish them so you can connect with users around the world.

京ICP备05048969号  © Copyright Nokia 2013 All rights reserved