
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.217.4] |
![]() |
|
Сообщ.
#1
,
|
|
|
Поскажите алгоритм временного сжатия/растяжения сигнала(звука). Зараннее благодарен
|
Сообщ.
#2
,
|
|
|
Линейное интерполирование! - быстро и сердито!
|
Сообщ.
#3
,
|
|
|
А в случае сжатия просто выбрасывать часть отсчетов?
|
Сообщ.
#4
,
|
|
|
Цитата Joss @ А в случае сжатия просто выбрасывать часть отсчетов? Вообще не знаю, но точно могу сказать, что если будешь выбрасывать то не избежать потери качества звука... |
Сообщ.
#5
,
|
|
|
Цитата Joss @ Лучше уж как-то усреднять сжимаемые фрагменты А в случае сжатия просто выбрасывать часть отсчетов? |
Сообщ.
#6
,
|
|
|
При таком подходе изменяется тональность звука, т.е. при растяжении голос становится более низким, при сжатии - высоким. Как избавиться от этого эффекта?
|
![]() |
Сообщ.
#7
,
|
|
Я краем уха слышал, что помогает делать преобразование Фурье, и затем на его основе генерировать сигнал с тем же набором частот, но бОльшей длительности. Сам я этим никогда не занимался, но могу предположить, что процесс состоит из следующих частей:
1. поделить сигнал на маленькие блоки 2. сделать Фурье каждого блока 3. сгенерировать на их основе сигнал бОльшей длительности, чем у оригинального блока 4. как-то "склеить" границы блоков, чтобы не было слышно щелчков. насколько я знаю, человеческий слух нечувствителен к фазе колебаний, только к частоте/амплитуде, так что можно попробовать двигать фазы для достижения эффекта... всё это очень приблизительно, т.к. область не моя |
Сообщ.
#8
,
|
|
|
Цитата Joss @ Это же спектр только расширит.. Как раз вот это и получится:А в случае сжатия просто выбрасывать часть отсчетов? Цитата Joss @ При таком подходе изменяется тональность звука, т.е. при растяжении голос становится более низким, при сжатии - высоким. Подход shadeofgray здесь мне кажется более действенным. |
Сообщ.
#9
,
|
|
|
Цитата Rikkie @ Это же спектр только расширит.. Я, честно гогворя, и представлял себе растяжение/сжатие сигнала как сжатие/растяжение спектра. А результат не совсем такой... Цитата shadeofgray @ 3. сгенерировать на их основе сигнал бОльшей длительности, чем у оригинального блока Будем получать периодическую последовательность отсчетов! |
Сообщ.
#10
,
|
|
|
Цитата ors_archangel @ Линейное интерполирование! - быстро и сердито! Нельзя так просто. Нужно кроме собственно интерполяции произвести цифровую фильтрацию. |
Сообщ.
#11
,
|
|
|
Цитата gena_dj @ Нужно кроме собственно интерполяции произвести цифровую фильтрацию. А именно? |
Сообщ.
#12
,
|
|
|
Цитата gena_dj @ Нельзя так просто. Нужно кроме собственно интерполяции произвести цифровую фильтрацию. В принципе, линейная интерполяция - вид цифровой фильтрации, но, может быть, gena_dj, ты имеешь в виду препроцессинг? Честно говоря, не представляю, что бы это могло быть. |
Сообщ.
#13
,
|
|
|
странно, что вы задаете это вопрос в этом форуме, а не в "обработке звука" или "речевых технологиях"
итак, при увеличении/уменьшении скорости воспроизведения (что эквивалентно сжатию/растяжению) частоты также сдвигаются - становятся во столько раз ниже/выше во сколько раз изменили скорость. Тем не менее, мы наблюдаем, что многие медиаплейеры умеют ускорять/замедлять воспроизведение (в разумных пределах) так, чтобы голос и музыка не становились писклявыми или растянутыми. Такие медиаплейеры не просто изменяют скорость воспроизведения, они манипулируют с основным тоном сигнала. Идея (похожая на ту, что с БПФ была представлена выше) заключается в том, чтобы разбить сигнал на кусочки, где сигнал более-менее стационарен (не особенно меняется) и повторять эти кусочки (если нужно замедлить) или выбрасывать их (если нужно ускорить) добиваясь так сжатия/растяжения сигнала. Однако, грубое применение этого метода приведет к проблемам с основным тоном - ухо очень чувствительно к его изменению и если выбирать кусочки так, что туда будут попадать нецелые куски основного тона, это будет неприятно. Выход в том, чтобы выбирать кусками, например, периоды основного тона или использовать алгоритмы типа PSOLA |
Сообщ.
#14
,
|
|
|
Цитата ors_archangel @ gena_dj, ты имеешь в виду препроцессинг В принципе, да - ФНЧ высокого порядка такой, что после "растяжения" звукового фрагмента подавляются высокочастотные вомпоненты выше предельной частоты звукового. К примеру, пусть исходная частота дискретезации сигнала, к примеру, F_0=48000Гц. После "растяжения" мы получаем звуковой фрагмент с большей частотой дискретезации F_1>F_0, но воспроизводим на прежней частоте. Отсюда эффект "растяжения". Нужно отфильтровать частоты выше чем F_0^2/(2*F1). "Сжатие" фрагмнта эквивалентно случаю F_1<F_0. Критерий фильтрации тот же. Здесь можно сначала применить up-sampling, потом фильтрацию, потом down-sampling до нужной частоты. По поводу сжатия/растяжения без изменения основного тона. Здесь действительно используются повторы фрагментов. Выбирается частота повтора ~несколько десятков Гц. Для устранения разрывов на границах блоков используется частичное перекрытие блоков. |
Сообщ.
#15
,
|
|
|
Разобрался, спасибо всем за советы!
|