Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Фурие преобразуване за микроконтролери
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=10318
Страница 1 от 1

Автор:  stoyanoff [ Съб Юли 14, 2012 8:46 am ]
Заглавие:  Фурие преобразуване за микроконтролери

Здравейте!
Имам следния проблем - трябва да измервам променлива величина(по-принцип е синусоидална, но освен това товарът я разделя на импулси, т. е. не консумира постоянно), но ако всяко измерване на АЦП ми дава различен резултат. Та идеята ми е да измеря няколко стойности една след друга, през определен интервал(дискретизация) и после с някакъв метод(примерно преобразуване на Фурие) да намеря ефективната стойност. Мисля, че трябва да се получи добре. Някой разполага ли с функцията, която взима числата от масива и ги обработва до ефективна стойност. Виждал съм го някъде, но не мога да го намеря.
Ще се радвам и на мнения дали има смисъл от тая цялата галимация(дали ще върши работа, ако го е ползвал някой).
Поздрави!

Автор:  Пушека [ Съб Юли 14, 2012 9:57 am ]
Заглавие:  Re: Фурие преобразуване за микроконтролери

Фурието не върши баш това мисля. По определение ефективното е модул от площа на кривата/ периода. Сумирай всички Н броя отчети в един период и ги раздели на Н.

Автор:  БатеВаньо [ Съб Юли 14, 2012 2:40 pm ]
Заглавие:  Re: Фурие преобразуване за микроконтролери

Наистина, Фурие преобразуването няма да помогне. Най-добре е да решиш задачата първо на лист хартия, а след това да я вкарваш в контролера.
Условието не е много добре дефинирано и може да има няколко разновидности:
1) Искаш да измериш ефективната стойност на "накъсания" сигнал или на оригиналната синусоида
2) Интервалите на прекъсване са много кратки в сравнение с периода на синусоидата, или по-големи от него
3) Прекъсванията са асинхронни с периода или синхронни с него (например, тока след триак)

Та сега, ако искаш да измериш просто ефективната стойност на накъсания сигнал, както Пушека каза, сумираш квадратите на N отчета, делиш на N и вземаш квадратен корен.

Ако искаш да възстановиш оригиналната синусоида, тогава нещата стават по-сложни. Със сигурност Фурие-то не става за тази цел тъй като при него също важи Закона за запазване на енергията. Т.е., сумата от енергиите на всички хармоници на изхода е равна на енергията на входния сигнал. Тъй като накъсаният сигнал има доста хармоници, то основният тон ще е по-нисък от ефективната стойност на входния сигнал, т.е. твърде далече от истината.
Ако накъсванията са несинхронни с периода на сигнала, може да направиш следното - от събраните отчети да отделиш само тези, които са по-големи по абсолютна стойност от някакво delta. Идеята е да отсееш прекъсванията.
Разбира се, така ще отсееш също и истинските нули на синусоидата, затова трябва да разделиш сумата на квадратите не на броя на "добрите" отчети M, а на M*(1+2*asin(delta/A)/PI), където A е амплитудата на сигнала. Може да се изпозва и това, че при |x|<<1 asin(x)~x и да се опростят изчисленията. От там нататък методът е просто изчисляване на ефективна стойност чрез сумата на квадратите.

А, ако прекъсванията са синхронни с периода, тогава нещата загрубяват. Единственото, което ми идва на ум в този случай, е да се отделят непрекъснатите интервали на сигнала и да се опиташ да ги интерполираш с парчета от синусиодална функция, на която определяш амплитудата по метода на най-малките квадрати. Но при малки отрязъци точността на интерполация едва ли ще бъде добра.

Автор:  ToHu [ Нед Юли 15, 2012 12:59 am ]
Заглавие:  Re: Фурие преобразуване за микроконтролери

Не бъдете толкова тесногърди като говорим за фурие, търси FFT има доста нещо из мрежата, освен за по тривиалнинеща съм виждал да го изпозлват за какво ли не още, примерно корелация.

Автор:  БатеВаньо [ Нед Юли 15, 2012 9:26 am ]
Заглавие:  Re: Фурие преобразуване за микроконтролери

Не става въпрос да го отказваме човека да потърси нещо. За FFT има тонове код - кой платформено независим, кой оптимизиран за малки процесори. Ако контролерът е Cortex M3 - такива библиотеки има на сайтовете на NXP и ST, има в DSP библиотеката на IAR, а дори един чех беше написал оптимизирани библиотеки на асемблер (линкът не ми е подръка, но имаше дискусия за него в STM32 форума на ST).
Работата е там, че дори Фурие-то не е магия и не може да даде повече от това, което му е подадено на входа. А тъй като, дори и оптимизирано си е тежък алгоритъм, има и по-ефективни начини за пресмятане на ефективна стойност.

Автор:  Cekins [ Нед Юли 15, 2012 1:14 pm ]
Заглавие:  Re: Фурие преобразуване за микроконтролери

True RMS... Колегите говорят за такова нещо. x=sqrt(sum(А1^2, А2^2,...,Аn^2)/n). Има два начина - намират се чипове които аналогово го правят това и после няма нужда от софт. Другия начин си е със сметка в проца. Там вече зависи до колко (бързо) можеш да смяташ и дали е необходима висока скорост. Има и трети вариант ама той не е много верен и ако имаш положителни и отрицателни стойности съвсем няма да е верен - с най-обикновен RC. Варианта с RC е аналогичен на средноаритметичното ако се смята със сметалката.

Автор:  FiTTiLA [ Пон Юли 16, 2012 1:04 pm ]
Заглавие:  Re: Фурие преобразуване за микроконтролери

Офтопик ...

http://www.technologyreview.com/article ... transform/

Автор:  relsys [ Пон Юли 16, 2012 4:07 pm ]
Заглавие:  Re: Фурие преобразуване за микроконтролери

http://www.mikroe.com/download/eng/documents/compilers/mikroc/pro/dspic/help/fft_library.htm?TB_iframe=true&height=740&width=970

Избери си само процесора и компилатора който искаш....

Автор:  Cekins [ Пон Юли 16, 2012 7:37 pm ]
Заглавие:  Re: Фурие преобразуване за микроконтролери

Еййй, не знаех че имат и такава библиотека. Нещо мноо разточителни ми се струват обаче библиотеките за 24-ки и dsPIC. За други не съм пробвал. Пробах да напиша една програма с вгадени библиотеки за LCD, I2C, SPI, ADC и разни други. И ми изплю има няма 15к код само за библиотеките. Това дето ми трябваше реално го събрах в 1,5 к с писане предимно на асемблер.

Автор:  relsys [ Пон Юли 16, 2012 9:00 pm ]
Заглавие:  Re: Фурие преобразуване за микроконтролери

Цеко, стига бе, дръж се прилично. Другите 254.5 к, за к'во са ти свободни?!?
Няма как нещо да е универсално и гъвкаво, че и да работи и да е малко по обем. Твоите писаници със сигурност няма вървят навсякъде. Уважавай труда на хората, и без друго няма други подобни системи в световен мащаб, да не коментираме и цената...

Автор:  Cekins [ Пон Юли 16, 2012 9:10 pm ]
Заглавие:  Re: Фурие преобразуване за микроконтролери

Аве тъпото в цялата работа е че уж поръчах със 128к пък се оказа 64к и установих че така както тръгна да ми яде флаша, няма начин да ми стигне :) От там насетне всичко стана спортна злоба от типа "аз моа ли или не моа?". Много ме подразни дето настройката на I2C модула гълта 1к. Не знам обръщал ли си внимание как се конфигурират цифровите комуникационни модули - има някви процедури за пресмятане на клока и после смята кви да са регистрите. Това изяжда доста. Логично е като съм задал работна честота на чипа от настройките на проекта, да си ги сметне като макрос и после само да ги компилира като няколко команди. Да ама не. Смятат се в чипа нещата. Сега като го знам че гълта, направо вземам с 512к и няма да се занимавам с глупости. Иначе за другото си абсолютно прав - спор няма че са супер и то на тая цена. Ама и това дето съм си го написал безпробелм ще си работи на голяма част от 24-ките. Е сигурно само аз ше мога да си ги ползвам но това е друга тема.

Автор:  stoyanoff [ Пет Юли 27, 2012 1:03 pm ]
Заглавие:  Re: Фурие преобразуване за микроконтролери

Цеко, тия неща, които правиш са добри, но в днешно време не е важно една програма само да е бърза, а да е удобно да се работи с нея и лесно да се нагажда. Тия асемблери дето си ги писал абсурд някой да седне да бърка в тях и да променя(то сигурно и ти няма да се навиеш). Направи си библиотеката по-голяма, но лесно четима! А като ползваш само част от нея за един контролер всичко ще е ОК!
Сега по темата - тоя метод(с повдигането на квадрат и после корен квадратен) работи доста добре. Само малко нагаждане трябва, че тук така пак варира. Това не съм го правил сигурно от 3-4 години като писахме протоколи по физика в ТУ. За това не се сетих.
Благодаря за идеята!

Автор:  Cekins [ Пет Юли 27, 2012 1:14 pm ]
Заглавие:  Re: Фурие преобразуване за микроконтролери

Че кой е казал някой да ги чете. Тя като си бачка библиотеката за къв чеп ми е после да я ръчкам. Камо ли пък някой друг. Между другото баш в тия библиотеки превъзмогнах гадния си навик да не пиша коментари. Ако ми се наложи да ги чета поне знам кво съм натворил :)

Тоя метод си е така наречения RMS и масово си се ползва пресмятане на такива неща.

Автор:  Пушека [ Пет Юли 27, 2012 7:09 pm ]
Заглавие:  Re: Фурие преобразуване за микроконтролери

То и като го правиш целочислено квадратите и корените отпадат, само едното събиране и делене остава. Бе в асемблера е истината, ако да ни викат мазохисти. :-D

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/