Wie lässt sich dieser Umbruchvorgang am effizientesten durchführen? Ich habe es zufällig auf STM32-Hardware entdeckt, wo 16-Bit-Werte automatisch übertragen wurden, wenn große Verstärkungswerte angewendet wurden, aber diese Version ist für die Ausführung auf anderer Hardware (NXP) gedacht und ich möchte absichtlich die Kontrolle darüber haben, was ich möchte. Ich tue es, anstatt mich auf eine schlecht dokumentierte Nebenwirkung zu verlassen. Ich möchte auch, dass dies so effizient wie möglich ist und gleichzeitig der Code in C bleibt, da es sich um einen Echtzeit-DSP-Prozess handelt und daher laufzeitkritisch ist.
Bitte lassen Sie mich wissen, welchen Ansatz Sie TIA vorschlagen würden !
Im Anhang finden Sie einen Codeausschnitt, der einen ersten Ansatz zeigt und zeigt, was erreicht werden soll. Ich glaube nicht, dass die Verwendung der while-Schleife sehr effizient sein dürfte. Ich würde dies gerne verbessern, um eine bessere Methode zu verwenden:
Code: Select all
void wavefolding_distortion::update(void)
{
audio_block_t *block = receiveWritable(0);
if(block){
for (int i=0; i < AUDIO_BLOCK_SAMPLES; i++) {
int32_t in = block->data[i];
in *= gain;
while(in > 32767){
in -= 65536;
}
while(in < -32768){
in += 65536;
}
block->data[i] = in;
}
transmit(block);
release(block);
}
}