| Микроконтролери и електроника 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к и установих че така както тръгна да ми яде флаша, няма начин да ми стигне |
|
| Автор: | stoyanoff [ Пет Юли 27, 2012 1:03 pm ] |
| Заглавие: | Re: Фурие преобразуване за микроконтролери |
Цеко, тия неща, които правиш са добри, но в днешно време не е важно една програма само да е бърза, а да е удобно да се работи с нея и лесно да се нагажда. Тия асемблери дето си ги писал абсурд някой да седне да бърка в тях и да променя(то сигурно и ти няма да се навиеш). Направи си библиотеката по-голяма, но лесно четима! А като ползваш само част от нея за един контролер всичко ще е ОК! Сега по темата - тоя метод(с повдигането на квадрат и после корен квадратен) работи доста добре. Само малко нагаждане трябва, че тук така пак варира. Това не съм го правил сигурно от 3-4 години като писахме протоколи по физика в ТУ. За това не се сетих. Благодаря за идеята! |
|
| Автор: | Cekins [ Пет Юли 27, 2012 1:14 pm ] |
| Заглавие: | Re: Фурие преобразуване за микроконтролери |
Че кой е казал някой да ги чете. Тя като си бачка библиотеката за къв чеп ми е после да я ръчкам. Камо ли пък някой друг. Между другото баш в тия библиотеки превъзмогнах гадния си навик да не пиша коментари. Ако ми се наложи да ги чета поне знам кво съм натворил Тоя метод си е така наречения RMS и масово си се ползва пресмятане на такива неща. |
|
| Автор: | Пушека [ Пет Юли 27, 2012 7:09 pm ] |
| Заглавие: | Re: Фурие преобразуване за микроконтролери |
То и като го правиш целочислено квадратите и корените отпадат, само едното събиране и делене остава. Бе в асемблера е истината, ако да ни викат мазохисти. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|