FFT eller filter i PIC eller Atmel?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
cosmox
EF Sponsor
Inlägg: 3856
Blev medlem: 6 januari 2004, 02:11:54
Ort: Hjälteby - Tjörn

FFT eller filter i PIC eller Atmel?

Inlägg av cosmox »

Hej!

Jag har en liten fråga angående ett kommande projekt.

Jag skulle vilja mäta amplituden på tre till fem frekvenser med en uC.
Frekvenserna ska ligga inom 20-20k och vara variabla.

Ex:
50Hz = -50dB
250Hz = 30dB
osv..

Man ska även kunna ställa in en gate nivå för varje frekvens.
Så om tex 250Hz överstiger 0dB så kanske port A0 blir ett.

Vad tror ni om det?

/Hampus
Användarvisningsbild
zus
Inlägg: 198
Blev medlem: 14 december 2003, 11:34:08
Ort: Göteborg

Inlägg av zus »

Titta på goertzel:s algorithm, bra för detektering av ett fåtal toner och magnituden^2 ramlar ut enkelt...dessutom kan nästan alla beräkningar ske samtidigt som man samplar signalen = inget behov av att lagra ett "fönster" som med FFT t.ex.:

http://www.embedded.com/story/OEG20020819S0057

Håller för tillfället på att trycka in den i en ATMega8 för 15 frekvenser mellan 900Hz och 2500Hz...
ClasseMan
Inlägg: 176
Blev medlem: 9 juli 2004, 15:21:02
Ort: Karlskrona
Kontakt:

Inlägg av ClasseMan »

Om du använder dsPicskall det nog gå bra. Men att hinna filtera ut eller göra en fft på en 20kHz signal kan nog vara svårt med en vanlig pic.
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

Det beror förstås på om man måste hinna behandla all data som kommer in, om det räcker att FFT:a ett "fönster" varje sekund eller så är det betydligt lättare. PIC18 har ju hårdvaru 8x8 mul, och dsPIC har förstås en 16x16 MAC-enhet.

Men alla har ont om minne för att lagra datan...

Goertzels algoritm låter ju faktiskt väldigt bra av den anledningen, hade aldrig hört talas om den.
cosmox
EF Sponsor
Inlägg: 3856
Blev medlem: 6 januari 2004, 02:11:54
Ort: Hjälteby - Tjörn

Inlägg av cosmox »

Tack för visat intresse!

Har kikat lite på Goertzel algoritmen nu och den verkar passa till det här.
Framför allt den optimerade versionen.
Jag hade inte heller hört talas om den tidigare och det verkar inte finnas
så mycket info om den som man förväntat sig.
Frågan är hur lång tid den skulle ta att exekvera i en PIC eller en Mega. (rimmar!)

zus: Hur många gånger per sek uppdateras din data
och vilken typ använder du?

Jag har ingen som hellst erfarenhet av varken FFT eller digitalafilter,
men ska helt klart dyka djupare i det här.
Kan va bra till många saker.

/Hampus
Användarvisningsbild
zus
Inlägg: 198
Blev medlem: 14 december 2003, 11:34:08
Ort: Göteborg

Inlägg av zus »

Ska erkänna att jag inte heller hört talas om goertzel innan vi började med detta projektet, vilket för övrigt ska bli en dekoder för CCIR-selektiv. Processorn ligger och samplar en signal hela tiden och letar efter godkända toner. I system-80 kommer tonerna 5 i följd, den första ska enligt standard vara 100ms eller längre och de efterföljande 80ms...

Kanske kommer redovisa kod och hårdvara här sedan - annars är det väl offentlig handling iaf. när vi lämnat in det (projektkurs på högskolan)...

cyr: Gick inte du också på LiTH?
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

Jo jag pluggar på LiTH, men jag har inte hört talas om goertzel ändå - iaf inte vad jag kommer ihåg :lol:
cosmox skrev: Frågan är hur lång tid den skulle ta att exekvera i en PIC eller en Mega. (rimmar!)
Det ser inte ut att vara mer än 1 multiplikation och några additioner per sampel, per ton. Om jag fattat det rätt.

En processor med hårdvarumultiplier av något slag fixar det nog utan problem i t.ex. 44KHz samplerate.
Användarvisningsbild
zus
Inlägg: 198
Blev medlem: 14 december 2003, 11:34:08
Ort: Göteborg

Inlägg av zus »

Ja, hårdvarumultiplikation är nödvändigt - iaf. med lite högre frekvenser. Som det ser ut nu kommer vi i projektet använda 8kHz samplerate => 2000 instruktioner för beräkningar vid varje sample...men så har vi ju 15 toner också....

...med frekvenser på ~20kHz är det ju nödvändigt med en samplerate om >40kHz och då blir det lite smått om beräkningsutrymme kvar i en ATMega8 (16MHz)....

Det är en stor fördel om man kan använda en processor med flyttalaritmetik. Men det går att skala upp konstanterna och använda heltal också...

...återkommer med resultat när projektet är färdigt...
Användarvisningsbild
babbage
Inlägg: 655
Blev medlem: 10 november 2004, 11:33:17
Ort: N-tälje

Inlägg av babbage »

För inte alltför många frekvenser som ska detekteras är nog Goertzel att föredra framför FFT

Om man bara vill detektera typ en eller två frekvenser kan kanske även ett matchat filter vara ett alternativ.
cosmox
EF Sponsor
Inlägg: 3856
Blev medlem: 6 januari 2004, 02:11:54
Ort: Hjälteby - Tjörn

Inlägg av cosmox »

Tack för alla svar!

Nu har jag kollat på Goertzel algoritmen lite mer.

Cyr: Så har jag oxå fattat det. Jag tänkte att man kanske kunde använda
en av PICs kretsar i 18F serien, dom har ju 8x8 hwmul i sig.

Nu är jag ingen hejjare på ASM men jag ska försöka skriva ett litet test prog
och se vad som händer.
Är det en fördel att använda extern ADC i det här fallet?
Avlastar man uCn på något vis då?
Jag tror att det skulle räcka med en 8bits ADC.

Jag läste i Circut Cellar (tror jag det var) om ett litet chip (8 pins DIL) som
innehöll en flyttals matte processor. en sådan kanske skulle passa, om man nu får
tag i en.

/Hampus
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

Dom finns att köpa på Sparkfun som för övrigt har en massa andra roliga saker....
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

Fast det är väl bara en mikrokontroller med lite flyttals-kod i sig?
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

Jo, förmodligen. Och eftersom dom använder I2C för kommunikation mot host-cpu'n så lär man inte uppnå någon rasande hastighet ...
cosmox
EF Sponsor
Inlägg: 3856
Blev medlem: 6 januari 2004, 02:11:54
Ort: Hjälteby - Tjörn

Inlägg av cosmox »

The internal microcontroller (CY8C27143) has 16K of Flash memory that is clocked at a whopping internal 24MHz! This allows for much faster and more powerful computations
Matseng: Ja, det var i2c.
Cyr: Ja, det verkar så.

Det kan ju vara bra att låta den ta hand om matteoperationer medans uCn pysslar med något annat.
Jag kikade bara som hastigast på instruktions tabellen, men tyckte att det verkade gå ganska fort.

Det skulle vara kul att få en sample o testa lite iaf.

/Hampus

EDIT: Matseng: jag läste fel.
Användarvisningsbild
zus
Inlägg: 198
Blev medlem: 14 december 2003, 11:34:08
Ort: Göteborg

Inlägg av zus »

Vad gäller extern ADC...tror inte det spelar någon större roll....om du ändå tänker köra med en uC med inbyggd ADC....

Det går ju nämligen att ligga ett block efter med beräkningarna och att läsa in en sample ifrån uC:ns interna register eller en extern ADC är ju ganska likvärdigt...förutom att man inte behöver använda 8+ datapinnar om man kör med en intern...
Skriv svar