Oversampling av ADC på Arduino/AVR
Oversampling av ADC på Arduino/AVR
Har behov av lite högre upplösning än 10 bit, har tidigare använt en DS2450 men hittade nu detta:
http://www.electricrcaircraftguy.com/20 ... YBc6JTyPmE
http://www.atmel.com/images/doc8003.pdf
Är detta helt kosher enligt signalbehandlingen, är resultatet matematiskt acceptabelt korrekt jämfört med en ADC med högre upplösning?
Borde man använda dithering av nåt slag?
http://www.electricrcaircraftguy.com/20 ... YBc6JTyPmE
http://www.atmel.com/images/doc8003.pdf
Är detta helt kosher enligt signalbehandlingen, är resultatet matematiskt acceptabelt korrekt jämfört med en ADC med högre upplösning?
Borde man använda dithering av nåt slag?
-
- Inlägg: 8212
- Blev medlem: 15 april 2006, 18:57:29
- Ort: Typ Nyköping
Re: Oversampling av ADC på Arduino/AVR
Ja, det är en utmärkt metod och jag använder den flitigt, 3 bitar ytterligare kan väl få ut som mest i praktiken.
Men det gäller att få till sin brusiga störning på rätt sätt och det är inte helt enkelt.
Det optimala är ett vitt brus med en amplitud på 0,5 till 1 LSB. Egentligen så gör det inte så mycket om bruset är högre men då blir behovet att det är vitt brus större.
Det brukar bli massor av timmar för att säkerställa att man inte överlagrar en känd störning som fuckar upp hela skiten...
Det svåra är att se till att man kan säkerställa att det man mäter är korrekt efter signalbehandlingen, och det är vanligen här de grövsta felen görs att man blandar ihop upplösning med noggrannhet...
Men det gäller att få till sin brusiga störning på rätt sätt och det är inte helt enkelt.
Det optimala är ett vitt brus med en amplitud på 0,5 till 1 LSB. Egentligen så gör det inte så mycket om bruset är högre men då blir behovet att det är vitt brus större.
Det brukar bli massor av timmar för att säkerställa att man inte överlagrar en känd störning som fuckar upp hela skiten...
Det svåra är att se till att man kan säkerställa att det man mäter är korrekt efter signalbehandlingen, och det är vanligen här de grövsta felen görs att man blandar ihop upplösning med noggrannhet...
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: Oversampling av ADC på Arduino/AVR
Härligt att läsa att fler än jag intresserar sig för DSP!
-
- Inlägg: 8212
- Blev medlem: 15 april 2006, 18:57:29
- Ort: Typ Nyköping
Re: Oversampling av ADC på Arduino/AVR
Nope ingen DSP just nu. Cortex M4 i 180MHz för <10USD 2M Flash, 256k RAM Ethernet och en massa periferi. Det kan man inte få i en DSP tyvärr.
Men jag sysslar bara med HW rör inte firmware alls.
Men jag sysslar bara med HW rör inte firmware alls.
Re: Oversampling av ADC på Arduino/AVR
Verkligen! Jag blev glatt överraskad av prestandan man kan få från t.ex. NXPs LPC43xx
Re: Oversampling av ADC på Arduino/AVR
Nu inväntas bara Cortex-M7! Då blir det riktig fart!
Samt med stöd för double precision i HW så kan man köra riktiga optimeringsalgoritmer
Samt med stöd för double precision i HW så kan man köra riktiga optimeringsalgoritmer
Re: Oversampling av ADC på Arduino/AVR
Har hunnit leka lite med en STM32F7Discovery och den är ruskigt snabb. I vissa lägen gör den samma sak som en F4 på halva antalet klockcykler. Den tickar dessutom på i 200MHz.
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: Oversampling av ADC på Arduino/AVR
Hehe, låter utmärkt.
Edit: limpan4all: Klart du håller på med DSP men inte med en DSP. Du decimerar ju. Som jag ser det är största fördelen med decimering att man kommer undan med ett betydligt enklare vikningsfilter.
Den mesta DSP jag gör är på en vanlig PC. Blir något bra/som vi hoppades implementerar jag det i en STM32F4 som ju har ganska mycket DSP-funktionalitet. Ofta räcker det med vanlig C-kod.
Edit: limpan4all: Klart du håller på med DSP men inte med en DSP. Du decimerar ju. Som jag ser det är största fördelen med decimering att man kommer undan med ett betydligt enklare vikningsfilter.
Den mesta DSP jag gör är på en vanlig PC. Blir något bra/som vi hoppades implementerar jag det i en STM32F4 som ju har ganska mycket DSP-funktionalitet. Ofta räcker det med vanlig C-kod.
Senast redigerad av lillahuset 20 juni 2015, 17:53:44, redigerad totalt 2 gånger.
Re: Oversampling av ADC på Arduino/AVR
Bara synd att F7an går så sakta...
Kolla Atmels SAM V serie som också är en M7a, den tuffar i 300 MHz.
Trodde ST skulle kontra fort, men de har hittills inte gjort det.
Samt att ST inte fixat en i 64-pins kapsel än gör mig lite ledsen.
Kolla Atmels SAM V serie som också är en M7a, den tuffar i 300 MHz.
Trodde ST skulle kontra fort, men de har hittills inte gjort det.
Samt att ST inte fixat en i 64-pins kapsel än gör mig lite ledsen.
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: Oversampling av ADC på Arduino/AVR
Vi har ett projekt med STM32F4. Jag tyckte jag tog i när jag valde den men har börjat inse att "vissa" har högre förväntningar på prestanda idag än de berättade vid projektets start. Då kanske en STM32F7 kan vara en bra uppgradering.
Re: Oversampling av ADC på Arduino/AVR
Intressant! Vilken typ av kod går dubbelt då snabbt? Blandade funktionsanrop och variabeljox eller tyngre beräkningar som FIR-filter etc?LHelge skrev:Har hunnit leka lite med en STM32F7Discovery och den är ruskigt snabb. I vissa lägen gör den samma sak som en F4 på halva antalet klockcykler. Den tickar dessutom på i 200MHz.
Strömförbrukningen verkar vara betydligt bättre dessutom.
Re: Oversampling av ADC på Arduino/AVR
Lite förenklat skulle man kunna säga att M7:an har en 64-bitars ALU som kan köra två 32-bitars instruktioner parallellt. Blandade funktionsanrop t ex vet jag inte riktigt hur stor vinst det är för. Är osäker på hur pipeline och jump prediction kan hantera det tillsammans med featuren att köra två instruktioner samtidigt.
Stora vinsten skulle jag tro är för DSP-algoritmer. Tanken är väl att man ska kunna göra saker en riktigt DSP har hårdvaruinstruktioner för, direkt i C-kod.
Ett exempel var:
som exekverade på straxt över 500 cykler. Rätt tydligt att det borde ge en prestandaboost för FIR/IIR-filter, FFT, korskorrelation osv.
Bifogar två bilder om någon är nyfiken på discovery-kortet.
* Kapacitiv touch
* två st MEMS-mikrofoner
* Ethernet
* USB FS & HS
* STLink/V2
* Arduino shield
* microSD
* Kamera interface
* SPDIF
Stora vinsten skulle jag tro är för DSP-algoritmer. Tanken är väl att man ska kunna göra saker en riktigt DSP har hårdvaruinstruktioner för, direkt i C-kod.
Ett exempel var:
Kod: Markera allt
#define NUM_SAMPLES 500
uint32_t samples[NUM_SAMPLES];
uint32_t sum;
uint32_t i;
sum = 0;
for(i = 0; i < NUM_SAMPLES; i++) {
sum += samples[i];
}
Bifogar två bilder om någon är nyfiken på discovery-kortet.
* Kapacitiv touch
* två st MEMS-mikrofoner
* Ethernet
* USB FS & HS
* STLink/V2
* Arduino shield
* microSD
* Kamera interface
* SPDIF
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Oversampling av ADC på Arduino/AVR
LHelge, Vad kostar discovery-kortet och var köper man det?