📄 csensordatafilter.cpp
字号:
/*
============================================================================
* Name : CSonsorDataFilter.cpp
* Part of : Example3D
* Description : Definition of CSensorDataFilter
* Copyright (c) 2008 Nokia Corporation
============================================================================
*/
#include "CSensorDataFilter.h"
CSensorDataFilter* CSensorDataFilter::NewL( TInt aRingBufferSize )
{
CSensorDataFilter* self = new( ELeave )CSensorDataFilter( aRingBufferSize );
CleanupStack::PushL( self );
self->ConstructL();
CleanupStack::Pop( self );
return self;
}
void CSensorDataFilter::ConstructL()
{
// Allocate ring buffer for sensor data
iRingBuffer = new( ELeave )TInt[ iRingBufferSize ];
// Clear ring buffer
memset(iRingBuffer, '\0', iRingBufferSize * sizeof(TInt));
// Initialize moving ring buffer pointer
iRingBufferPointer = iRingBuffer;
}
CSensorDataFilter::CSensorDataFilter( TInt aRingBufferSize )
{
iRingBufferSize = aRingBufferSize;
}
CSensorDataFilter::~CSensorDataFilter()
{
delete iRingBuffer;
}
TInt CSensorDataFilter::FilterSensorData( TInt aNewValue )
{
TInt sum = 0;
// Replace the oldest value in the ring buffer with the new value according to the pointer
*iRingBufferPointer = aNewValue;
// Move the ring buffer pointer
if (iRingBufferPointer < (iRingBuffer + (iRingBufferSize - 1)))
{
iRingBufferPointer++;
}
else
{
iRingBufferPointer = iRingBuffer;
}
// MOVING AVERAGE FILTER ALGORITHM
// Calculate sum of ring buffer values
for (TInt i = 0; i < iRingBufferSize; i++)
{
sum += iRingBuffer[i];
}
// Calculate the average value
return (sum / iRingBufferSize);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -