Отговори на тема  [ 14 мнения ] 
Фурие преобразуване за микроконтролери 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

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

_________________
www.elkran.com


Съб Юли 14, 2012 8:46 am
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пон Апр 16, 2012 9:05 pm
Мнения: 182
Мнение Re: Фурие преобразуване за микроконтролери
Фурието не върши баш това мисля. По определение ефективното е модул от площа на кривата/ периода. Сумирай всички Н броя отчети в един период и ги раздели на Н.


Съб Юли 14, 2012 9:57 am
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Чет Яну 04, 2007 12:43 am
Мнения: 178
Мнение Re: Фурие преобразуване за микроконтролери
Наистина, Фурие преобразуването няма да помогне. Най-добре е да решиш задачата първо на лист хартия, а след това да я вкарваш в контролера.
Условието не е много добре дефинирано и може да има няколко разновидности:
1) Искаш да измериш ефективната стойност на "накъсания" сигнал или на оригиналната синусоида
2) Интервалите на прекъсване са много кратки в сравнение с периода на синусоидата, или по-големи от него
3) Прекъсванията са асинхронни с периода или синхронни с него (например, тока след триак)

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

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

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


Съб Юли 14, 2012 2:40 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение Re: Фурие преобразуване за микроконтролери
Не бъдете толкова тесногърди като говорим за фурие, търси FFT има доста нещо из мрежата, освен за по тривиалнинеща съм виждал да го изпозлват за какво ли не още, примерно корелация.


Нед Юли 15, 2012 12:59 am
Профил
Ранг: Новодошъл
Ранг: Новодошъл

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


Нед Юли 15, 2012 9:26 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

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


Нед Юли 15, 2012 1:14 pm
Профил ICQ
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Сря Май 11, 2005 3:47 pm
Мнения: 534
Мнение Re: Фурие преобразуване за микроконтролери
Офтопик ...

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


Пон Юли 16, 2012 1:04 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 25, 2005 11:41 am
Мнения: 1680
Мнение Re: Фурие преобразуване за микроконтролери
http://www.mikroe.com/download/eng/documents/compilers/mikroc/pro/dspic/help/fft_library.htm?TB_iframe=true&height=740&width=970

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


Пон Юли 16, 2012 4:07 pm
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: Фурие преобразуване за микроконтролери
Еййй, не знаех че имат и такава библиотека. Нещо мноо разточителни ми се струват обаче библиотеките за 24-ки и dsPIC. За други не съм пробвал. Пробах да напиша една програма с вгадени библиотеки за LCD, I2C, SPI, ADC и разни други. И ми изплю има няма 15к код само за библиотеките. Това дето ми трябваше реално го събрах в 1,5 к с писане предимно на асемблер.


Пон Юли 16, 2012 7:37 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 25, 2005 11:41 am
Мнения: 1680
Мнение Re: Фурие преобразуване за микроконтролери
Цеко, стига бе, дръж се прилично. Другите 254.5 к, за к'во са ти свободни?!?
Няма как нещо да е универсално и гъвкаво, че и да работи и да е малко по обем. Твоите писаници със сигурност няма вървят навсякъде. Уважавай труда на хората, и без друго няма други подобни системи в световен мащаб, да не коментираме и цената...


Пон Юли 16, 2012 9:00 pm
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

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


Пон Юли 16, 2012 9:10 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 1:01 pm
Мнения: 2251
Мнение Re: Фурие преобразуване за микроконтролери
Цеко, тия неща, които правиш са добри, но в днешно време не е важно една програма само да е бърза, а да е удобно да се работи с нея и лесно да се нагажда. Тия асемблери дето си ги писал абсурд някой да седне да бърка в тях и да променя(то сигурно и ти няма да се навиеш). Направи си библиотеката по-голяма, но лесно четима! А като ползваш само част от нея за един контролер всичко ще е ОК!
Сега по темата - тоя метод(с повдигането на квадрат и после корен квадратен) работи доста добре. Само малко нагаждане трябва, че тук така пак варира. Това не съм го правил сигурно от 3-4 години като писахме протоколи по физика в ТУ. За това не се сетих.
Благодаря за идеята!

_________________
www.elkran.com


Пет Юли 27, 2012 1:03 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: Фурие преобразуване за микроконтролери
Че кой е казал някой да ги чете. Тя като си бачка библиотеката за къв чеп ми е после да я ръчкам. Камо ли пък някой друг. Между другото баш в тия библиотеки превъзмогнах гадния си навик да не пиша коментари. Ако ми се наложи да ги чета поне знам кво съм натворил :)

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


Пет Юли 27, 2012 1:14 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пон Апр 16, 2012 9:05 pm
Мнения: 182
Мнение Re: Фурие преобразуване за микроконтролери
То и като го правиш целочислено квадратите и корените отпадат, само едното събиране и делене остава. Бе в асемблера е истината, ако да ни викат мазохисти. :-D


Пет Юли 27, 2012 7:09 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 14 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 5 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни