DTMF-Touch Tone dekoder med hjälp av Microchip PIC mikroprocessor (2 / 9 steg)
Steg 2: Signalbehandling algoritm Beskrivning
Goertzel algoritm är en algoritm som används för att upptäcka en enda frekvens för signalbehandling. Det fungerar som en mycket smal bandpassfilter. Det ger en mycket skarp reaktion på frekvenser inom frekvensbandet pass, och en mycket lägre svar för frekvenser utanför passera bandet.
I min implementation av algoritmen tas skall prover i en takt på 4 gånger frekvensen ska identifieras. Med en frekvens på 4 gånger mål frekvensen gör koefficienter som används i algoritm motsvara 1 eller 0. Detta eliminerar behovet av att utföra komplicerade och tidskrävande multiplikation på en 8-bitars mikro. Jag har inte tagit med alla matematiska Detaljer av algoritmen här, men en Google-sökning kommer att producera artiklar om ämnet om du är intresserad av att lära mer om algoritmen själv.
På grund av begränsningen är att samplingsfrekvensen måste vara 4 gånger mål frekvensen, samplingsfrekvens krävs olika för var och en av de 8 toner som används för DTMF. Så, algoritmen måste köras en gång för varje 8 frekvenserna. Detta innebär att en separat uppsättning prover måste tas för varje frekvens av intresse, som varje frekvens kommer att testas med en annan frekvens.
Skärpan i filtret svaret kontra frekvensen är proportionell mot antalet prover som tagits. Svaret av algoritmen måste vara tillräckligt skarp för att det svarar mot målet frekvensen, men reagerar inte på någon av de andra 7 frekvenserna. Ett värde av 120 prover konstaterades för att producera ett tillräckligt smalt svar i experimenterande. Det är ju en avvägning mellan antalet prover och genomförandetid. För att upptäcka korta toner, bör genomförandetid vara så kort som möjligt. Men för att göra en smal svar antalet prover måste vara större, vilket resulterar i en längre tid för genomförandet. Antalet prover blir den begränsande faktorn i hur kort av en ton kan upptäckas.
När algoritmen har bearbetat 120 prover, utgångar det ett värde. Omfattningen av detta värde är proportionell mot amplituden av frekvensen av intresse. Detta resulterande värdet jämförs mot en tröskel att avgöra om målet frekvens är närvarande.
När algoritmen har körts för alla 8 frekvenser, utför mikroprocessorn logik på resultaten att avgöra om ett giltigt DTMF par är närvarande. Ett giltigt DTMF par anses vara närvarande bara om 1 rad freq och 1 col freq upptäcks. Andra kombinationer betraktas som ogiltiga.
Diagrammet visar det faktiska svaret mätt med denna algoritm som körs på en PIC 12F683. Diagrammet visar Frekvensgången av alla 8 gånger algoritmen körs. X-axeln är frekvensen i Hz. Den vertikala axeln är värde produktionen av algoritmen. Ingången var en 1V sinuskurva, svepte från 600Hz till 1800 Hz. Observera att svaret är bredare för högre frekvens filtren. Detta är på grund av att bredden på svaret är proportionell mot samplingsfrekvens, dividerat med antalet prover som tagits. I denna implementation av algoritmen, samplingsfrekvens är alltid fyra gånger mål frekvensen, att helt enkelt och påskynda matten. Samma antal prover används dock för varje av frekvenserna som 8 mål. Den göra bredden på svaret samma för varje kräver med samma prov frekvens för varje, som skulle ha mer tidskrävande matematik, eller det skulle kräva att antalet prover som tagits på de högre frekvenserna vara större, som skulle förlänga genomförandetid. Om du använder en mikroprocessor med riktiga DSP funktionalitet, extra matten kan utföras mycket snabbt och så det skulle vara något som du skulle sannolikt inkluderar.
Trots skillnaderna i bredd på svaret, har operationen varit mycket robust upptäcka toner, även i närvaro av betydande buller.