Hej.
Jag är lite ny, höll på med PIC-sensorer i gymnasiet och tappat en del kunskap.
Nu skulle jag vilja bygga och programmera en PIC-sensor som känner av en viss frekvens t.ex. 1000 Hz och då tända en lampa.
Jag har hittat en guide på internet som verkar använda en PIC 12F683 för att känna igen en viss frekvens.
http://www.instructables.com/id/Frequen ... /?ALLSTEPS
Men då jag inte alls förstår koden eller hur han/hon faktiskt gör så undrar jag om det finns något annat sätt att känna igen en viss frekvens och få någon form av output på det?
Tack på förhand.
Känna igen en viss frekvens med PIC
Re: Känna igen en viss frekvens med PIC
Hej, den metoden de använder är inte så avancerad i egentligen.
Man samlar in ett antal "sampels" exempel 64st i fast frekvens ("frames"), sedan vikta man dem och summera dem nu har man ett tal att jämföra med.
"Sampels" viktas genom att man multiplicera varje sampel i "frames" med en egen koefficient.
Nu tänker jag inte gå in på teorier men det har visat sig att den sökta signalen är den bästa koefficienten (enkel förklarat).
Ett "förenklat" exempel
Som du ser ger bara den sökta signalen ett större värde vilket är precis det vi vill ha men det finns en hake
om den sökta signalan är fas förskjuten 90grade kommer vi i alla fall få 0 som resultat.
lösningen på problemet är vikta signalen med önska signalen men 90grader förskjutning.
Nu har man två värden men vill bara ha ett att jämföra med, det löser man med använda Pytagoras sats
delvis man kvadrerar de två resultatet och sen summerar, och sist men inte minst så tar man roten ur hela härligheten.
Så fungerar den ungefär.....
Man samlar in ett antal "sampels" exempel 64st i fast frekvens ("frames"), sedan vikta man dem och summera dem nu har man ett tal att jämföra med.
"Sampels" viktas genom att man multiplicera varje sampel i "frames" med en egen koefficient.
Nu tänker jag inte gå in på teorier men det har visat sig att den sökta signalen är den bästa koefficienten (enkel förklarat).
Ett "förenklat" exempel
Kod: Markera allt
Låt oss säga att vi söker en signal sinus med en 1/4 frekvens och att "framen" är 8 "sampel"
Signalen vi söker ser ut ungefär så här (delvis en sin(PI/2*n))
0, 1, 0, -1, 0, 1, 0, -1
om vi samplar in en dc signal exempel på 1 helea tiden får vi
1, 1, 1, 1, 1, 1, 1, 1
om vi vikta den samplade signalen med signalen med den sökta får vi
0*1+ 1*1+ 0*1+ (-1)*1+ 0*1+ 1*1+ 0*1+ (-1)*1 = 0
om vi samplar en sinus med hava frekvensen som önskat får vi något som liknar ungefär så här
0, 0.7, 1, 0.7, 0, -0.7, -1, -0.7
om vi vikta den samplade signalen med signalen med den sökta får vi
0*0+ 1*0.7+ 0*1+ (-1)*0.7+ 0*0+ 1*(-0.7)+ 0*1+ (-1)*-0.7 = 0
om vi samplar en cosinus med dubbla frekvensen som önskat får vi något som liknar ungefär så här
1, -1, 1, -1, 1, -1, 1, -1
om vi vikta den samplade signalen med signalen med den sökta får vi
0*1+ 1*(-1)+ 0*1+ (-1)*(-1)+ 0*1+ 1*(-1)+ 0*1+ (-1)*(-1) = 0
om vi samplar en sinus med önskat får vi något som liknar ungefär så här
0, 1, 0, -1, 0, 1, 0, -1
om vi vikta den samplade signalen med signalen med den sökta får vi
0*0+ 1*1+ 0*0+ (-1)*(-1)+ 0*0+ 1*1+ 0*0+ (-1)*(-1) = 4
om den sökta signalan är fas förskjuten 90grade kommer vi i alla fall få 0 som resultat.
lösningen på problemet är vikta signalen med önska signalen men 90grader förskjutning.
Nu har man två värden men vill bara ha ett att jämföra med, det löser man med använda Pytagoras sats
delvis man kvadrerar de två resultatet och sen summerar, och sist men inte minst så tar man roten ur hela härligheten.
Så fungerar den ungefär.....
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping