Я пишу код 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++
Программы на C++. Форум разработчиков
1735953070
Anonymous
Я пишу код 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[i];
in *= gain;
while(in > 32767){
in -= 65536;
}
while(in < -32768){
in += 65536;
}
block->data[i] = in;
}
transmit(block);
release(block);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79327506/most-efficient-way-to-wrap-32-bit-integer-to-16-bit-value[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия