Я пишу код DSP, который выполняет волновое искажение входного сигнала. Этот код применяет усиление амплитуды (умножает входные данные на значение усиления), затем wave складывает входные данные таким образом, чтобы конечный диапазон амплитуды составлял от -32768 до 32767 (от -1 до ~1 в 16-битном аудиоформате с фиксированной запятой). Значения выше 32767 переносятся в -32768 и наоборот.
Каков наиболее эффективный способ выполнения этой операции переноса? Я обнаружил это случайно на оборудовании STM32, где 16-битные значения автоматически переворачивались при применении больших значений усиления, но эта версия предназначена для работы на другом оборудовании (NXP), и я хотел бы намеренно контролировать то, что я использую. Я делаю, а не полагаюсь на плохо документированный побочный эффект. Мне также хотелось бы, чтобы это было максимально эффективно, сохраняя при этом код на C, поскольку это процесс DSP в реальном времени и, следовательно, критический для времени выполнения.
Пожалуйста, дайте мне знать, какой подход вы бы предложили TIA !
Прилагается фрагмент кода, который демонстрирует начальный подход и то, что должно быть достигнуто. Я не думаю, что использование цикла while будет очень эффективным, хотелось бы улучшить его, чтобы использовать лучший метод:
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;
in *= gain;
while(in > 32767){
in -= 65536;
}
while(in < -32768){
in += 65536;
}
block->data = in;
}
transmit(block);
release(block);
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... -bit-value
Самый эффективный способ обернуть 32-битное целое число в 16-битное значение? ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Самый эффективный способ обернуть 32-битное целое число в 16-битное значение?
Anonymous » » в форуме C++ - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Самый эффективный способ обернуть 32-битное целое число в 16-битное значение?
Anonymous » » в форуме C++ - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Самый эффективный способ обернуть 32-битное целое число в 16-битное значение?
Anonymous » » в форуме C++ - 0 Ответы
- 23 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как преобразовать 16-битное двоичное число в целое число со знаком в Java
Anonymous » » в форуме JAVA - 0 Ответы
- 40 Просмотры
-
Последнее сообщение Anonymous
-