Känna igen ljud?
Känna igen ljud?
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!
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!
- JimmyAndersson
- Inlägg: 26470
- Blev medlem: 6 augusti 2005, 21:23:33
- Ort: Oskarshamn (En bit utanför)
- Kontakt:
"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.


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.
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..
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..
- 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:
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
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.
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.
- JimmyAndersson
- Inlägg: 26470
- Blev medlem: 6 augusti 2005, 21:23:33
- Ort: Oskarshamn (En bit utanför)
- Kontakt:
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..
...och formler hittar man om man söker på just "Goertzel algorithm".

Inte omöjligt att det är liknande algoritmer som används i program som kan skriva ut ackorden i en låt..
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
fast det tvivlar jag på, för att citera min favorit "nobody listens to me anyway"
hoppas nåt av det jag sa hjälpte

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?
ä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?
- JimmyAndersson
- Inlägg: 26470
- Blev medlem: 6 augusti 2005, 21:23:33
- Ort: Oskarshamn (En bit utanför)
- Kontakt:
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.
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.
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!
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!
- Schnegelwerfer
- Inlägg: 1863
- Blev medlem: 8 november 2004, 13:46:56
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
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
- JimmyAndersson
- Inlägg: 26470
- Blev medlem: 6 augusti 2005, 21:23:33
- Ort: Oskarshamn (En bit utanför)
- Kontakt:
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...
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...