Приветствую Вас, Гость! Регистрация RSS

RockBox for aleXmod

Вторник, 16.04.2024
Главная » 2011 » Сентябрь » 23 » Ресемплинг - моделирование
20:27
Ресемплинг - моделирование
Чтобы так сказать расставить точки над и решил смоделировать два подхода к ресемплингу  (линейная интерполяция и заполнение новых отсчетов нулями) и сравнить как они влияют на частотный спектр сигнала.

Для минимизации времени вычислений взял исходный сигнал в  частотном диапазоне  - 0 - 1024 Гц при частоте семплирования 2048 Гц - это рабочий диапазон частот. Использовался вектор в 2048 отсчетов. Разрешающая способность частотного спектра при этом получается 1 Гц. Соответсвенно ресемплинг делал в 4096 Гц.

Для того чтобы оценить как оба метода модифицируют частотный спектр использовал два сигнала -

  • Вариант А - Набор из четырех синусоид разной фазы и амплитуды
  • Вариант Б - Белый шум, ограниченный только сегментом частот 0-1024 Гц - чтобы не нарушать теорему Шенона.



Исходный сигнал синтезировал из предварительно созданного частотного спектра. Для варианта а) все значения частот, кроме заданных равны нулю, для варианта б) все амплитудные значения имеют одну величину, при этом значения фазы заполнялось случайно в диапазоне от -Пи до +Пи. Далее к полученному спектру применялось обратное преобразование Фурье, на выходе соответственно имеем зависимость амплитуды от времени.

Далее обработка состояла из шагов:

  • Ресемплинг исходного сигнала с линейной интерполяцией и с заполнением новых отсчетов нулями
  • Для полученных сигналов и для исходного сигнала вычислялся частотный спектр путем прямого преобразования Фурье
  • Делалось вычитание спектра полученных сигналов из исходного, полученная разность спектров выводилась на график

Вычитание спектров означает что из  амплитудного значения каждой частоты ресемпленного сигнала вычиталось амплитудное значение  той же частоты исходного сигнала.

Также нужно понимать что ресемпленный сигнал имеет спектр в два раза шире базового, тоесть потенциально может содержать частоты до 2048 Гц в моем случае. Соответственно вычитание производится только в той области ресемпленого спектра где есть общие частоты. область 1025-2048 Гц модифицированного сигнала показана без изменений.

Результат показан на графиках ниже.

Вариант  A:

спектр - 4 частоты

Я увеличил частоту 950 Гц для сравнения:

спектр 950 Гц - увеличено

Здесь видно, что:

  1.  В диапазоне 1025-2048 Гц:
  • Линейная интерполяция - зеркальное отражение спектра относительно 1024 Гц с затуханием амплитуды по мере удаления от оси симметрии
  • Заполнение нулями  - зеракльное отражетие спектра относительно 1024 Гц без затухания
  1.  В диапазоне 0-1024 Гц :
    •  Линейная интерполяция - исходный пик частоты как-бы размывается - становится шире в основании и меньше по амплитуде. Конечно-же увеличение ширины пика говорит о появлении новых частот, которых в исходном сигнале нет.
    • Заполение нулями - спектр идентичен исходному
    • Чем выше частота тем более значительно "размытие" спектра
Теперь покажу как меняется спектр в случае белого шума, сигнал Б):

спектр белого шума
Вот. Теперь факты

  1. Линейная интерполяция при ресемплинге приводит к искажению спектра исходного сигнала в рабочем диапазоне частот, при этом при увеличении частоты амплитуда спектра спадает
  2. Заполнение нулями при ресемплинге не модифицирует рабочий диапазон частот, при этом в "верхнем" диапазоне 1025-2048 Гц имеем спектр большой плотности (площадь под кривой).
Выводы
  1.  Линейную интерполяцию (как и любую другую) делать нельзя. Она искажает спектр рабочего диапазона частот, подобные искажения нельзя исправить применением фильтров. Да и вообще не вижу способа как это можно исправить.
  2. Заполнение нулями не приводит к изменениям в рабочем диапазоне. Это хорошая новость. Плохая новость в том что сразу за рабочим диапазоном вырисовывается жесткий спектр который нужно как-то фильтровать.
Следующий шаг - проектирование фильтра и проверка его на модели. 
Просмотров: 1348 | Добавил: andreyk72 | Рейтинг: 5.0/1
Всего комментариев: 6
6 Reapleblalaws  
0
очень интересно, спасибо

3 Alex_Nsk  
0
ТЫ же приводишь расчетные картинки, насколько я понимаю. А в реалии мы имеем ЦФ встроенный в PCM1794 который как раз продукты алиазинга удалит эффективно. Кроме того, можно увести спектр помех еще выше введя не 1 нулевое значение между отсчетами а 3, или 5, проведя т.н. 4х или 6х передискретизацию. Или мы не можем из-за железных ограничений разогнать тактовую до таких величин?

4 andreyk72  
0
Дело в том что ЦФ встроенный в PCM1794 будет следовать частоте семплирования - подадим 88200, будет фильтровать то что выше 44100, пропуская всё от 22050 до 44100 как есть.

88200 - максимум который можем выжать исходя из частоты кварца установленного в X5.

Есть здесь одна мысль по поводу фильтра, сейчас проверяю... Не все так печально вобщем ))

5 defaultNick  
0
Кстати, когда же отзыв будет ? ))

2 andreyk72  
0
Да, точно линейная интерполяция. Заполнение нулями можно реализовать если хотите, только вот фильтр нормальный похоже не сделать. Конечно если забить на тот факт что ВЧ выше 20 кГц будет переть на усилитель наушников и далее то можно прожить и так, но это не правильный подход...

1 AfArt  
0
А у нас в RB точно линейная интерполяция, а не заполнение нулями?
Просто картинки, что я успел снять показывают, как-раз появление спектра большой плотности выше рабочего диапазона (недольшой спад может быть вызван работой аналогового фильтра мода "
Quote ('Alex_Nsk;888031')
Аналоговый ФВЧ настроен на частоту около 50кГц.
").
Может попробовать провести ещё раз замеры по предложенной вами методике - изложенной выше или новой?

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]