コード例 #1
0
ファイル: fft-scope.cpp プロジェクト: JvanKatwijk/sdr-j-fm
void	fft_scope::addElement (DSPCOMPLEX x) {
int32_t	i;
DSPFLOAT	multiplier	= (DSPFLOAT)segmentSize / displaySize;
//	
	inputBuffer [fillPointer] = x;
	fillPointer	= (fillPointer + 1) % spectrumFillpoint;

	if (++ sampleCounter < segmentSize)
	   return;

	sampleCounter	= 0;
	for (i = 0; i < spectrumFillpoint; i ++) {
	   DSPCOMPLEX tmp = inputBuffer [(fillPointer + i) % spectrumFillpoint];
	   spectrumBuffer [i] = cmul (tmp, multiplier * Window [i]); 
	}
	for (i = spectrumFillpoint; i < spectrumSize; i ++)
	   spectrumBuffer [i] = 0;

	spectrum_fft	-> do_FFT ();

	mapSpectrumtoDisplay (zoomingLevel, zoomingPoint);
	doAverage ();

	showSpectrum ();
}
コード例 #2
0
ファイル: Timer.cpp プロジェクト: Ackak/Khazad
void Timer::Pause()
{
	if ((started == true) && (paused == false))
	{
		paused = true;
        AcumulationVector[SampleIndex] = RENDERER->getRoot()->getTimer()->getMillisecondsCPU() - (StartTime + SamplingPause);
        PausedTime = RENDERER->getRoot()->getTimer()->getMillisecondsCPU() - StartTime;

        SampleIndex++;
        if(SampleIndex == SampleSize)
        {
            doAverage();
        }
	}
}
コード例 #3
0
ファイル: fft-scope.cpp プロジェクト: JvanKatwijk/sdr-j-fm
//
//	This is a kind of hack to allow the spectrumviewer to
//	send in vectors of size n and have them displayed
//	immediately
void	fft_scope::addElementsandShow (DSPCOMPLEX *v, int16_t n) {
int16_t i, j;
int32_t	Incr;
double	temp;

	if (2 * n > spectrumSize) {
	   fprintf (stderr, "Increase n = %d, size = %d\n", n, spectrumSize);
	   return;
	}

	for (i = 0; i < n; i ++)
	   spectrumBuffer [i] = v [i];

	for (i = n; i < spectrumSize; i ++)
	   spectrumBuffer [i] = 0;
	spectrum_fft	-> do_FFT ();

	Incr = spectrumSize / displaySize;
	for (i = 0; i < displaySize / 2; i ++) {
	   displayBuffer [displaySize / 2 + i] = 0;
	   for (j = 0; j < Incr; j ++) 
	      displayBuffer [displaySize / 2 + i] +=
	                    abs (spectrumBuffer [i * Incr + j]) / binWidth;
	   displayBuffer [displaySize / 2 + i] /= Incr;
	}

	for (i = 0; i < displaySize / 2; i ++) {
	   displayBuffer [i] = 0;
	   for (j = 0; j < Incr; j ++) 
	      displayBuffer [i] +=
	                    abs (spectrumBuffer [spectrumSize / 2 + i * Incr + j]) / binWidth;
	   displayBuffer [i] /= Incr;
	}

	temp	= (double)MaxFrequency / displaySize;
	for (i = 0; i < displaySize; i ++)
	   X_axis [i] =
	      ((double)vfo - (double)MaxFrequency
	           +  (double)((i) * (double) 2 * temp)) / ((double)scale);

	doAverage ();

	showSpectrum ();
}
コード例 #4
0
void GreenHouseMiddleLayer::analyze() {	
	float temperatureAverage = 0;
	float airHumidityAverage = 0;
	float lightAverage = 0;
	Message newMessage;
	DateTime dateTime;
	clock.createDateTime(dateTime);
	newMessage.dateTime = dateTime;	 //add time to message
	prepareMessage(newMessage, CommonValues::highLayerAddress);
	//we have some data to analyze
	if (isTemperatureReadyToAnalyze) {
		Serial.println(F("in isTemperatureReadyToAnalyze"));
		//calculate average
		temperatureAverage = doAverage(temperatureData);
		//check thresholds
		newMessage.action = handleThresholds(temperatureAverage, CommonValues::temperatureThresholdMin,
			CommonValues::temperatureThresholdMax, CommonValues::heatPin,CommonValues::fanPin);
			//todo assign action
		newMessage.data = temperatureAverage;
		newMessage.messageType = CommonValues::dataType;
		newMessage.sensorType = CommonValues::temperatureType;
		if (!(sendMessage(newMessage))) {

			//TODO handle if  message fails
		}
		//clear the array after done
		isTemperatureReadyToAnalyze = false;
		temperatureData.clear();
	}
	//we have some data to analyze
	if (isHumidityReadyToAnalyze) {
		Serial.println(F("in isHumidityReadyToAnalyze"));
		//calculate average
		airHumidityAverage = doAverage(humidityData);
		//check thresholds
		handleThresholds(airHumidityAverage, CommonValues::airHumidityThresholdMin,
			CommonValues::airHumidityThresholdMax, CommonValues::steamPin, CommonValues::ventPin);
		newMessage.action = STEAMER;
		newMessage.data = airHumidityAverage;
		newMessage.messageType = CommonValues::dataType;
		newMessage.sensorType = CommonValues::humidityType;
		if (!(sendMessage(newMessage))) {
		//	Serial.println(F("message failed, adding to unsent"));
		//	unsentImportantMessages.add(newMessage);
		}
		//clear the array after done
		isHumidityReadyToAnalyze = false;
		humidityData.clear();
		Serial.print(F("after isHumidityReadyToAnalyze clear size is :"));
		Serial.println(humidityData.size());
	}
	if (isLightReadyToAnalyze) {
		Serial.println(F("in isLightReadyToAnalyze"));
		//calculate average
		lightAverage = doAverage(lightData);
		//TODO decide what to do with light thresholds
		newMessage.action = handleThresholds(lightAverage, CommonValues::lightThresholdMin,
			CommonValues::lightThresholdMax, CommonValues::lampPin, CommonValues::lampPin);
		newMessage.data = lightAverage;
		newMessage.messageType = CommonValues::dataType;
		newMessage.sensorType = CommonValues::lightType;
		if (!(sendMessage(newMessage))) {
			//TODO
		}
		//clear the array after done
		isLightReadyToAnalyze = false;
		lightData.clear();
	}	
	//TODO reduce duplicate code all above
	//no need to do average on consumption data
	
}