Fix sample packing

This commit is contained in:
Geoffrey Merck 2020-05-24 07:45:50 +02:00
parent 26d055a67b
commit 0bd79fa440
2 changed files with 8 additions and 10 deletions

View File

@ -20,7 +20,6 @@
#include "Config.h"
#include "FMDownsampler.h"
CFMDownsampler::CFMDownsampler(uint16_t length) :
m_ringBuffer(length),
m_samplePack(0U),
@ -32,17 +31,17 @@ m_sampleIndex(0U)
void CFMDownsampler::addSample(q15_t sample)
{
uint16_t usample = uint16_t(sample + 2048);
uint32_t usample = uint32_t(int32_t(sample) + 2048);
//only take one of three samples
switch(m_sampleIndex){
case 0:
m_samplePack = uint32_t(usample) << 12;
m_samplePack = usample << 12;
break;
case 3:{
m_samplePack |= uint32_t(usample);
m_samplePack |= usample;
//we did not use MSB; skip it
TSamplePairPack pair{m_samplePackPointer[1U], m_samplePackPointer[2U], m_samplePackPointer[3U]};
TSamplePairPack pair{m_samplePackPointer[0U], m_samplePackPointer[1U], m_samplePackPointer[2U]};
m_ringBuffer.put(pair);

View File

@ -23,6 +23,7 @@
#include "Config.h"
#include "RingBuffer.h"
#include "FMSamplePairPack.h"
#include "FMDirectForm1.h"
class CFMDownsampler {
public:
@ -34,10 +35,8 @@ public:
private:
CRingBuffer<TSamplePairPack> m_ringBuffer;
uint32_t m_samplePack;
uint8_t* m_samplePackPointer;
uint8_t m_sampleIndex;
};