реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Передискретизация аудио на доли %
akorud
сообщение Jan 12 2012, 11:28
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842



Здравствуйте,
появилась тут проблема: на входе дано 2 потока аудио с частотой дискретизации 32kHz, с независимых источников.
На практике частоты естественно несколько отличаются - например 32.05 и 31.95.
Надо привести их к одной частоте дискретизации. Изменением высоты звука можно пренебречь.
Единственное, что пока приходит в голову - взять одну из них за опорную, а в другой поток вставлять нули / выбрасывать отсчеты (в моменты когда ризница набежит на период дискретизации) и пропустить потом через ФНЧ 16kHz.
Что скажете? Имеет право на жизнь?
Go to the top of the page
 
+Quote Post
SPACUM
сообщение Jan 12 2012, 12:51
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 161
Регистрация: 22-06-09
Из: Москва
Пользователь №: 50 531



Цитата(akorud @ Jan 12 2012, 15:28) *
Здравствуйте,
появилась тут проблема: на входе дано 2 потока аудио с частотой дискретизации 32kHz, с независимых источников.
На практике частоты естественно несколько отличаются - например 32.05 и 31.95.
Надо привести их к одной частоте дискретизации. Изменением высоты звука можно пренебречь.
Единственное, что пока приходит в голову - взять одну из них за опорную, а в другой поток вставлять нули / выбрасывать отсчеты (в моменты когда ризница набежит на период дискретизации) и пропустить потом через ФНЧ 16kHz.
Что скажете? Имеет право на жизнь?

Можно интерполировать синками - несколько отсчетов около требуемого представить как сумму sin(x)/x. Теоретически увеличивая количество включенных отсчетов можно добиться любой точности.
Вобщем качество аудио определяется методом экспертных прослушиваний. Так что реализуйте все, что придет в голову, может и Вашего метода выбрасывания или вставления точек будет достаточно даже без фильтра. Вопрос качества аудио сигнала очень субьективен.


--------------------
Ты можешь знать все что угодно, но пока ты не доказал это на практике, ты не знаешь ничего!© Ричард Бах
Go to the top of the page
 
+Quote Post
petrov
сообщение Jan 12 2012, 13:00
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937



Цитата(akorud @ Jan 12 2012, 15:28) *
Что скажете? Имеет право на жизнь?


ИМХО стыдно так грубо делать. :)
Go to the top of the page
 
+Quote Post
akorud
сообщение Jan 12 2012, 13:29
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842



Цитата(petrov @ Jan 12 2012, 14:00) *
ИМХО стыдно так грубо делать. sm.gif

Ну, гордость инженерская конечно протестует, но надо сделать быстро, в режиме hot-fix. И втиснуть в существующий дизайн ПЛИС, так что с математикой не особо разгуляешься. Ну и воспроизводить это будет телевизор, так что даже колонок-мониторов для тестирования не купишь под проект sm.gif
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 12 2012, 14:39
Сообщение #5


.
******

Группа: Участник
Сообщений: 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


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
soldat_shveyk
сообщение Jan 12 2012, 16:23
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 454
Регистрация: 3-07-07
Из: С-Петербург
Пользователь №: 28 859



Можно сделать так: проинтерполировать оба сигнала например на N. Интерполировать честно, с КИХ-фильтром.
После интерполяции получите увеличенную частоту дискретизации N*32 кГц.
Затем от правильного таймера формируете правильные 32 кГц, и по его тактам выхватываете отсчеты из обоих интерполированных сигналов.
При этом ошибка уменьшится до величины 1/(N*32 кГц.)
При экономной реализации можно вычислять только те полифазы КИХ-интерполятора, на которые указывает правильный таймер 32 кГц.
Go to the top of the page
 
+Quote Post
akorud
сообщение Jan 12 2012, 16:38
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842



Цитата(soldat_shveyk @ Jan 12 2012, 17:23) *
Можно сделать так: проинтерполировать оба сигнала например на N. Интерполировать честно, с КИХ-фильтром.
После интерполяции получите увеличенную частоту дискретизации N*32 кГц.
Затем от правильного таймера формируете правильные 32 кГц, и по его тактам выхватываете отсчеты из обоих интерполированных сигналов.
При этом ошибка уменьшится до величины 1/(N*32 кГц.)
При экономной реализации можно вычислять только те полифазы КИХ-интерполятора, на которые указывает правильный таймер 32 кГц.

Спасибо за идею. Сейчас сажусь за симуляции, посмотрим что из этого получится.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 13 2012, 12:38
Сообщение #8


.
******

Группа: Участник
Сообщений: 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


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
sysel
сообщение Jan 13 2012, 13:59
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 3-07-07
Пользователь №: 28 852



Есть такая штука "Asynchronous Sample Rate Converter". Не знаю как работает, но техас предлагает:
http://www.ti.com/product/src4392
Go to the top of the page
 
+Quote Post
akorud
сообщение Jan 15 2012, 20:25
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 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 (по результат симуляции) и звук идеальный.
Еще раз спасибо за идею.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 09:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01438 секунд с 7
ELECTRONIX ©2004-2016