mirror of
https://github.com/eried/portapack-mayhem.git
synced 2024-12-24 23:09:26 -05:00
Adding 16 bit LFSR , to Noise Signal Generator App
This commit is contained in:
parent
06643df6a5
commit
d5f20c45b9
@ -48,29 +48,30 @@ private:
|
||||
void update_tone();
|
||||
void on_tx_progress(const uint32_t progress, const bool done);
|
||||
|
||||
const std::string shape_strings[9] = {
|
||||
"CW ",
|
||||
"Sine ",
|
||||
"Triangle ",
|
||||
"Saw up ",
|
||||
"Saw down ",
|
||||
"Square ",
|
||||
"Noise n20Khz",
|
||||
"Noise n10khz",
|
||||
"Noise n5khz "
|
||||
const std::string shape_strings[10] = {
|
||||
"CW-no mod",
|
||||
"Sine ",
|
||||
"Triangle ",
|
||||
"Saw up ",
|
||||
"Saw down ",
|
||||
"Square ",
|
||||
"Noise 8-nx20Khz", // using 8 bits LFSR register, 6 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 };
|
||||
|
||||
Labels labels {
|
||||
{ { 6 * 8, 4 + 10 }, "Shape:", Color::light_grey() },
|
||||
{ { 7 * 8, 7 * 8 }, "Tone: Hz", Color::light_grey() },
|
||||
{ { 3 * 8, 4 + 10 }, "Shape:", Color::light_grey() },
|
||||
{ { 6 * 8, 7 * 8 }, "Tone: Hz", Color::light_grey() },
|
||||
{ { 22 * 8, 15 * 8 + 4 }, "s.", Color::light_grey() },
|
||||
{ { 8 * 8, 20 * 8 }, "Modulation: FM", Color::light_grey() }
|
||||
};
|
||||
|
||||
ImageOptionsField options_shape {
|
||||
{ 13 * 8, 4, 32, 32 },
|
||||
{ 10 * 8, 4, 32, 32 },
|
||||
Color::white(),
|
||||
Color::black(),
|
||||
{
|
||||
@ -82,12 +83,13 @@ private:
|
||||
{ &bitmap_sig_square, 5 },
|
||||
{ &bitmap_sig_noise, 6 },
|
||||
{ &bitmap_sig_noise, 7 },
|
||||
{ &bitmap_sig_noise, 8 }
|
||||
{ &bitmap_sig_noise, 8 },
|
||||
{ &bitmap_sig_noise, 9 }
|
||||
}
|
||||
};
|
||||
|
||||
Text text_shape {
|
||||
{ 18 * 8, 4 + 10, 8 * 8, 16 },
|
||||
{ 15 * 8, 4 + 10, 8 * 8, 16 },
|
||||
""
|
||||
};
|
||||
|
||||
@ -98,12 +100,12 @@ private:
|
||||
};
|
||||
|
||||
Button button_update {
|
||||
{ 6 * 8, 10 * 8, 8 * 8, 3 * 8 },
|
||||
{ 5 * 8, 10 * 8, 8 * 8, 3 * 8 },
|
||||
"Update"
|
||||
};
|
||||
|
||||
Checkbox checkbox_auto {
|
||||
{ 16 * 8, 10 * 8 },
|
||||
{ 15 * 8, 10 * 8 },
|
||||
4,
|
||||
"Auto"
|
||||
};
|
||||
|
@ -75,6 +75,17 @@ void SigGenProcessor::execute(const buffer_c8_t& buffer) {
|
||||
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 .
|
||||
if (counter == 0) {
|
||||
bit_16 = ((lfsr_16 >> 0) ^ (lfsr_16 >> 1) ^ (lfsr_16 >> 3) ^ (lfsr_16 >> 4) ^ (lfsr_16 >> 12) & 1);
|
||||
lfsr_16 = (lfsr_16 >> 1) | (bit_16 << 15);
|
||||
sample = (lfsr_16 & 0x00FF);
|
||||
counter++;
|
||||
} else { // counter == 1 , no need to shift the register again, just use the top 8 bits.
|
||||
// sample = ((lfsr_16 & 0XFF00) >> 8); // it becomes less continuous the spectrum. Better skip it .
|
||||
counter = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (tone_shape < 6) {
|
||||
@ -114,8 +125,8 @@ void SigGenProcessor::on_message(const Message* const msg) {
|
||||
fm_delta = message.bw * (0xFFFFFFULL / 1536000);
|
||||
tone_shape = message.shape;
|
||||
|
||||
// lfsr = 0x54DF0119;
|
||||
lfsr = seed_value ;
|
||||
lfsr = seed_value ; // init lfsr 8 bits.
|
||||
lfsr_16 = seed_value_16; // init lfsr 16 bits.
|
||||
|
||||
configured = true;
|
||||
break;
|
||||
|
@ -44,8 +44,11 @@ private:
|
||||
bool auto_off { };
|
||||
int32_t phase { 0 }, sphase { 0 }, delta { 0 }; // they may have sign .
|
||||
int8_t sample { 0 }, re { 0 }, im { 0 }; // they may have sign .
|
||||
uint8_t seed_value = {0x56}; // seed : any nonzero start state will work.
|
||||
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.
|
||||
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 8-bit to allow bit<<7 later in the code */
|
||||
uint8_t counter {0};
|
||||
|
||||
TXProgressMessage txprogress_message { };
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user