示例#1
0
void TunerDetector::analyzeLookup()
{
	size_t maxTable = 0;
	float maxPower = 0;

	for (size_t offset = 0; offset < offsets.size(); offset++)
	{
		float amplitudeSin = 0;
		float amplitudeCos = 0;
		for (size_t sample = 0; sample < buf.size(); sample++)
		{
			amplitudeSin += buf[sample] * sinTables[offset * buf.size() + sample];
			amplitudeCos += buf[sample] * cosTables[offset * buf.size() + sample];
		}
		float power = sqrt(amplitudeSin * amplitudeSin + amplitudeCos * amplitudeCos);
		if (power > maxPower)
		{
			maxPower = power;
			maxTable = offset;
		}
	}

	float offset = offsets[maxTable];
	float freq = freqShift(targetFrequency, offset);
	history.push_back(freq);
}
示例#2
0
文件: fft.cpp 项目: RedhawkSDR/fftlib
void FwdFft<ComplexFFTWVector>::run(void)
{
    if (wrapComplex_)
    {
        freqShift(vTime_);
    }
    run_();
}
示例#3
0
void TunerDetector::prepare(float targetFrequency)
{
	method = (targetFrequency < 200) ? autocorr : lookup;

	if (method == lookup)
	{
		TunerDetector::targetFrequency = targetFrequency;
		for (size_t table = 0; table < offsets.size(); table++)
		{
			float stepFrequency = freqShift(targetFrequency, offsets[table]);
			updateTable(table, stepFrequency);
		}
	}
	
	else if (method == autocorr)
	{
		float targetPeriod = SAMPLE_RATE / targetFrequency;
		// TODO: check against buf.size() here

		const float fiveHalfsteps = 1.3348f;
		maxPeriod = (int)ceil(SAMPLE_RATE / targetFrequency * fiveHalfsteps);
		minPeriod = (int)round(SAMPLE_RATE / targetFrequency / fiveHalfsteps);
	}
}
示例#4
0
文件: fft.cpp 项目: RedhawkSDR/fftlib
void RevFft<ComplexFFTWVector>::run(void)
{
    run_();
    if (wrapComplex_)
        freqShift(vTime_);
}