Перейти к содержанию
    

Цифровой Фильтр на ATmega

но дело даже не в постоянной составляющей, например ...

Делаем смещение на 128 ...

Вот именно -все дело в ней, в постоянной составляющей :) эти 128 на которые смещён сигнал -это и есть постоянная составляющая, которую обычно добавляют специально, чтобы корректно оцифровать знакопеременный сигнал.

Делая вычитание 128 Вы удаляете эту постоянку :)

Проблема в том, что точно Вы не знаете какая именно постоянка присутствует на входе АЦП, поэтому иногда сначала накладывают ФВЧ, который ее удаляет в силу своей природы, а потом уже делают все остальные преобразования с сигналом. Теперь понятно, что для этого удобнее работать со знаковыми (signed) переменными.

Но и сигнал тогда на вход двухполярный нужен, операционник с двуполярным питанием, как то так, ну ессно смещение в половину AREF,

Ну это если АЦП у Вас в контроллере позволяет работать с двуполярным сигналом (чаще бывает диф.вход,т.е сигнала подается два - полезный со смещением и собственно смещение (или если хотите парафазные сигналы), при этом оба сигнала однополярные, что гораздо проще реализуется в кристаллах, ну и смещение удаляется автоматически самим АЦП).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да не АЦП однополярный, делаем смещение и ввиду того что сигнал двуполярный он будет играть около точки смещения.

 

И тогда получается что

 

adc=ADCL,

if (adc<128) {

x=-(128-adc),

}

else

x=adc-128,

Изменено пользователем RedD

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И тогда получается что

 

adc=ADCL,

if (adc<128) {

x=-(128-adc),

}

else

x=adc-128,

Да можно проще :)

signed char x;
x = ADCL - 128;

 

И еще, без использования аналогового АРУ 8 бит для оцифровки звука будет слишком мало. Я бы ориентировался на 12 бит (в крайнем случае 10).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да можно проще :)

signed char x;
x = ADCL - 128;

 

И еще, без использования аналогового АРУ 8 бит для оцифровки звука будет слишком мало. Я бы ориентировался на 12 бит (в крайнем случае 10).

 

x = ADСL - 128; да проще,

 

Напрашивается мысль смещение вычислять автоматически, ну не знаю, допустим при включении, или используя второй канал АЦП,

Хотя если хорошо застабилизировать цепь смещения, то и так никуда не денется

 

Про то что 8 бит мало, это понятно, но обкатать можно и на 8 битах,

 

Кстати у 8 бит avr, тоже есть инструкция ASR ....

Изменено пользователем RedD

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А понял, если наложить ФВЧ то и получим смещение, ....

Но накладно по ресурсам, можно взять резистор 50кОм, подключить к АЦП, заблокировать на корпус ну 10тью МКФдами, и другим каналом мерить,

благо их у avr как минимум восемь.

 

А усиление ослабление как делать правильно? Через коэффициенты передачи фильтров или напрямую можно ?

 

По эквалайзеру ....

 

Сделал три полосовых фильтра с перекрытием в 30 процентов в полосе 0,3 - 3,4 кГц, НЧ, СЧ, ВЧ, для каждого фильтра свой Кус,

int Kus1,Kus2,Kus3;

Прогоняем сигнал через фильтра, каждую полосу или усиливаем или ослабляем или не трогаем Кus=1.

Получаем Y1,Y2,Y3 - выходные данные фильтров,

 

Y1=Y1*Kus1;

Y2=Y2*Kus2;

Y3=Y3*Kus3;

 

 

Правильно ли будет что

 

Y0=Y1||Y2||Y3, где Y0 общий выходной сигнал ?

 

По компрессору ...

В статье которую я приводил формула SPL такая

 

X(n)=10log((1/m)*((Сумма i=0,m-1)X2[n-1])

 

Может я чего не понял, но это формула работает только для положительных значений adc, так х в квадрате.

 

Как быть ?????????

 

И еще много вопросов )

 

А лана со знаком понятно нужно умножить на (x(n)/x(n)), да и есть более удачный вариант ....

Изменено пользователем RedD

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) Да как Вам удобней, так и делайте.

2) Y0=Y1||Y2||Y3 а это что? перемножение по модулю? или логическое "или"? :biggrin: не знаю, я бы просто сложил.

3) Не понял о какой статье идет речь.

но это формула работает только для положительных значений adc, так х в квадрате
Да ладно?! (+5) и (-5) в квадрате это не одно и то же? :wacko:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ок )

 

Возми в студенты а ? Вторую вышку хочу получить !

Изменено пользователем Herz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прошу прощение. А не проще ли использовать аппаратный перемножитель (если конечно таковой присутствует в камне). Просто интересно где то год назад делал простенький ПФ 2-рого порядка на MSP430. Точно во сколько он тактов вылез не скажу (не помню). Но возник вопрос не проще, если имеется аппаратный перемножитель с накоплением использовать его, предворительно сместив коэффициенты в целочисленную область. А учитывая что в том же MSP430 два 16-ти разрядных регистра и 32 разрядный аккумулятор то по моему это прямо конфэтка :yeah: (там кажется 2 такта всего на перемножение с суммированием уходит). Поругайте если не прав.

 

PS. Ох помню тогда намучился с переносом коэффициентов в целочисленную область (но благо для фильтра это делается 1 раз).

 

И еще подскажите где можно почитать про реализацию кольцевых буферов (особенно заинтересовало про размещение буфера по определенным адресам (в чем преимущество)) и на какие грабли при этом можно наступить.

Изменено пользователем IMaxI

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А учитывая что в том же MSP430 два 16-ти разрядных регистра и 32 разрядный аккумулятор

У автора какбы не совсем MSP430 :)

А так да, штука полезная, у Silabs тоже есть в некоторых камнях встроенный МАС (multiple and accumulate), правда на 40 бит (32 по моему опыту не хватает даже для фильтра 4го порядка -например данные 16 бит, коэфф.тоже 16 бит -это уже 32, плюс сумма нескольких слагаемых - и вот уже переполнение). Чем хорош предложенный тут метод -он сразу ограничивает разрядность данных уже при умножении на коэффициент, поэтому для сумматора можно использовать переменные небольшой разрядности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не хотел новую тему создавать, а можно загрузить tetris for led display AVR ?

Ну и есть под Turbo C 3.2 Dos (отладочная),

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Друзья здравствуйте. Если кому не сложно, помогите.

Может есть у кого код простого ФВЧ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, Evgeni said:

Друзья здравствуйте. Если кому не сложно, помогите.

Может есть у кого код простого ФВЧ?

Нет, но есть

 

http://www.winfilter.20m.com/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...