Jako borec, který začíná být starý neustále vzpomínám na "zašlou slávu mládí". A jedním z mých minulých programátorsko-elektronických majstrštyků byl stereofonní ultrazvuk, o kterém jsem psal tolikrát, že asi právě klikáte na tlačítko zpět.
V době, kdy jsem ultrazvuk dával dohromady jsem byl správně drzý a tak mi nepřipadalo jako problém na 16 MHz procesoru zpracovávat datový tok 320 kB/sec - pro vaši informaci 16M/320K = 50 strojových cyklů na jeden vzorek. Samozřejmě, že smyčka, která zpracovávala data (mohu-li to napsat) byla mistrovské dílo v assembleru, kde jeden kanál se načítal AD převodníkem (což trvalo 26 taktů) a druhý se mezitím zpracovával matematicky. Samozřejmě, že v těch 50 taktech se nic moc převratného spočíst nedalo, nicméně stereofonní ultrazvuk pro MiniSumo fungoval zázračně.
Vzhledem k tomu, že dnes už pro takové datové toky byste vzali spíše nějaký STM32 tak minimálně na 70 MHz, nebo možná i vice tak patrně nikdy nebudete řešit problém, typu - "jestli spočtu z těchto hodnot průměr - už se nevejdu do patřičného času". Nicméně věc, kterou budete řešit bude asi otázka zdali cpát z čidel do centrálního počítače (izolepou přilepeného notebooku) rovnou surová data, nebo jestli je nějak předzpracovat.
Srovnání z praxe - pokud používáte 40 kHz ultrazvuk, který dle Shanona-Nyquista digitalizujete na ideální frekvenci 160 kHz a měříte vzdálenost max. 4 metry, a to 10x za sekundu je to datový tok 38 kilobyte/sec. Pokud budete posílat jenom změřenou vzdálenost překážky v milimetrovém rozlišení bude to 20 byte / sec.
Pokud zvolíte verzi - posílat surová data - pak asi narazíte na to, že s rostoucím počtem čidel vám žádná sběrnice nebude dosti rychlá a že nároky na centrální počítač velice vzrostou.
Pokud zvolíte verzi zpracovávat data mikrokontrolérem co nejblíže jejich vzniku, tedy přímo v procesoru řídícím čidlo (což osobně považuju za správné) narazíte na problém omezených prostředků mikrokontrolérů.
Jedním ze základních omezení, které je i u většiny 32 bitových MCU je nutnost používat celočíselnou aritmetiku.
Exisutjí sice procesory s matematickým komprocesorem, nebo v C je možno přilinkovat emulační knihovny. Obojí ale znamená značné omezení. Jestli si právě říkáte, že se vykašlete na rady konzervativního dědka a budete si psát své algoritmy ve "float" jak budete chtít - tak si vás dovolím upozornít, že dnes nejčastěji používané DSP algoritmy - to jest dekódování MP3 a dekódovaná GSM signálu jsou taky - zcela úmyslně naprogramovány v celočíselné matematice, aby pro MP3, nebo mobil od Vietnamce za 299,- nebylo nutno používat procesor s koprocesorem nebo s velkou ROM (FLASH) pamětí.
Takže v nejbližší době probereme celočíselné algoritmy. Dnes už jsem psaním poněkud unaven, tak si dáme jenom ochutnávku.
A = 7/8 X spočteme jako A = ( ( X << 3 ) - X + 4 ) >> 3
Tušíte proč je to mnohem rychlejší než násobení 7 a dělení 8 ?
Tušíte proč je tam + 4 ?
Zbývá už jenom oblíbená rada pro blondýny : Když v Cosmopolitanu píšou, že začíná léto - není to rozkaz lézt do plískanice v minišatech - oni píšou své články půl roku dopředu, a navíc někde v Anglii - takže prd vědí jak je zrovna teď u vás v Zatopené Lhotě.
Post Scriptum : Protože moje matematické schopnosti, se blíží svým hranicím - hledám už předem "hostujícího autora" který napíše srozumitelnou lekci (nebo vice lekcí) o Kalmanových numerických filtrech a to nejlépe vidláckým způsobem, abych to i já (konečně) pochopil. Hlaste se hojně - v diskusi. Pokud by psaní "vidláckým způsobem" mohlo znamenat, že vás vyhodí z Matfyzu nebo ČVUT, nebo s vámi přestanou chodit na pivo - můžu identitu autora utajit (nebo s ním začít chodit na pivo sám)....