Есть аналоговый сигнал, оцифрованный с частотой 8 тысяч раз в секунде. Точнее говоря есть уже цифра. Существуют ли алгоритмы, которые позволяют увеличить частоту до 16 тысяч семплов в секунду?
То есть грубо говоря есть поток данных с битрейтом 64К в секунду (8000 семплов, 8 бит на каждый семпл). Нужно увеличить семпл рейт до 16000. Можно ли такое сделать?
Conversion from 8000 to 16000 sample rate
-
- Уже с Приветом
- Posts: 9392
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
-
- Уже с Приветом
- Posts: 4379
- Joined: 20 Jun 2001 09:01
Donadio, M., "Cascaded Integrator-Comb (CIC) Filter Introduction," http://www.dspguru.com/info/tutor/cic.htm
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Re: Conversion from 8000 to 16000 sample rate
shadow7256 wrote:Есть аналоговый сигнал, оцифрованный с частотой 8 тысяч раз в секунде. Точнее говоря есть уже цифра. Существуют ли алгоритмы, которые позволяют увеличить частоту до 16 тысяч семплов в секунду?
То есть грубо говоря есть поток данных с битрейтом 64К в секунду (8000 семплов, 8 бит на каждый семпл). Нужно увеличить семпл рейт до 16000. Можно ли такое сделать?
На случай, если речь идет об аудио для видео, мне попался OPENVIP с sourceforge (работает и под Юниксом и под Виндами) . Вот это описание похоже на то, что вам нужно:
http://openvip.sourceforge.net/userdoc/ch02s02.html
Resample
Changes the sampling frequency of input audio.
GUI dialog description
The dialog allows to choose new sampling frequency (in Hz) and the type of interpolation used during resampling (nearest neighbor is quick, while linear interpolation reduces the danger of alias effects).
Cабина
PS. Обратите внимание на эту фразу while linear interpolation reduces the danger of alias effects. Может имеет смысл написать просто "connecting the dots" программку, а не мудрить со всеми этими сложными алгоритмами?
Найквист все-таки знал, что говорил
-
- Уже с Приветом
- Posts: 9392
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
Сабина,
Просто соединить точки не получится все же. Если бы все так было просто, то не существовало бы разных методов, которые все же пытаются сделать то, что мне надо
Ведь здесь идет речь чисто о догадке. Есть два числа, 0 и 255 допустим. Тебе говорят, что между этими числами должно быть еще одно, а вот какое - догадайся. Если сказать , что будет 127, то может быть ты и угадаешь, но вероятность этого сами видите насколько мала. А если не угадаешь, то внесешь в сигнал помехи, которые уж точно не нужны. Просто интересно насколько существующие методы могут довольно точно предсказать какое значение должно идти после какого. Если методы неэффективны, то ну их нафиг
Просто соединить точки не получится все же. Если бы все так было просто, то не существовало бы разных методов, которые все же пытаются сделать то, что мне надо
Ведь здесь идет речь чисто о догадке. Есть два числа, 0 и 255 допустим. Тебе говорят, что между этими числами должно быть еще одно, а вот какое - догадайся. Если сказать , что будет 127, то может быть ты и угадаешь, но вероятность этого сами видите насколько мала. А если не угадаешь, то внесешь в сигнал помехи, которые уж точно не нужны. Просто интересно насколько существующие методы могут довольно точно предсказать какое значение должно идти после какого. Если методы неэффективны, то ну их нафиг
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
shadow7256 wrote:Просто соединить точки не получится все же. Если бы все так было просто, то не существовало бы разных методов, которые все же пытаются сделать то, что мне надо
Вот именно вопрос в том для чего вы уменьшаете шаг дискретизации? Ведь там же ясно говорится, что линейная интерполяция (соединить две соседние точки и взять амплитуду посередине) уменьшает вероятность возникновения эффекта зеркальных частот.
То есть может получится, что погонитесь за качеством, а получите наоборот.
Сабина
-
- Уже с Приветом
- Posts: 4379
- Joined: 20 Jun 2001 09:01
Сабина,
Вы рассмотрели два простейших варианта:
1) - взять ближайшую точку (слева или справа) - nearest neighbor
2) - линейная интерполяция
Есть тысяча и один способ повысить аккуратность интерполяции как во временной так и в частотной области, как для целочисленного коеффициента преобразования рейта так и для произвольного дробного. Для целочисленного преобразованиая равного двум, простейший метод состоит в системе состоящей из трех блоков:
1 - повторитель сигнала (analog/[digital-to-analog] discrete time signal) с более высоким рейтом (sampling rate expander)
2 - низкочастотный фильтр с граничной частотой пи/2, с коеффициентом усиления 2 (FIR filter)
3 - оцифровка с более высоким рейтом
Если исходная частота оцифровки существенно выше частоты Найквиста для исходного аналогового сигнала (oversampled system) - линейная интерполяция вполне подойдет, поскольку сам сигнал не будет меняться быстро на промежутке интерполяции.
Другой подход (чисто программный, без оглядки на реализацию) состоит в непосредственной интерполяции во временной области - наиболее простой и еффективный метод - испольование Эрмитовых кубических изогеометрических сплайнов.
Вы рассмотрели два простейших варианта:
1) - взять ближайшую точку (слева или справа) - nearest neighbor
2) - линейная интерполяция
Есть тысяча и один способ повысить аккуратность интерполяции как во временной так и в частотной области, как для целочисленного коеффициента преобразования рейта так и для произвольного дробного. Для целочисленного преобразованиая равного двум, простейший метод состоит в системе состоящей из трех блоков:
1 - повторитель сигнала (analog/[digital-to-analog] discrete time signal) с более высоким рейтом (sampling rate expander)
2 - низкочастотный фильтр с граничной частотой пи/2, с коеффициентом усиления 2 (FIR filter)
3 - оцифровка с более высоким рейтом
Если исходная частота оцифровки существенно выше частоты Найквиста для исходного аналогового сигнала (oversampled system) - линейная интерполяция вполне подойдет, поскольку сам сигнал не будет меняться быстро на промежутке интерполяции.
Другой подход (чисто программный, без оглядки на реализацию) состоит в непосредственной интерполяции во временной области - наиболее простой и еффективный метод - испольование Эрмитовых кубических изогеометрических сплайнов.
-
- Уже с Приветом
- Posts: 11475
- Joined: 20 Nov 2000 10:01
- Location: Escondido, CA
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA