Страница 1 из 1
Формулы для получения звука сирены
Добавлено: Пн июн 08, 2020 13:11:30
STARпёр
Всем привет!
Самоизоляция, свободное время... Модельки автомобилей...
Решил сделать сирену на микроконтроллере. Даже работает, но форму сигнала приходится выдавать по таблице.
В итоге при низком тоне слышна ступенчатость тона, т.е. он не плавно меняется, а как будто перещёлкивается всё ниже и ниже.
Вывод по таким значениям:
И вот задался вопросом... а нет ли формулы по которой можно было бы просчитать такой сигнал и выдавать более плавные изменения?
Никому не наводят на мысли такие графики? Может кто-то навскидку подкинет формул?
Re: Формулы для получения звука сирены
Добавлено: Пн июн 08, 2020 14:16:34
Ivanoff-iv
а линейно интерполировать? не? я набором фомул вида
x0<x<x1: y=k0x+b0
x1<x<x2: y=k1x+b1
x2<x<x3: y=k2x+b2
только в bn подставляю значение обеспечивающее непрерывность функции (это несложная математика)
даже синус вполне правдоподобный рисовал...
Добавлено after 1 minute 30 seconds:
да это будет ломаная... зато без ступенек, но на слух это будет неощутимо в отличие от ступенек.
Re: Формулы для получения звука сирены
Добавлено: Пн июн 08, 2020 15:03:45
El-Eng
Если есть опорные точки, хорошо подойдет, например, интерполяция
полиномом Лагранжа, его довольно легко считать.
Re: Формулы для получения звука сирены
Добавлено: Пн июн 08, 2020 15:31:17
STARпёр
El-Eng
Интересный вариант, но я так понимаю нужны переменные с плавающей точкой, для простых МК может оказаться туго пересчёт делать в реалтайме...
Re: Формулы для получения звука сирены
Добавлено: Пн июн 08, 2020 16:06:47
El-Eng
STARпёр писал(а):... я так понимаю нужны переменные с плавающей точкой...
Вообще-то не обязательно, все зависит от порядка и коэффициентов полинома. Но и в операциях с плавающей точкой нет ничего ужасного: интервал между изменением тона вряд ли нужен меньше 10 миллисекунд, для AVR с тактовой частотой в 10 МГц это порядка 50000 команд, считая в среднем по 2 такта на команду, - этого вполне хватит, чтобы спокойно считать полином 2-3 (а, скорее всего, и большего) порядка, еще и на другие операции останется.
Я бы посоветовал попробовать в лоб, скажем, на Ардуино, благо там и контроллер уже готов, и язык С есть.
P.S. Можно и не связываться с полиномами. Если закодировать ступень изменения тона одним байтом, то на 10-секундный интервал без повторений с шагом в 10 миллисекунд уйдет 1 килобайт памяти - не так уж и много.
Re: Формулы для получения звука сирены
Добавлено: Пн июн 08, 2020 16:29:14
STARпёр
[uquote="El-Eng",url="/forum/viewtopic.php?p=3852251#p3852251"]вполне хватит, чтобы спокойно считать полином 2-3 (а, скорее всего, и большего) порядка.[/uquote]
Да, как вариант. Ещё плюс такой конструкции в том, что табличных точек надо меньше. И можно экспериментировать со звуками двигая точки. Благодарю за идею!
Хотя конечно поглядеть на формулу для таких сигналов интересно посмотреть, вдруг кто сталкивался)
Re: Формулы для получения звука сирены
Добавлено: Пн июн 08, 2020 16:53:11
El-Eng
STARпёр писал(а):Благодарю за идею!
Пожалуйста!
