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

 
 
6 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Цифровой Фильтр на ATmega, Цифровой Фильтр на ATmega
Goodefine
сообщение Sep 18 2009, 22:22
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 208
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581



Я это уже проделывал. Основное отличие - фильтр начинает колбасить сразу же, еще до подачи сигналов...


--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 18 2009, 22:26
Сообщение #17


фанат дивана
******

Группа: Свой
Сообщений: 3 260
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Да, засадаsmile.gif
А long пробовали?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Goodefine
сообщение Sep 18 2009, 22:30
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 208
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581



Вот Long не пробовал, только сейчас - то же самое... Ща возьму гарантированно рабочий фильтр с флоат коэффициентами и посмотрю...


--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 18 2009, 22:42
Сообщение #19


фанат дивана
******

Группа: Свой
Сообщений: 3 260
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Есть ещё одна мысль. Я не совсем понял, откуда взялся минус перед всеми игреками вот тут:
Цитата(SasaVitebsk @ Sep 18 2009, 01:45) *
Y коэф. будут выглядеть так
-(-1.875*Y1+2*Y2-1.0625*Y3+0.3125*Y4) =

Может его не надо?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Goodefine
сообщение Sep 18 2009, 22:52
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 208
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581



Чет не едут у меня лыжи sad.gif С флоатами хрень какая-то - время выполнения короче чем int-ми.. Где-то засада (никогда их не пользую)...
Насчет минуса - появится если всю сумму Yi приравнять к нулю и вынести Y0... А правильно это или нет - надо глубже смотреть...


--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 18 2009, 23:16
Сообщение #21


фанат дивана
******

Группа: Свой
Сообщений: 3 260
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Goodefine @ Sep 19 2009, 04:52) *
Чет не едут у меня лыжи sad.gif С флоатами хрень какая-то - время выполнения короче чем int-ми.. Где-то засада (никогда их не пользую)...


Но хоть заработало? smile.gif

А с минусом оказывается всё в порядке, там в хелпе написано:
Цитата
y(n)=( a0*x(n)+a1*x(n-1)+a2*x(n-2) ) – ( b1*y(n-1) + b2*y(n-2) )


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Goodefine
сообщение Sep 18 2009, 23:43
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 208
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581



Цитата(AHTOXA @ Sep 19 2009, 02:16) *
Но хоть заработало? smile.gif

Не-а, не хочет он с включенной оптимизацией считать
Код
Y0=0.00625*(X0+X4)-0.125*X2 + 1.875*Y1-2*Y2 + 1.0625*Y3 -0.3125*Y4;

ну не может за 1,25мкс он это просчитать. Сходу не пойму где грабли sad.gif
А с выключенной - 129мкс, чуть более 125мкс sad.gif В любом случае 2,5В на выходе smile3046.gif


--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Go to the top of the page
 
+Quote Post
dimka76
сообщение Sep 19 2009, 04:15
Сообщение #23


developer
****

Группа: Свой
Сообщений: 822
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(Goodefine @ Sep 19 2009, 03:43) *
Не-а, не хочет он с включенной оптимизацией считать
Код
Y0=0.00625*(X0+X4)-0.125*X2 + 1.875*Y1-2*Y2 + 1.0625*Y3 -0.3125*Y4;

ну не может за 1,25мкс он это просчитать. Сходу не пойму где грабли sad.gif
А с выключенной - 129мкс, чуть более 125мкс sad.gif В любом случае 2,5В на выходе smile3046.gif


А вы по ассемблеру посмотрите.
А с флоатами лучше не связываться.
Я как-то делал генератор синуса, так с флоатами амплитуду колебаний потехоньку возрастала , сделал с фиксированной точкой 1:15 и амплитуда четко стояла (сутки гонял).


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Sep 20 2009, 20:33
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 2 704
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Эээээ...
Результат обсуждения меня не порадовал. laughing.gif

Я вам давал не теорию и не практику, а методику. Вы должны проследить и... сделать любой. А соответственно найти ошибки в моём. smile.gif Я ведь на бумаге всё это писал. Тем не менее там всё правильно... И нет никаких заморочек с компилятором.

1) Если вы посмотрите АЧХ фильтра, то вы поймёте что результат работы при строке
Код
X0=(int)ADCW-512;
и при строке
Код
X0=(int)ADCW;
должен быть одинаков! Фильтр вычитает постоянную составляющую.

2) Если бы я, для того чтобы проверить работу фильтра каждый раз ваял такую схему ... biggrin.gif
Нет конечно, респект и уважуха, но вы же всётаки прграммисты. smile.gif У них подход попроще .... biggrin.gif
Я написал для себя приложение в билдере по принципу ГКЧ и тестирую свой фильтр целиком, причём если надо, то использую нужные мне размерности переменных. Потом целиком эту прогу вырезаю и вставляю в IAR. Когда прочитал вашу бучу, то проанализировал.
Скажем так... smile.gif была неточность, но не в фильтре. Можно было и так как я выложил, но нужна небольшая коррекция. Вопрос какая?

Прикладываю фильтр, вырезанный из проги и результат тестирования. smile.gif
Код
    x4=x3;
    x3=x2;
    x2=x1;
    x1=x0;
    x0=ADC;

    y4=y3;
    y3=y2;
    y2=y1;
    y1=y0;

    tek16 = y1>>3;
    tek16 += x0+x2-y2;
    tek16 >>= 1;
    tek16 += x0+x2-x1+y1-y2;
    tek16 >>= 1;
    tek16 += y1-x1;

    y0 = tek16;


Затестите на своей чудо машинке. Ну и найдите причину хомута. sad.gif
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Goodefine
сообщение Sep 21 2009, 13:45
Сообщение #25


Местный
***

Группа: Свой
Сообщений: 208
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581



Цитата(SasaVitebsk @ Sep 20 2009, 23:33) *
Эээээ...
Результат обсуждения меня не порадовал.Я вам давал не теорию и не практику, а методику. Вы должны проследить и... сделать любой. А соответственно найти ошибки в моём. Я ведь на бумаге всё это писал. Тем не менее там всё правильно...

Если Вы восприняли мой пост как критику в адрес своей методики, то спешу заверить, что это совершенно не так. Дело было поздно ночью, когда легко проглядеть ньюанс, подобный потерянному здесь... Тот случай - когда вроде все правильно, но не работает. Поэтому, собственно, вопрос и последовал...
Цитата(SasaVitebsk @ Sep 20 2009, 23:33) *
2) Если бы я, для того чтобы проверить работу фильтра каждый раз ваял такую схему ...
Нет конечно, респект и уважуха, но вы же всётаки прграммисты. У них подход попроще ....
Я написал для себя приложение в билдере по принципу ГКЧ ...

Ну, имхо, модель простейшая и ваяется быстро, при определенных навыках - copy/paste smile.gif Когда под рукой нет необходимого инструментария для работы с цифровыми фильтрами - так тоже неплохо - плюс время выполнения в железе оценить можно, и подумать сколько звеньев поставить получится...
Цитата(SasaVitebsk @ Sep 20 2009, 23:33) *
Когда прочитал вашу бучу, то проанализировал...

Подымать бучу и в мыслях не было, уж извините если так получилось..
Цитата(SasaVitebsk @ Sep 20 2009, 23:33) *
Скажем так... была неточность, но не в фильтре. Можно было и так как я выложил, но нужна небольшая коррекция. Вопрос какая?

Неточность легко ищется незамыленным глазом: читаем хелп:
Цитата
y(n)=( a0*x(n)+a1*x(n-1)+a2*x(n-2) ) – ( b1*y(n-1) + b2*y(n-2) )

И ключевая Ваша фраза:
Цитата
Я упрощу выражение и вместо X(i-1) буду писать X1 и так далее....

следование которой и привело к неточности: X(n-4) стал Х4, а Xn -> X0 (и т.д.). А привязка коэфф. не изменилась. В то время как X4 (если его номер рассматривать как порядковый номер следования отсчета во времени) на самом деле Xn. Иными словами перепутались коэффициенты с отсчетами. То же самое и с Yi. при этом следует еще учесть, что выход - это Y4. Тогда код фильтра будет такой:
Код
X4=X3;
X3=X2;
X2=X1;
X1=X0;
X0=(int)ADCW;

Y0=Y1;
Y1=Y2;
Y2=Y3;
Y3=Y4;

Temp = (X4+X0+Y1-Y0)>>1;
Temp -= X2+Y3;
Temp >>= 1;
Temp -= Y0;
Temp >>= 2;
Temp +=((Y3-Y2)<<1)+Y1;

Y4=Temp;

PORTD= (unsigned char) ((Y4+512)>>2);

Т.е. видно, что крайние Xi и Yi поменялись местами соответственно (X4<->X0,Y4<->Y0 и т.д.).
Цитата(SasaVitebsk @ Sep 20 2009, 23:33) *
Затестите на своей чудо машинке...

Затестил. работает. Только хочу заметить, что АЧХ фильтра не такая как на картинке - если верить модели, работает это скорее как ФВЧ, где - то от 400 Гц - далее подъем и спад до 3кГц почти не заметен...
А что касается первоначального фильтра - тоже работает, после исправлений - там частота резонанса около 1336,9 Гц... Откуда так точно? Все просто, иногда (не всегда) после снятия сигналов, фильтр звенит на этой частоте. Звон правда достаточно малый - амплитуда около 0,02В (одна градация ЦАПа). Спад АЧХ возле этой частоты заметен на глаз, что называтся... Вот как то так...
Еще раз спасибо Вам, что потратили свое время на очевидные объяснения..


--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Sep 21 2009, 20:27
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 2 704
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Goodefine @ Sep 21 2009, 16:45) *
Затестил. работает. Только хочу заметить, что АЧХ фильтра не такая как на картинке - если верить модели, работает это скорее как ФВЧ, где - то от 400 Гц - далее подъем и спад до 3кГц почти не заметен...


smile.gif
Так я и выбрал фильтр собственно весьма пологий. Да ещё и всего-лишь 3-его порядка.
Мне кажется, что людям было-бы интересно узнать сколько "завесил" такой фильтр. Сколько он отъел ресурсов.

Я, в свою очередь хотел бы отметить, что полосовой фильтр 5-го порядка легко реализуется на 1.8МГц при частоте выборки 6800 вместе с ФНЧ и перемножением сигнала. smile.gif AVR при этом кушает менее 1ма.
Go to the top of the page
 
+Quote Post
_Ie0nid
сообщение Sep 22 2009, 04:58
Сообщение #27


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 20-09-08
Пользователь №: 40 344



здраствуйте, простите за то что долго не было, и за глупые вопросы.

Вы привели формулу, которую я пытался понять с помощью каких то физических принципов, в результате натыкался на точно такие же формулы.

Первое: мне объясняли принцип действия цифрового фильтра и она заключается в следующем. Допустим первая выборка равна 8, вторая 8, затем третья равная 10, четвертая равная 8, и пятая снова 8. Если на третью приходилась высокочастотная составляющая, и мы ее в соответствующем такте уменьшаем с соответствующим коэффициентом усиления (например отрицательным), то поучается ФНЧ. Если я не прав то поправьте пожалуйста, потому как:,

второе: судя по рисункам которые приводятся в книгах, и по формуле которую привел SASAVITEBSK (за что огромное спасибо, навила хоть на мысли),

Y(i) = X(i) + 0.875Y(i-1) - X(i-1),

каждая последующая выборка еще раз преобразуется по следующему закону, а затем еще раз по следующему, а затем складывается с текущими. И это кажется странным, потому как если высокачстотная составляющая была большой, она так самой большой и пройдет, если не прав прошу поправить потому как:,

третье: Я примерно прикинул формулу на бумажке, она действительно убирает постоянную составляющую, если сигнал постоянный, каждая последующая выборка на выходе будет стремится к нулю. Крутизна фильтра я так понимаю определяется количеством членов формулы (полинома?). А вот коэффициент ослабления? И потом как синтезировать такую формулу исходя из нужного фильтра. Например ФНЧ, или ФВЧ.

И наконец, четвертое. В схемах фильтра нарисован сумматор, можете объяснить его физический смысл. Если мы складываем два аналоговых сигнала с разными частотами (например две палки спектра), мы получаем сигнал с этими двумя палками. Если мы складываем выборки в разные такты мы получаем просто число. Или же весь смысл этого сумматора (и вообще всех кубиков в структуре фильтра) в том, чтобы подобрать такую формулу, чтобы она выполняла нужную для нас манипуляцию с выборками (то есть нужную АЧХ).
Заранее спасибо.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Sep 22 2009, 10:00
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 2 704
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(_Ie0nid @ Sep 22 2009, 07:58) *
Вы привели формулу, которую я пытался понять с помощью каких то физических принципов, в результате натыкался на точно такие же формулы.

Если вы пытаетесь разобраться в теории, тем более в теории цифровой фильтрации задавая простые вопросы на форуме, то это тупик. Здесь вы единственное, что можете узнать это название книги и имя автора. А далее - только читать. Если не понимаете - берёте другую книгу, читаете несколько раз и так до момента просветления. smile.gif
Цитата
Первое: мне объясняли принцип действия цифрового фильтра и она заключается в следующем. Допустим первая выборка равна 8, вторая 8, затем третья равная 10, четвертая равная 8, и пятая снова 8. Если на третью приходилась высокочастотная составляющая, и мы ее в соответствующем такте уменьшаем с соответствующим коэффициентом усиления (например отрицательным), то поучается ФНЧ. Если я не прав то поправьте пожалуйста, потому как:,

bb-offtopic.gif
Попытка на пальцах объяснить теорию, насчитывающую тома - это глупость. Вы уж извините, не хочу никого обидеть. Я не являюсь знатоком теории фильтрации, но тем не менее убеждён, что попытка упрощения до уровня домохозяйки, даёт только ложные представления. Результат мы видим повсеместно, когда комбайнёты и директора колхозов становятся руководителями страны. Хотите стать проффессионалом в своём деле - попробуйте им стать.
Цитата
второе: судя по рисункам которые приводятся в книгах, и по формуле которую привел SASAVITEBSK (за что огромное спасибо, навила хоть на мысли),

Y(i) = X(i) + 0.875Y(i-1) - X(i-1),

каждая последующая выборка еще раз преобразуется по следующему закону, а затем еще раз по следующему, а затем складывается с текущими. И это кажется странным, потому как если высокачстотная составляющая была большой, она так самой большой и пройдет, если не прав прошу поправить потому как:,

В той программе, которую я выкладывал - есть HELP, как это не странно. Там есть формула. А то что выше я привёл как прикол. Она как раз не очень ложится на теорию. Тем не менее действительно работает. Я её выдрал из какого-то апнота TI. Её АЧХ можно посмотреть той же прогой, что я прикладывал.
Цитата
третье: Я примерно прикинул формулу на бумажке, она действительно убирает постоянную составляющую, если сигнал постоянный, каждая последующая выборка на выходе будет стремится к нулю. Крутизна фильтра я так понимаю определяется количеством членов формулы (полинома?). А вот коэффициент ослабления? И потом как синтезировать такую формулу исходя из нужного фильтра. Например ФНЧ, или ФВЧ.

Формула определяется не типом сигнала, а типом выбранного фильтра. Например в той проге которую я приложил используется фильтр Батерворта. Если запустить знаменитый QED2000, то там этих фильтров - море. А в теории ещё больше. Каждый фильтр имеет свои особенности. Например некоторые имеют минимальные фазовые искажения и т.д. Формула для каждого из этих фильтров уже определена задолго до того, как вы задумались на эту тему. Сама формула представляет собой полином. Прикладная же задача состоит в том, чтобы исходя из характеристик фильтра и частоты дискретезации выбрать коэффициенты полинома и подставить в уже готовую формулу. В этом, как правило помогают готовые программы. Например та же QED или та, что привёл я. Я же рассказывал методику как довести коэффициенты до программы. smile.gif То есть всё это теории ни грамма не касается. Ни каким боком.
Цитата
И наконец, четвертое. В схемах фильтра нарисован сумматор, можете объяснить его физический смысл. Если мы складываем два аналоговых сигнала с разными частотами (например две палки спектра), мы получаем сигнал с этими двумя палками. Если мы складываем выборки в разные такты мы получаем просто число. Или же весь смысл этого сумматора (и вообще всех кубиков в структуре фильтра) в том, чтобы подобрать такую формулу, чтобы она выполняла нужную для нас манипуляцию с выборками (то есть нужную АЧХ).
Заранее спасибо.

Книги и ещё раз книги.
Go to the top of the page
 
+Quote Post
Goodefine
сообщение Sep 22 2009, 10:35
Сообщение #29


Местный
***

Группа: Свой
Сообщений: 208
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581



Цитата(SasaVitebsk @ Sep 21 2009, 23:27) *
Мне кажется, что людям было-бы интересно узнать сколько "завесил" такой фильтр. Сколько он отъел ресурсов...

При уровне оптимизации -03 (по скорости) тело фильтра занимает 68 байт и выполняется, при тактовой частоте 16384000 Гц примерно за 3мкс. При периоде в 125мкс (8000кГц) это занимает не более 2.5% процессорного времени. Откуда видно, что при снижении тактовой до 1Мгц еще не менее 50% времени останется... При оптимизации по размеру, время незначительно увеличивается, а размер незначительно уменьшается. Ток потребления неизвестен (модель), но существуют широкие возможности для его уменьшения

Цитата(_Ie0nid @ Sep 22 2009, 07:58) *
...И наконец, четвертое. В схемах фильтра нарисован сумматор, можете объяснить его физический смысл...

Сумматором можете не заморачиваться. Он там только для того, чтобы арифметически правильно сложить сигналы с разными частотами....


--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Sep 22 2009, 10:52
Сообщение #30


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 586
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(_Ie0nid @ Sep 22 2009, 08:58) *

Учите матчасть.
Кстати, цифровыми методами можно синтезировать физически нереализуемый фильтр rolleyes.gif
Так что физический смысл в цифровой фильтрации искать бесполезно.

Кстати, забавная задачка на вшивость, на которой я засыпался на зачёте:
Входной аналоговый сигнал -> АЦП -> ЦАП -> Выходной аналоговый сигнал
Как будут различаться спектры входного и выходного сигнала?
(для простоты, разрядность и частота дискретизации ЦАП и АЦП совпадают)


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post

6 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2017 - 07:05
Рейтинг@Mail.ru


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