Finally Noise Signal with best option 16 bit LFSR

This commit is contained in:
Brumi-2021 2023-05-02 21:29:35 +02:00
parent 804fa0d3c4
commit d77102426a
3 changed files with 26 additions and 30 deletions

View File

@ -48,17 +48,14 @@ private:
void update_tone(); void update_tone();
void on_tx_progress(const uint32_t progress, const bool done); void on_tx_progress(const uint32_t progress, const bool done);
const std::string shape_strings[10] = { const std::string shape_strings[7] = {
"CW-just carrier", "CW-just carrier",
"Sine signal ", "Sine signal ",
"Triangle signal", "Triangle signal",
"Saw up signal ", "Saw up signal ",
"Saw down signal", "Saw down signal",
"Square signal ", "Square signal ",
"Noise 8-nx20Khz", // using 8 bits LFSR register, 6 order polynomial feedback. "White Noise " // using 16 bits LFSR register, 16 order polynomial feedback.
"Noise 8-nx10khz", // using 8 bits LFSR register, 7 order polynomial feedback.
"Noise 8 -nx5khz ", // using 8 bits LFSR register, 8 order polynomial feedback.
"Noise 16-nx1khz" // using 16 bits LFSR register, 16 order polynomial feedback.
}; };
bool auto_update { false }; bool auto_update { false };
@ -81,10 +78,7 @@ private:
{ &bitmap_sig_saw_up, 3 }, { &bitmap_sig_saw_up, 3 },
{ &bitmap_sig_saw_down, 4 }, { &bitmap_sig_saw_down, 4 },
{ &bitmap_sig_square, 5 }, { &bitmap_sig_square, 5 },
{ &bitmap_sig_noise, 6 }, { &bitmap_sig_noise, 6 }
{ &bitmap_sig_noise, 7 },
{ &bitmap_sig_noise, 8 },
{ &bitmap_sig_noise, 9 }
} }
}; };

View File

@ -61,21 +61,9 @@ void SigGenProcessor::execute(const buffer_c8_t& buffer) {
} else if (tone_shape == 5) { } else if (tone_shape == 5) {
// Square // Square
sample = (((tone_phase & 0xFF000000) >> 24) & 0x80) ? 127 : -128; sample = (((tone_phase & 0xFF000000) >> 24) & 0x80) ? 127 : -128;
} else if (tone_shape == 6) { // taps: 6 5; feedback polynomial: x^6 + x^5 + 1 , Periode 63 = 2^n-1,it generates armonincs n x 20Khz } else if (tone_shape == 6) { // White Noise generator, pseudo random noise generator, 8 bits linear-feedback shift register (LFSR) algorithm, variant Fibonacci.
// White Noise generator, pseudo random noise generator, 8 bits linear-feedback shift register (LFSR) algorithm, variant Fibonacci.
// https://en.wikipedia.org/wiki/Linear-feedback_shift_register // https://en.wikipedia.org/wiki/Linear-feedback_shift_register
bit = ((lfsr >> 2) ^ (lfsr >> 3)) & 1; // 16 bits LFSR .taps: 16, 15, 13, 4 ;feedback polynomial: x^16 + x^15 + x^13 + x^4 + 1
lfsr = (lfsr >> 1) | (bit << 7);
sample = lfsr;
} else if (tone_shape == 7) { // taps: 7 6; feedback polynomial: x^7 + x^6 + 1 , Periode 127 = 2^n-1,it generates armonincs n x 10Khz
bit = ((lfsr >> 1) ^ (lfsr >> 2)) & 1;
lfsr = (lfsr >> 1) | (bit << 7);
sample = lfsr;
} else if (tone_shape == 8) { //taps:8,6,5,4;feedback polynomial: x^8 + x^6 + x^5 + x^4 + 1,Periode 255= 2^n-1, armonics n x 5khz
bit = ((lfsr >> 0) ^ (lfsr >> 2) ^ (lfsr >> 3) ^ (lfsr >> 4)) & 1;
lfsr = (lfsr >> 1) | (bit << 7);
sample = lfsr;
} else if (tone_shape == 9) { // 16 bits LFSR .taps: 16, 15, 13, 4 ;feedback polynomial: x^16 + x^15 + x^13 + x^4 + 1
// Periode 65535= 2^n-1, harmonics every < 1Khz , quite continuous . // Periode 65535= 2^n-1, harmonics every < 1Khz , quite continuous .
if (counter == 0) { if (counter == 0) {
bit_16 = ((lfsr_16 >> 0) ^ (lfsr_16 >> 1) ^ (lfsr_16 >> 3) ^ (lfsr_16 >> 4) ^ (lfsr_16 >> 12) & 1); bit_16 = ((lfsr_16 >> 0) ^ (lfsr_16 >> 1) ^ (lfsr_16 >> 3) ^ (lfsr_16 >> 4) ^ (lfsr_16 >> 12) & 1);
@ -88,6 +76,20 @@ void SigGenProcessor::execute(const buffer_c8_t& buffer) {
} }
} }
/* else if (tone_shape == 7) { // 8 bit options, finally not used-
bit = ((lfsr >> 2) ^ (lfsr >> 3)) & 1; // taps: 6 5; feedback polynomial: x^6 + x^5 + 1 , Periode 63 = 2^n-1,it generates armonincs n x 20Khz
lfsr = (lfsr >> 1) | (bit << 7);
sample = lfsr;
} else if (tone_shape == 8) { // taps: 7 6; feedback polynomial: x^7 + x^6 + 1 , Periode 127 = 2^n-1,it generates armonincs n x 10Khz
bit = ((lfsr >> 1) ^ (lfsr >> 2)) & 1;
lfsr = (lfsr >> 1) | (bit << 7);
sample = lfsr;
} else if (tone_shape == 9) { //taps:8,6,5,4;feedback polynomial: x^8 + x^6 + x^5 + x^4 + 1,Periode 255= 2^n-1, armonics n x 5khz
bit = ((lfsr >> 0) ^ (lfsr >> 2) ^ (lfsr >> 3) ^ (lfsr >> 4)) & 1;
lfsr = (lfsr >> 1) | (bit << 7);
sample = lfsr; } */
if (tone_shape < 6) { if (tone_shape < 6) {
tone_phase += tone_delta; tone_phase += tone_delta;
} }
@ -125,7 +127,7 @@ void SigGenProcessor::on_message(const Message* const msg) {
fm_delta = message.bw * (0xFFFFFFULL / 1536000); fm_delta = message.bw * (0xFFFFFFULL / 1536000);
tone_shape = message.shape; tone_shape = message.shape;
lfsr = seed_value ; // init lfsr 8 bits. // lfsr = seed_value ; // Finally not used , init lfsr 8 bits.
lfsr_16 = seed_value_16; // init lfsr 16 bits. lfsr_16 = seed_value_16; // init lfsr 16 bits.
configured = true; configured = true;

View File

@ -42,13 +42,13 @@ private:
uint8_t tone_shape { }; uint8_t tone_shape { };
uint32_t sample_count { 0 }; uint32_t sample_count { 0 };
bool auto_off { }; bool auto_off { };
int32_t phase { 0 }, sphase { 0 }, delta { 0 }; // they may have sign . int32_t phase { 0 }, sphase { 0 }, delta { 0 }; // they may have sign in the pseudo random sample generation.
int8_t sample { 0 }, re { 0 }, im { 0 }; // they may have sign . int8_t sample { 0 }, re { 0 }, im { 0 }; // they have sign + and -.
uint8_t seed_value = {0x56}; // seed 8 bits lfsr : any nonzero start state will work.
uint16_t seed_value_16 = {0xACE1}; // seed 16 bits lfsr : any nonzero start state will work. uint16_t seed_value_16 = {0xACE1}; // seed 16 bits lfsr : any nonzero start state will work.
uint8_t lfsr { }, bit { }; // bit must be 8-bit to allow bit<<7 later in the code */ uint16_t lfsr_16 { }, bit_16 { }; // bit must be 16-bit to allow bit<<15 later in the code */
uint16_t lfsr_16 { }, bit_16 { }; // bit must be 8-bit to allow bit<<7 later in the code */
uint8_t counter {0}; uint8_t counter {0};
// uint8_t seed_value = {0x56}; // Finally not used lfsr of 8 bits , seed 8blfsr : any nonzero start state will work.
// uint8_t lfsr { }, bit { }; // Finally not used lfsr of 8 bits , bit must be 8-bit to allow bit<<7 later in the code */
TXProgressMessage txprogress_message { }; TXProgressMessage txprogress_message { };
}; };