luni, 18 iunie 2012

Decodare DTMF

DTMF decodificare o abordare naiv

Conţinut


Decodare DTMF 
Autor:epokh
E-mail:matrix.epokh @ gmail.com
Site-ul:www.epokh.org / drupy
Data:18/12 / 2007 (zz / ll / aaaa)
Nivel:Destul de greu
Limba:Engleză Pavilion English.gif
Comentarii:

Introducere

Dual-ton multi-frecvenţă (DTMF) este utilizat pentru telefon de semnalizare pe linia de voce în banda de frecvenţă de-a Call Center de comutare. Versiunea de DTMF utilizate pentru apelarea cu ton de telefon este cunoscut prin termenul de marcă Touch-Tone, şi este standardizat de Recomandarea ITU-T Q.23. Alte multi-frecvenţă sunt utilizate pentru sisteme de semnalizare interne la reţeaua de telefonie.
Ca o metodă de semnalizare în bandă, tonuri DTMF, de asemenea, au fost utilizate de către posturile de televiziune prin cablu pentru a indica de pornire şi oprire ori de puncte locale de inserare comerciale, în timpul pauzelor staţie pentru beneficiul de companii de cablu. Până la o mai bună out-of-band, echipamente de semnalizare a fost dezvoltat în anii 1990, rapide, nerecunoscut, şi tare serii de tonuri DTMF ar putea fi auzit în timpul pauzelor publicitare ale canalelor prin cablu din Statele Unite şi în altă parte.

Unelte & Fişiere


Eseu

DTMF tastatura

Tastatura DTMF este prevăzută într-un 4 × 4 matrice, cu fiecare rând reprezintă o frecvenţă redusă, şi fiecare coloană reprezintă o frecvenţă ridicată. Apăsarea unei singure taste (cum ar fi '1 '), va trimite un ton sinusoidală a celor două frecvenţe (697 şi 1209 de hertzi (Hz)). Cele tastaturi originale au avut pârghii în interiorul, astfel încât fiecare buton activat de două persoane de contact. Cele mai multe sunt tonuri de asteptare pentru motivul multifrecventa sistem.Aceste tonuri sunt apoi decodate de către centrul de comutare pentru a determina care cheie a fost apăsat.
X1209 Hz1336 Hz1447 Hz1663 Hz
697 Hz123O
770 Hz456B
852 Hz789C
941*0#D

După DTMF de prelevare de probe

Din tonul undă tactil este eşantionat la 1 kHz, la tabelul 1 se poate vedea că semnalul este undersampled. Când FFT (versiunea monolateral) se realizează, frecvenţele reale nu vor fi mapate corect pe teren FFT. Pentru un semnal de mai sus, frecvenţa de eşantionare, de exemplu, un semnal de frecvenţă de 1,2 KHz va fi undersampled şi mapate la o frecvenţă de 1.2 dolari KHz - 1 KHz = 200 Hz $. Pentru un semnal în regiune între $ F_ {e / 2} = $ 500Hz frecvenţa de eşantionare şi frecvenţa de eşantionare, de exemplu, un semnal de frecvenţă de 700 Hz va fi undersampled şi mapate la o frecvenţă de $ abs (700 Hz - 1 kHz) = 300 Hz $. Tabelul echivalent devine:
X209 Hz336 Hz447 Hz663 Hz
303 Hz123O
230 Hz456B
148 Hz789C
59 Hz*0#D

Curăţarea de semnal

Prima operaţiune este de a elimina tensiunea de offset şi unele frecvenţe joase zgomotoase de la semnalul original în figura:

Cod MATLAB care face operaţiunea este:
CLF , CLC , timp = number1 ( :, 1 ) ; y = number1 ( :, 2 ) ; Frecvenţa de eşantionare%: semnal de timp este raportat la original semnal " ) ; xlabel ( "Timpul" ) subplot ( 2 , 1 , 2 ), y = y- medie ( Y ) , complot ( TSEC, y ) ; % Un mod simplu de a elimina diferenţa titlul ( "Semnal cu compensarea eliminat" ) ; xlabel ( 'Time (s) " ) % scoateţi de bază trecere de mare filtrată la 10 Hz ' ) ; complot ( timp, ynodc ) ; xlabel ( 'Time (s)' ) ; % scoateţi spkes subplot ( 3 , 1 , 3 ) fftPlot ( TSEC, ynodc ) , titlul ( "FFT a semnal filtrat ' ) ; xlabel ( 'Frecventa (Hz)' ) ;

Un filtru trece-sus, cu un prag de frecvenţă de 10 Hz elimina de oscilaţie mic de la nivelul de baza (nu uitaţi, totuşi, să stea departe de frecvenţa de 59 Hz pliată!). Semnalul curăţate arata ca in figura:

Chunking semnal

Pentru a bucată de semnal putem folosi piroane produse de presiunea butonul (un vârf de tensiune pozitivă şi negativă), pentru a detecta începutul şi se termină de fiecare sunet compus. Selectarea pragul de buna ca in codul:
Două% thersholds unul pentru pozitiv şi unul negativ pentru vârful
% Ele sunt utile pentru a împărţi





În acest caz, avem 11 de numere. Una am gasit indicele de a împărţi semnal, un ciclu va decodifica tonuri:
% În acest fel vom găsi numerele de digited şi imprima unul câte unul
ţineţi off; pentru k = 1 : 1 : cifre tempy = ynodc ( vpeakH ( K ) + 1 : vpeakL ( K ) - 1 ) ; tenta = tempy]; %% TT = [TT tenta]; de intrare ( "cifra următoare: ' ) ; sfârşitul













Tone de exemplu decodare

Având în vedere primul ton, FFT monolateral se calculează: cum putem vedea frecvenţe mai mari două sunt 335 Hz şi 52,6 Hz. Calculul eroare minimă în tabelul eşantion le decoda la 336 Hz şi 59 Hz , cu o eroare de $ e_ {1} = 1 $ şi $ e_ {2} = 6.4 $ ca să ne dea numărul 0 .

Tonuri de apel: 1 frequecies mai mari de 335 Hz şi 52,6 Hz

Având în vedere tonul al doilea, FFT monolateral se calculează: cum putem vedea frecvenţe mai mari două sunt 333 Hz şi 306 Hz . Calculul eroare minimă în tabelul eşantion le decoda la 336 Hz şi 303 Hz, cu o eroare de $ e_ {1} = 3 $ şi $ e_ {2} = 3 $, care să ne dea numărul 2 .

Tonuri de apel: 1 frequecies mai mari de 306 Hz şi 333 Hz

Având în vedere tonul al doilea, FFT monolateral se calculează: cum putem vedea frecvenţe mai mari două sunt 332 Hz şi 53.8 Hz. Calculul eroare minimă în tabelul eşantion le decoda la 336 Hz şi 59 Hz , cu o eroare de $ e_ {1} = 4 $ şi $ e_ {2} = 5.2 $, care să ne dea din nou numărul 0 .

Tonuri de apel: 1 frequecies mai mari de 332 Hz şi 53.8 Hz

Răspuns procedura pentru următoarele tonuri.

Cum de a reprezenta grafic spectrul

Pentru a reprezenta grafic monolateral FFT am folosit codul de mai jos:
Funcţia [ FSS, halfASpect, deltaFs ] = fftPlot ( TSEC, ECG )
% Calculeaza FFT pe semnalul eşantionat
fftSpect = FFT ( ECG ) ; numărul% din probe sunt nsamp = lungime ( TSEC ) ; % din coeffs FFT de transformare sunt atât de simmetric vom lua numai Intervalele de frecvenţă sunt distanţate de deltaF % FFT considera ca semnalul periodic: în cazul nostru ultimul semnal pentru TSEC% (sfârşitul anului) cca 32 (Hz) ' ) ; ylabel ( "FFT magnitudine ' ) ; sfârşitul


Cum de a detecta automat frecvenţele compun

Algoritmul parţial puse în aplicare pentru a decoda frecvenţelor este: 1) ia în considerare compononent cea mai mare frecventa in spectrul 2) se calculează distanţa dintre ea şi cealaltă 4x4 = 16 componente 3), compara distanţa minimă, cu un prag: în conformitate cu ITU- standardele T eroarea de frecvenţă trebuie să fie sub 1,5 \%. În cazul în care condiţia este îndeplinită de o componentă este găsit 4) scoateţi componenta cea mai importantă şi du-te la pasul 1 5) se oprească atunci când frecvenţele 2 sunt găsite
Un cod parţială la punerea în aplicare a algoritmului este:
Funcţia de căutare ( Y, FS, deltaFs )

% tabelul de frecvenţă redusă
fL = [ 941 , 852 , 770 , 697 ] ; % de masă de înaltă frecvenţă fH = [ 1209 , 1336 , 1447 , 1633 ] ; frecvenţele pliante% sunt: ​​FL = abs ( FL-Fs * cele ( 1 , lungime ( fL ) ) ) ; FH = ABS ( Fs * cele ( 1 , lungime ( fH ) ) -fH ) ; căutare% tabelul % M = [1,2,3, "A" , 4,5,6, "B", 7,8,9, "C", "*", 0, "#", "D"]; M = [ 1 , 2 , 3 , - 1 , 4 , 5 , 6 , - 1 , 7 , 8 , 9 , - 1 - 1 , 0, - 1 , - 1 ] ; %, reprezintă cea mai mare componentele una câte una cele mai mari = 0; minsL = [ ] ; minsH = [ ] ; pentru k = 1 : 1 : lungimea ( Y ) [ cel mai mare, indicele ] = max ( Y ) ; %, care şterge componenta de Y       Y ( index ) = 0; % găsi frecvenţa corespunzătoare       de frecvenţe = indicele * deltaFs;             freqV = frecvenţe * cele ( 1 , lungimea ( FL ) ) ;       fdiffH = abs ( freqV-FL ) ; % verificaţi diferenţa pentru frecvenţele minime       fdiffL = abs ( freqV-FL ) ; [ minL, lindex ] = min ( fdiffL ) ;       minsL = [ minsL minL ] ;       fdiffH = abs ( freqV-FH ) ; [ Minh, Hindex ] = min ( fdiffH ) ;       minsH = [ minsH Minh ] ; de căutare%, numai în spectrul de sus în cazul în care ( de frecvenţe> 300 )             lindex = - 1 ; sfârşitul dacă ( de frecvenţe < 200 )               Hindex = - 1 ; capăt în cazul în care ( lindex> 0 && Hindex> 0 ), pauza ; sfârşitul sfârşitul fprintf ( 'Detectat cifre este:% s \ n' , num2str ( M ( lindex, Hindex ) ) ) ; capăt


O abordare analogic

Pe lângă algoritmul Goertzel, o altă abordare digital sau analogic este de a folosi banck de 8 filtre benzii de trecere centrate pe frecvenţele în tabelul 1 (în cazul în care analog) sau din tabelul 2 (în cazul în digital).

Notă Finali

A se vedea, de asemenea,
   * Apelarea selectivă (utilizarea de DTMF în două-mod de radio)
   * Apelare in puls
   * Rotary apelare
   * Tastatura de telefon
   * Algoritmul Goertzel (utilizat pentru detectarea DTMF / decodare)
   * Multi-frecvenţă


Disclaimer

Am documenti qui pubblicati sono da considerarsi pubblici e liberamente distribuibili, o patto Che SE NE Citi La Fonte di provenienza. Tutti i documenti presenti su queste Pagine sono Stati scritti esclusivamente o scopo di ricerca, nessuna di queste analisi è STATA fatta pe Fini Commerciali, o dietro alcun tipo di compenso. Am documenti pubblicati presentano delle analisi puramente teoriche della struttura di programma ONU, în Nessun Caso IL è stato software-ul realmente disassemblato o modificato; Ogni corrispondenza presente tra i documenti e pubblicati Le Istruzioni del software-ul oggetto dell'analisi, è da ritenersi puramente casuale. Tutti i documenti vengono inviati în forma anonima Ed automaticamente pubblicati, am diritti di Tali opere appartengono esclusivamente al firmatario del Documento (SE presente), în Nessun Caso IL gestore di questo OSIM, o del serverul su CUI risiede, può essere ritenuto vinovat dei contenuti qui presenti, oltretutto IL gestore del OSIM nu e în Grado di risalire all'identità del mittente dei documenti. Tutti i documenti ed i fişier di questo OSIM nu presentano alcun tipo di garanzia, pertanto NE è sconsigliata un tutti la lettura o l'esecuzione, iată că personalul nu si asuma alcuna responsabilità pe quanto riguarda l'uso improprio di Tali documenti e / O fisier , è doveroso aggiungere Che Ogni riferimento o fatti cose o persone è da considerarsi PURAMENTE casuale. Tutti coloro Che potrebbero ritenersi moralmente offesi DAI contenuti di queste Pagine, sono tenuti anunţ uscire immediatamente da questo OSIM.
Vogliamo inoltre ricordare Che O inginerie inversă è uno strumento Tecnológico Grande di Potenza Ed importanza, senza di Esso non sarebbe Possibile Creare antivirus, scoprire funzioni malevole e dichiarate non all'interno di ONU programma di Pubblico utilizzo. Non sarebbe Possibile scoprire, în assenza di ONU Sistema sicuro per il controllo dell'integrità, SE il "Tal" programma è realmente quello che l'ha utente scelto di installare Ed eseguire, ne sarebbe Possibile continuare lo Sviluppo di quei programmi (o L "utilizzo di Quelle periferiche) ritenuti obsoleti e non Più supportati Dalle fonti ufficiali.


http://quequero.org/DTMF_decoding#DTMF_decoding_a_naive_approach

Niciun comentariu:

Trimiteți un comentariu