Känna igen ljud?

Planering och tankar kring eventuella framtida projekt.
Rollo
Inlägg: 217
Blev medlem: 2 januari 2004, 19:23:29

Känna igen ljud?

Inlägg av Rollo »

Tjena!

Håller på med ännu ett projekt =) fast denna gången känns slutprodukten mer viktig att få färdig än mina tidigare kul-att-göra-projekt..

Hur som helst, till problemet!

Jag är ute efter ett billigt sätt att uppfatta en två-tonig ljud(tut)signal (typ polissirén).

har googlat runt på allt som har med ljudigenkänning att göra, men det mesta handlar om röstigenkänning, som är både dyrare och mer komplicerat.

Rent spontant känns det som att det borde gå att via en mikrofon få in ljudet i en PIC som räknar frekvensen på ljudet? frekvensen är alltid (i princip) samma på ljudsignalen.

problemet är ju att ljudsignalen från mikrofonen är ju analog, men om man kan gå via lite komponenter som gör om varje "topp" på ljudvågorna till en 1a, borde inte det fungera?

Många frågor på en gång, men hoppas att någon kan hjälpa mig! Allra smidigaste hade varit ett chip som man spelade in något,och så säger det till när det hör något liknande, men detta har jag ej hittat.

Tack!
Användarvisningsbild
JimmyAndersson
Inlägg: 26470
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

"typ polissirén"... Det finns väl inte så värst mycket annat som har två toner och låter "tut"...? :) :)

Men grundidén låter kul. Jo, någon form av frekvensräkning är nog det lättaste. När man räknar ut en frekvens så behövs inte alls lång tid. Därför kan den räkna ut frekvensen hela tiden och jämföra med "igenkännings-tonerna".

Ljud förändras beroende på vad de färdas i och avståndet till målet mm. Även vinden förändrar ljudet, eftersom ljud helt enkelt är luft som rör sig.
Men med medelvärdesbildare eller andra "räknejobb" så går det att komma runt ganska lätt.

Att göra om ljudets toppar till 1or skulle inte bli så bra. Det är mycket bättre att använda en A/D-omvandlare om man vill få ljudet digitalt.
Ju bättre A/D-omvandlare desto noggrannare avläsningar, men även mer processorkrävande vid beräkningarna.
Rollo
Inlägg: 217
Blev medlem: 2 januari 2004, 19:23:29

Inlägg av Rollo »

Hej!

Det verkar som att du har lite koll på ämnet..

så ditt förslag är att vi använder oss av en ADC och gör beräkningar med hjälp av både frekvensen, dvs. hur många pulser under en viss tid, samt spänningen på ljudsignalen?

det känns väldigt komplicerat, trots att jag har 4 lärare inom microprocessorprogrammering till hjälp..
Användarvisningsbild
bengt-re
EF Sponsor
Inlägg: 4829
Blev medlem: 4 april 2005, 16:18:59
Skype: bengt-re
Ort: Söder om söder
Kontakt:

Inlägg av bengt-re »

Jo, antigen får du sampla ljudet och signalbehandla det - med fft så är det lätt att hitta frekvenserna även i en lite störd signal, kolla på microchips dsp-kretsar, dessa är perfekta till ändamålet och tror att det finns kodexempel på deras sida också. Den enklare lösningen är att bygga ett analogt filter med op-förstärkare som du sedan kopplar en detektor till och in på en digital ingånen på uP eller om du är mer sofistikerad till en A/D ingång på uP så får du nivån på den frekvensen och kan mjukvarumässigt ställa känsligheten
Användarvisningsbild
babbage
Inlägg: 654
Blev medlem: 10 november 2004, 11:33:17
Ort: N-tälje

Inlägg av babbage »

1)Kontrollerar du "tut"-signalens frekvens/amplitud/riktning?
2)Kommer det att "tuta" i en kontrollerad miljö (t.ex. ett rum inomhus)?
3)Gör det något om den falsktriggar någon gång?

Ett alternativ till att räkna periodtiden skulle kanske kunna vara att ha två branta bandpass-filter och ett tröskelvärde. Om den filtrerade signalen har en spänning över ett visst värde för båda filterna inom en bestämd tidsrymd anser man att det har "tutat". Om du svarar ja på 1) och 2) samt nej på 3) ovan skulle det kanske fungera. Filtreringen kan ske med analog elektronik eller digitalt.
Användarvisningsbild
arvidb
Inlägg: 4537
Blev medlem: 8 maj 2004, 12:56:24
Ort: Stockholm

Inlägg av arvidb »

Googla på "Goertzel algorithm"! Det är en algoritm som används flitigt i t.ex. DTMF ("Dual Tone Multi-Frequency")-sammanhang för att detektera toner, och den går att implementera med en enkel 8-bitars mikrokontroller. Välj en mikrokontroller med (minst) en inbyggd ADC-kanal, så är saken biff!

Arvid
Användarvisningsbild
JimmyAndersson
Inlägg: 26470
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

babbage: Funderade också på det. En sån variant skulle nog spara processorkraft. Kan däremot bli lite knepigare att komma fram till rätt värden. Men det finns säkert formler för det...

...och formler hittar man om man söker på just "Goertzel algorithm". :) Kika på t.ex http://ptolemy.eecs.berkeley.edu/papers ... node3.html

Inte omöjligt att det är liknande algoritmer som används i program som kan skriva ut ackorden i en låt..
Rollo
Inlägg: 217
Blev medlem: 2 januari 2004, 19:23:29

Inlägg av Rollo »

tack för allas angagemang!

efter att ha fått en snabb överblick över det ni rekommenderat verkar det som att Goertzel algoritmen verkar göra det billigast, strömsnålast och t.om enklare. (när man väl har räknat ut allt )

ska sätta mig och fördjupa mig i den nu!

Tack!
mattej00
Inlägg: 36
Blev medlem: 21 augusti 2005, 20:06:36

Inlägg av mattej00 »

Om ni ska göra nån form av frekvensigenkänning av ex. polistuta osv. så få rni ju tänka på att alla frekvenser ändras då källan är i relativ hastighet, alltså om du rör dig mot föremålet så höjs frekvensen och vise versa.
hoppas nåt av det jag sa hjälpte :wink: fast det tvivlar jag på, för att citera min favorit "nobody listens to me anyway"
Rollo
Inlägg: 217
Blev medlem: 2 januari 2004, 19:23:29

Inlägg av Rollo »

har också funderat på detta, hur mycket är det frekvensen ändras? om man tänker sig att man själv ligger i 50 km/h och det kommer i 70 km/h bakifrån, alltså 20 km/h mot än själv.

är det en stor procentuell skillnad? är det inte det, så är det ju bara att sätta vilkoren med en tillåtelse av viss en differans. om ni förstår?
Användarvisningsbild
JimmyAndersson
Inlägg: 26470
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Jo, det kan bli en ganska stor skillnad. Nästan upp till en halv oktav (dvs 6st halvtoner) skulle jag gissa. Men det går ju att lösa: Båda "tuten" förändras ju lika mycket eftersom de befinner sig på samma avstånd till 'lyssnaren'. (Visserligen förändras en mörk ton annorlunda än en ljus, men på en t.ex polistuta så ligger tonerna så lika att man inte behöver tänka på det i detta fall.)

Låt säga att det första "tutet" är TUT1 och det andra TUT2.
Om man räknar ut medelvärdet på förändringen som varje "tut" ger, så får man EN frekvens per "tut". Då behöver man ju bara räkna ut skilladen i Hz mellan TUT1 och TUT2. För att inte konstruktionen ska bli för petig så kan man tillåta en viss skillnad. För att få ännu säkrare resultat så kan man skapa flera medelvärden med t.ex en sekunds skillnad i avläsningen.

En sorts statistik-jämförelse av ljud, helt enkelt.
Rollo
Inlägg: 217
Blev medlem: 2 januari 2004, 19:23:29

Inlägg av Rollo »

Hej allihopa!

Idag presenterade jag för mina tekniklärare min idé på hur jag ska försöka lösa det hela, med hjälp av en PIC12F683 och Goerzel.

De tyckte att det verkade vettigt förutom att dom ansåg att det inte finns en chans att minnet räcker, med tanke på att man ska sampla ljud samt att man använde sig av tunga matematiska beräkningar.

Hans förslag var att använda sig av en Motorolaprocessor (dels pga. erfarenheter) och externt minne.

Kommentarer? Är PIC svårare att koppla minnen till?

tack!
Användarvisningsbild
Schnegelwerfer
Inlägg: 1863
Blev medlem: 8 november 2004, 13:46:56

Inlägg av Schnegelwerfer »

Fördelen med Goertzels algoritm är ju att det inte blir särskilt tunga beräkningar, utan att man använder sig av tabelluppslagningar istället (har jag för mig).

Jag hittade förut på en DTMF-avkodare på en 16F877 som använde sig av just Goertzels algoritm, så visst klarar en billig PIC av det.

Länk:

http://www.geocities.com/constantinescu ... t/dtmf.htm
Rollo
Inlägg: 217
Blev medlem: 2 januari 2004, 19:23:29

Inlägg av Rollo »

Ja just det ja! den sidan har ju jag kollat igenom massor av gånger.. tack för det!

kan det vara så att det går bara eftersom DTMF-toner är kortare eller nåt, eller har min lärare helt enkelt fel? Jag har mailat honom hursomhelst..
Användarvisningsbild
JimmyAndersson
Inlägg: 26470
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

DTMF-toner har kanske en standardlängd när de genereras av t.ex modem eller andra uppringare, men själva algoritmen behöver inte arbeta med särskillt långa toner, och detta gäller ju även när man använder algoritmen för andra ljud.

Men det är viktigt att komma ihåg att DTMF-toner bygger på en standard av kända toner. I detta fallet vet vi ju inte exakt vilka toner som skulle kunna ingå i en "ton-tabell". Man behöver inte ens veta det om man istället bygger igenkänningen på skillnader mellan tonerna, som jag skrev tidigare.

Det man då behöver är "lite" kod som hela tiden gör två separata samplingar med en viss tids mellanrum. En "teori-kod" skulle då kunna se ut så här:

Sampla ljud1 i [liten tid]
Vänta [aningen längre tid]
Sampla ljud2 i [liten tid]
Skapa medelvärde av ljud1 för att få EN ton
Skapa medelvärde av ljud2 för att få EN ton
Om det är en viss förutbestämd skillnad i Hz mellan ljud1 och ljud2 så är det en brandbil-siren.

...Och så går det tillbaka till början och jämför nästa ljud som låter.

(Om det är en annan skilland mellan ljuden så tolkar programmet det som en annan siren, och om det inte är någon skillnad alls så kanske det är ett brandlarm. Är det jättestor skillnad så är det antingen brus eller musik.)

Den här varianten skulle inte kräva lika mycket kod som om man behöver lägga in en stor tabell med alla tillåtna frekvenser. Eftersom tonerna dessutom varierar med avstånd och vind så skulle man nästan få lägga in alla toner mellan 500Hz - 2kHz.

Det är förresten en annan sak som kan spara kraft och som gör att man slipper "sampla för kråkorna": Man behöver ju inte sampla med 44kHz direkt. DTMF-programmet i länken ovan använder 4.8kHz och tonerna i DTMF ligger i ungefär samma område som de flesta ljud som man kan tänkas vilja avläsa. Nykvist's teori gäller ju mest i musiksammanhang för att verkligen vara säker att få med varenda Hertz...
Skriv svar