Как очистить спектр от паразитных частот?
- Войдите на сайт для отправки комментариев
Есть такая вещь - программируемый фильтр MAX261. https://datasheets.maximintegrated.com/en/ds/MAX260-MAX262.pdf
Нужно заставить его работать в диапазоне звуковых частот.
Собственно, фильтр устроен так, что его резонансная частота в определенное количество раз (назовем К) меньше, чем частота тактирования. К можно задавать программно в диапазоне одной октавы. Нас интересует режим при котором К изменяется в диапазоне примерно от 100 до 200. Существенным является и то, что внутри фильтра тактовый сигнал делится вдвое.
Если посмотреть осциллограмму обработанного фильтрм сигнала, она окажется состоящей из ступенек, чередующихся как раз на половине частоты тактирования. Т.е. в спектр добавляются как сама половинная частота тактирования, так и суммарно-разностные частоты между ней и частотами, присутствующими в спектре входного сигнала.
Отсюда возникает проблема: если половинная частота тактирования выше, грубо говоря, 40 кГц, а спктр входных частот обрезан по границе 20 кГц, - все в порядке и спектр выходного сигнала не засоряется лишними частотами. А вот если хотя бы одно из условий нарушается, в звуке оказываются составляющие, которых там быть не должно.
А фактически это происходит, как только частота фильтра становится ниже 400 Гц (при К=200 частота тактирования становится 40 кГц).
В настоящее время звуковой тракт выглядит следующим образом:
1. Формирователь прямоугольного сигнала звуковой частоты переменной сважности (16-разрядный иаймер Ардуино).
2. Делитель напряжения, включающий простой RC-фильтр на 20 кГц.
3. Фильтр MAX261.
4. Делитель напряжения.
5. Программируемый усилитель.
Кто может порекомендовать какие способы борьбы с лишними частотами?
Когда я сталкиваюсь со всякими непростыми аналоговыми делами, каждый раз думаю о том, что хорошо бы было как-нибудь подобраться к ПЛМ/FPGA. Там тебе и скоростные АЦП и цифровые КИХ/БИХ фильтры и еще всякой хрени, назначение которой мне совершенно непонятно. Но посмотришь на ценники и успокаиваешься. Желание, вот так взять и заняться изучением всего этого дела, стремительно исчезает само. :)
Когда я сталкиваюсь со всякими непростыми аналоговыми делами, каждый раз думаю о том, что хорошо бы было как-нибудь подобраться к ПЛМ/FPGA. Там тебе и скоростные АЦП и цифровые КИХ/БИХ фильтры и еще всякой хрени, назначение которой мне совершенно непонятно. Но посмотришь на ценники и успокаиваешься. Желание, вот так взять и заняться изучением всего этого дела, стремительно исчезает само. :)
Где-то у белорусов видел собственное производство FPGA. По параметрам не ахти что, но для освоения - вполне себе. Вроде ценник был не особо страшный. Поискать ссылку? Заодно отечественному производителю поможем :)
Как-то я не особо рассчитываю на отечественного производителя, если честно. На харбре были несколько статей по отечественному арму и там же упоминались цены. Выходило, что за цену одного здесь, можно купить три десятка там. Не приувеличиваю. При такой экономической подоплеке, излишняя поддерка отечественного производителя будет вредна, прежде всего, ему самому -- лишать стимула для повышения собственной конкурентоспособности.
Вряд ли белорусы делают эти устройства для рынка. Насколько я знаю - они штампуют для OEM. Делают все то, что устарело и никто больше не производит, но спрос еще есть.
Ограничение спектра входного сигнала - непременное условие правильного функционирования цифровых фильтров. У топикстартера оно не выполняется при перестройке фильтра вниз. Как вариант решения, в пункте 2 RC-фильтр на 20 кГц сделать с переключением частоты которым управлять с той же Ардуины.
Как-то я не особо рассчитываю на отечественного производителя, если честно.
Ну, та самая ссылка мне случайно подвернулась, гляньте-таки, если не лень.
Мои ПЛИСуны отказались, сказали, что для наших задач не тянет.
Ограничение спектра входного сигнала - непременное условие правильного функционирования цифровых фильтров. У топикстартера оно не выполняется при перестройке фильтра вниз. Как вариант решения, в пункте 2 RC-фильтр на 20 кГц сделать с переключением частоты которым управлять с той же Ардуины.
Спасибо.
Собственно, меня интересовали два вопроса:
1. Есть ли другие варианты?
2. Что делать, когда частота управляющего сигнала сама попадает в звуковой диапазон.
Пока решение вижу примерно так:
1. На резонансных частотах ниже 800 Гц (половина тактирующей частоты от 40 до 80 кГц в зависимости от коэффициента деления) из подходящих коэффициентах деления предпочтение отдается вблизи 200.
2. На резонансной частоте 400 Гц (половина тактирующей частоты 40 кГц) подключается дополнительный конденсатор, обеспечивыающий частоту среза 1600-2000 Гц.
3. На резонансной частоте 200 Гц (20 кГц) к делителю (п.4) подключается дополнительный конденсатор, обеспечивающий частоту среза 800-1000 Гц.
4. Ограничить нижнее значение резонансной частоты 40 Гц-ами (вместо планировавшихся изначально 20 Гц).
Реализация планируется http://arduino.ru/forum/apparatnye-voprosy/budet-li-rabotat-fnch
Хотельсь бы услышать мнения по этому поводу.
А толку? Их же просто так не купить.
Ну, та самая ссылка мне случайно подвернулась, гляньте-таки, если не лень.
Не слишком приятно наблдюать оффтопик в своей теме, но раз уж зашла речь, в свое время наткнулся на https://marsohod.org/howtostart/plata , но разбираться не пытался.
А толку? Их же просто так не купить.
да, не вопрос, если надо - купим (может и даром сэмплы можно взять, но не уверен, как в Минск поеду, могу узнать)
Не слишком приятно наблдюать оффтопик в своей теме
Простите ради Бога, бес попутал.
На мой взгляд для корректной работы такой реализации в пин к которому подключается конденсатор надо подать смещающий постоянный ток величиной в несколько раз больше чем ток через делитель.
На мой взгляд для корректной работы такой реализации в пин к которому подключается конденсатор надо подать смещающий постоянный ток величиной в несколько раз больше чем ток через делитель.
Мысль понятная, но я не очень представляю себе, как ее реализовать.
Допустим, в рабочем состоянии у нас пин находится в активном состоянии с "0" на выходе. А смещающий ток втекает в этот пин через резистор, подключеннй к "+U". Я правильно понимаю?
Т.е. нога конденсатора находится под напряжением около 0 вольт (чуть больше, но это не важно).
Теперь мы отключаем пин Ардуины, переводя его в высокоимпедансное состояние. Резистор быстро заряжает конденсатор, подтягивая его ногу к +5 В. На выходе в этот момент получаем отчетливый щелчок.
При включении пина Ардуина на выход (перевод в низкоимпедансное состояние) - снова щелчок, только обратной полярности.
Или я что-то не понимаю?
Простите ради Бога, бес попутал.
Да ладно...
Гораздо хуже, когда ТС в своей теме является единственным писателем :).
жизнь и так коротка ....
Вот бухтели тут про офтопики, а мне кажется, что именно с подачи данной ветки я начал присматриваться и к FPGA и к PSoC-ам. Листая интернеты на эту тему, я обнаружил нечто, что могло бы вызвать ваш интерес, т.к. подходит очень близко в вопросам, вами заданным.
На сайте кипариса я приглядел одну хрень, которая при цене $10 имеет на борту уж очень дофига всего для таких денег.
Это отладочная плата CY8CKIT-059, которая состоит из программатора, как я понял, слева и самой PSoC справа. PSoC это процессор Cortex-M3 (80мгц), просто какая-то нереальная прорва встроенной периферии (таймеры, интерфейсы, операционники, компараторы, АЦП/ЦАП, генераторы и хрен пойми что), плюс массив UDB -- универсальных цифровых блоков. Последнее -- это что-то типа программируемой логической матрицы, только некоего крупноблочного вида. Из данных боков можно построить множество разнообразной цифровой фигни, в том числе и для обработки оцифрованного аналогового сигнала. На таких блоках, например, реализованы те самые цифровые фильтры, которые я тут уже упоминал ранее -- КИХ и БИХ. Эти блоки можно сконфигурировать так, что они сядут прямо на выход дельта-сигма АЦП, который умеет оцифровывать аудио с разрешением 16 бит и частотой 48кгц. Блоки цифровой обработки умеют через DMA гнать цифровой поток наружу через один из интерфейсов по выбору. Другими словами, можно настроить оцифровку, навороченную фильтрацию, прочую постобработку и выдачу потока наружу без участия процессора.
Вся эта хрень конфигурируется через специальную сотину, которая в наглядном виде представляет внутреннее устройство чипа и задает характеристики и соединения рзличных блоков:
Не знаю, насколько это вас может заинтересовать, но на всякий случай решил поделиться.
PS. Сейчас прибежит Лукумыч и завопит, что теперь я торгую кипарисом в разнос.
Теперь мы отключаем пин Ардуины, переводя его в высокоимпедансное состояние. Резистор быстро заряжает конденсатор, подтягивая его ногу к +5 В. На выходе в этот момент получаем отчетливый щелчок.
При включении пина Ардуина на выход (перевод в низкоимпедансное состояние) - снова щелчок, только обратной полярности.
Или я что-то не понимаю?
Щелчки присутствуют в любых кустарных коммутаторах. Чтобы их свести к минимуму необходимо коммутацию осуществлять специализированной микросхемой именно для этого и предназначенной а уже ей управлять с Ардуино. На вскидку, коммутаторы типа одноканального SA630, 4-канального 74HC4066.
Давайте отличать щелчки, которые "всегда присутствуют" от щелчков, которые создаются искусственно и, притом, имеют амплитуду равную напряжению питания.
В конце концов, коммутируемый конденсатор находися до управляемого усилителя, а полезный сигнал обладает маскирующим действием. Поэтому щелчка при простой коммутации я не слышу, а при коммутации со смещением - слышу отчетливо.
Можно, конечно, резистор смещения с другого конца тоже подключать к ноге Ардуино, которой управлять срнхронно с первой, но устанавливать, например, "1" вменсто "0". Но как-то мне этот вариант не очень нравится. Да и количество ног на 2560 меге не безгранично - мне уже приходится часть периферии подключать через сдвиговые регистры.