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 "Config.h"
#include "FMDownsampler.h" #include "FMDownsampler.h"
CFMDownsampler::CFMDownsampler(uint16_t length) : CFMDownsampler::CFMDownsampler(uint16_t length) :
m_ringBuffer(length), m_ringBuffer(length),
m_samplePack(0U), m_samplePack(0U),
@ -32,17 +31,17 @@ m_sampleIndex(0U)
void CFMDownsampler::addSample(q15_t sample) 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 //only take one of three samples
switch(m_sampleIndex){ switch(m_sampleIndex){
case 0: case 0:
m_samplePack = uint32_t(usample) << 12; m_samplePack = usample << 12;
break; break;
case 3:{ case 3:{
m_samplePack |= uint32_t(usample); m_samplePack |= usample;
//we did not use MSB; skip it //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); m_ringBuffer.put(pair);

View File

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