|
|
  |
Передискретизация аудио на доли % |
|
|
|
Jan 12 2012, 12:51
|
Частый гость
 
Группа: Участник
Сообщений: 161
Регистрация: 22-06-09
Из: Москва
Пользователь №: 50 531

|
Цитата(akorud @ Jan 12 2012, 15:28)  Здравствуйте, появилась тут проблема: на входе дано 2 потока аудио с частотой дискретизации 32kHz, с независимых источников. На практике частоты естественно несколько отличаются - например 32.05 и 31.95. Надо привести их к одной частоте дискретизации. Изменением высоты звука можно пренебречь. Единственное, что пока приходит в голову - взять одну из них за опорную, а в другой поток вставлять нули / выбрасывать отсчеты (в моменты когда ризница набежит на период дискретизации) и пропустить потом через ФНЧ 16kHz. Что скажете? Имеет право на жизнь? Можно интерполировать синками - несколько отсчетов около требуемого представить как сумму sin(x)/x. Теоретически увеличивая количество включенных отсчетов можно добиться любой точности. Вобщем качество аудио определяется методом экспертных прослушиваний. Так что реализуйте все, что придет в голову, может и Вашего метода выбрасывания или вставления точек будет достаточно даже без фильтра. Вопрос качества аудио сигнала очень субьективен.
--------------------
Ты можешь знать все что угодно, но пока ты не доказал это на практике, ты не знаешь ничего!© Ричард Бах
|
|
|
|
|
Jan 12 2012, 14:39
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(akorud @ Jan 12 2012, 16:28)  Единственное, что пока приходит в голову - взять одну из них за опорную, а в другой поток вставлять нули / выбрасывать отсчеты (в моменты когда ризница набежит на период дискретизации) и пропустить потом через ФНЧ 16kHz. Появится НЧ помеха с разницей опорных частот, которая не отфильтруется ФНЧ. Особенно при вставлении нуля. При выбрасывании отсчёта или если вместо вставки нуля просто не менять предыдущее значение, будет та же помеха, но с меньшей амплитудой. Вроде интермодуляция называется по-научному. Цитата(akorud @ Jan 12 2012, 16:28)  например 32.05 и 31.95. Относительно этих значений будет 100 гц помеха. Ниже 20 гц наверное "прокатило" бы.
Сообщение отредактировал GetSmart - Jan 12 2012, 14:39
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jan 12 2012, 16:38
|
Местный
  
Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842

|
Цитата(soldat_shveyk @ Jan 12 2012, 17:23)  Можно сделать так: проинтерполировать оба сигнала например на N. Интерполировать честно, с КИХ-фильтром. После интерполяции получите увеличенную частоту дискретизации N*32 кГц. Затем от правильного таймера формируете правильные 32 кГц, и по его тактам выхватываете отсчеты из обоих интерполированных сигналов. При этом ошибка уменьшится до величины 1/(N*32 кГц.) При экономной реализации можно вычислять только те полифазы КИХ-интерполятора, на которые указывает правильный таймер 32 кГц. Спасибо за идею. Сейчас сажусь за симуляции, посмотрим что из этого получится.
|
|
|
|
|
Jan 13 2012, 12:38
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(soldat_shveyk @ Jan 12 2012, 21:23)  Можно сделать так: проинтерполировать оба сигнала например на N. Интерполировать честно, с КИХ-фильтром. После интерполяции получите увеличенную частоту дискретизации N*32 кГц. Затем от правильного таймера формируете правильные 32 кГц, и по его тактам выхватываете отсчеты из обоих интерполированных сигналов. При этом ошибка уменьшится до величины 1/(N*32 кГц.) Можно кое-что уточнить? Это же примерно тот же алгоритм, что и в первом посте, но только на несущих частотах в N раз больших? И опора независимая, в то время как у ТС была одна из несущих.
Сообщение отредактировал GetSmart - Jan 13 2012, 12:38
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jan 15 2012, 20:25
|
Местный
  
Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842

|
Цитата(soldat_shveyk @ Jan 12 2012, 17:23)  Можно сделать так: проинтерполировать оба сигнала например на N. Интерполировать честно, с КИХ-фильтром. После интерполяции получите увеличенную частоту дискретизации N*32 кГц. Затем от правильного таймера формируете правильные 32 кГц, и по его тактам выхватываете отсчеты из обоих интерполированных сигналов. При этом ошибка уменьшится до величины 1/(N*32 кГц.) При экономной реализации можно вычислять только те полифазы КИХ-интерполятора, на которые указывает правильный таймер 32 кГц. Все получилось. Сделал так - в качестве опорного таймера использовал частоту дискретизации первого сигнала и с ним ничего не делал. А второй - как выше. Причем при N = 32 уровень интермодуляций получился порядка -40dB и можно было услышать искажения. При N = 256 (x32 FIR + x8 CIC, порядок FIR-интерполятора 2000) интермодуляции <-60dB (по результат симуляции) и звук идеальный. Еще раз спасибо за идею.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|