DTMF Sinyalleri Üretmek İçin Bir Yöntem

Başlatan Serk@n, 02 Şubat 2020, 12:29:34

Serk@n

Herkese iyi çalışmalar diliyorum.

Algoritma ve programcılık konusunda bilgi seviyesi yüksek bir kimse değilim, fakat matematiği seviyorum. DTMF tonları üretme konusunda kendi bulduğum bir yöntemi sizinle paylaşmak istiyorum. Zannederim, bu işlem PIC BASIC'te sadece bir komutla bu işlem yapılabiliyor. Farklı MCU veya programlama dillerinde bu konuda sorun yaşayan arkadaşlar varsa, bu yöntemi kullanabilirler.

İşin açıkçası paylaşım yaptığım şeyin kıymeti hakkında da bir malumat sahibi değilim. Kendimce bir çözüm buldum, DTMF tonlarını ölçen bir telefon kontrol cihazında denemelerimi yaptım, santrale bağlayarak arama işlemlerini gerçekleştirdim. Bütün test ve denemelerimde olumlu sonuçlar aldım. Sizlerin mesajıma vereceğiniz olumlu veya eleştirel dönüşümler ile paylaşım yaptığım şeyin kıymeti hakkında ben de bir fikir sahibi olabilirim, diye düşünüyorum. 

Sözü fazla uzatmadan bulduğum çözümü anlatıyorum:
--- MCU programımda 8 Khz.lik bir timer kurdum. Yani 125uS.de bir bu işlem yapılacak.
--- Diğer taraftan Excel programından faydalanarak yatay ve dikey değerleri belli olan DTMF frekanslarının bir sinüs dalgası olarak 125uS.de hangi (0-360) derecede bulunduğunu hesaplattım
--- Bu derecelerin sin(x) değerlerini gösteren bir tablo oluşturdum.
--- Sinüs değerleri 0 ve 1 arasında değerler alıyor. Sonuçları 127 ile çarptım.
--- Sonuç olarak bu frekansların 0 ve 127 arasında değişen 7 bitlik değerler elde ettim. Bu değerler bir müddet sonra döngüye giriyor. Tekrarlanan kısımları atarak bu değerleri bir dizinin içine yazdım.
--- 8 Khz.lik timer, misal '1' rakamının tonunu üretecekse yatay1 ve dikey1 dizininden değerleri sırasıyla alıp topluyor.
--- Böylelikle 8 Khz. ve 8 bit çözünürlükte DTMF sinyalleri oluşturulmuş oluyor.
Yöntemimi beğenen arkadaşlar olursa, Excel ortamında istedikleri bir timer frekansında, istedikleri değerlerde sinüs dalgalarını nasıl oluşturacabilecekleri hususunda bilgi veren bir paylaşım yapabilirim.

Son olarak;
--- Arkadaşlar, bu değerler MCU çıkışında analog olarak yazılmalıdır. PWM çıkışlarda çalışıp/çalışmayacağı hakkında herhangi bir bilgi ve deneyimim yok. 
--- Diğer husus, bu değerleri programınızda kullanabilmek için 1866 baytlık bir alanı feda etmeniz gerekiyor.

//697 Hz.
frekansYatay1[264]= {
64, 97, 120,  127,  115,  89, 55, 24, 4,  2,  18, 48, 82, 111,  126,  123,  103,  71, 38, 12, 1,  9,  33, 66, 98,
121,  127,  114,  87, 54, 23, 4,  3,  19, 49, 83, 112,  126,  122,  102,  70, 36, 11, 1,  9,  34, 67, 99, 121,  127,
113,  86, 52, 22, 4,  3,  21, 51, 85, 113,  126,  122,  100,  68, 35, 10, 1,  10, 35, 69, 101,  122,  126,  113,  85,
50, 20, 3,  4,  22, 52, 86, 114,  127,  121,  99, 67, 34, 9,  1,  11, 37, 70, 102,  123,  126,  112,  83, 49, 19,
3,  4,  23, 54, 88, 115,  127,  121,  98, 65, 32, 9,  1,  12, 38, 72, 103,  123,  126,  110,  82, 48, 18, 2,  5,
24, 55, 89, 115,  127,  120,  97, 64, 31, 8,  1,  13, 39, 73, 104,  124,  126,  109,  80, 46, 17, 2,  5,  25, 57,
90, 116,  127,  119,  95, 62, 30, 7,  1,  14, 41, 75, 105,  124,  125,  108,  79, 45, 16, 2,  6,  26, 58, 92, 117,
127,  118,  94, 61, 28, 7,  1,  15, 42, 76, 107,  125,  125,  107,  77, 43, 15, 2,  6,  28, 60, 93, 118,  127,  118,
93, 59, 27, 6,  2,  16, 44, 78, 108,  125,  124,  106,  76, 42, 14, 1,  7,  29, 61, 94, 119,  127,  117,  91, 58,
26, 5,  2,  17, 45, 79, 109,  125,  124,  105,  74, 40, 13, 1,  7,  30, 63, 96, 119,  127,  116,  90, 56, 25, 5,
2,  18, 47, 81, 110,  126,  123,  104,  73, 39, 12, 1,  8,  32,
};

//770 Hz.
frekansYatay2[187]={
64,  100,  123,  125,  106,  71, 35, 8,  1,  17, 49, 87, 116,  127,  116,  86, 48, 16, 1,  9,  35, 72, 106,  125,  123,
99, 63, 27, 5,  3,  23, 58, 94, 120,  126,  110,  78, 40, 11, 1,  13, 43, 81, 112,  127,  119,  92, 55, 21, 2,
6,  30, 66, 101,  124,  125,  104,  69, 33, 7,  2,  18, 51, 89, 117,  127,  114,  84, 46, 15, 1,  10, 37, 74, 108,
126,  122,  97, 61, 26, 4,  4,  25, 60, 96, 121,  126,  109,  76, 39, 10, 1,  14, 45, 83, 113,  127,  118,  90, 53,
19, 2,  7,  32, 68, 103,  124,  124,  103,  67, 31, 6,  2,  20, 53, 90, 118,  127,  113,  82, 45, 14, 1,  11, 39,
76, 109,  126,  121,  96, 59, 24, 4,  4,  26, 62, 98, 122,  126,  107,  74, 37, 9,  1,  15, 47, 84, 115,  127,  117,
88, 51, 18, 2,  7,  33, 70, 105,  125,  123,  101,  65, 29, 6,  3,  21, 55, 92, 119,  127,  112,  80, 43, 13, 1,
12, 41, 78, 111,  126,  120,  94, 57, 23, 3,  5,  28,
};

//852 Hz.
frekansYatay3[169]={
64,  103,  125,  121,  92, 51, 16, 1,  14, 48, 89, 119,  126,  106,  68, 28, 4,  5,  33, 73, 110,  127,  117,  84, 42,
10, 1,  20, 57, 97, 123,  124,  98, 58, 21, 2,  10, 41, 82, 116,  127,  111,  75, 34, 6,  3,  27, 66, 105,  126,
120,  90, 49, 14, 1,  15, 50, 91, 120,  126,  104,  65, 26, 3,  6,  35, 75, 111,  127,  115,  82, 40, 9,  2,  21,
59, 99, 124,  123,  97, 56, 19, 1,  11, 43, 84, 117,  127,  109,  72, 32, 5,  4,  28, 68, 106,  126,  119,  88, 47,
13, 1,  16, 52, 93, 121,  125,  102,  63, 24, 3,  7,  36, 78, 113,  127,  114,  79, 38, 8,  2,  23, 61, 101,  125,
122,  95, 54, 18, 1,  12, 45, 86, 118,  126,  108,  70, 30, 4,  5,  30, 71, 108,  126,  118,  86, 45, 12, 1,  18,
54, 95, 122,  125,  101,  61, 23, 2,  8,  38, 80, 114,  127,  113,  77, 36, 7,  3,  24,
};

//941 Hz.
frekansYatay4[17] ={
64,  106,  127,  114,  76, 31, 3,  8,  41, 87, 120,  125,  97, 53, 14, 1,  21,
};

//1209 Hz.
frekansDikey1[225]={
64,  115,  124,  82, 26, 1,  29, 86, 125,  113,  60, 10, 6,  50, 106,  127,  95, 37, 2,  18, 73, 120,  120,  74, 19,
2,  37, 94, 127,  106,  51, 6,  10, 59, 112,  125,  87, 30, 1,  25, 82, 123,  116,  65, 13, 4,  45, 102,  127,  99,
42, 3,  15, 68, 117,  122,  79, 23, 1,  32, 90, 126,  110,  56, 8,  8,  54, 109,  126,  92, 34, 2,  21, 77, 122,
118,  70, 16, 3,  40, 98, 127,  103,  47, 5,  12, 63, 114,  124,  83, 27, 1,  28, 85, 125,  113,  61, 11, 5,  49,
105,  127,  96, 39, 2,  18, 72, 119,  121,  75, 20, 2,  36, 93, 126,  107,  52, 7,  9,  58, 111,  125,  88, 31, 1,
24, 80, 123,  116,  66, 14, 4,  44, 101,  127,  100,  43, 4,  14, 67, 117,  123,  80, 24, 1,  31, 89, 126,  111,  57,
9,  7,  53, 108,  126,  93, 35, 2,  20, 75, 121,  119,  71, 17, 2,  39, 97, 127,  104,  48, 5,  11, 61, 114,  124,
85, 28, 1,  27, 84, 124,  114,  62, 12, 5,  48, 104,  127,  97, 40, 3,  17, 70, 119,  121,  76, 21, 2,  35, 92,
126,  108,  53, 7,  9,  56, 110,  126,  89, 32, 1,  23, 79, 123,  117,  67, 15, 3,  43, 100,  127,  101,  45, 4,  14,
};

//1336 Hz.
frekansDikey2[503] ={
64,  119,  118,  64, 9,  10, 65, 119,  118,  63, 9,  10, 66, 119,  118,  62, 8,  11, 66, 120,  117,  61, 8,  11, 67,
120,  117,  60, 8,  11, 68, 120,  116,  60, 7,  12, 69, 121,  116,  59, 7,  12, 70, 121,  115,  58, 7,  13, 70, 121,
115,  57, 6,  13, 71, 122,  114,  56, 6,  14, 72, 122,  114,  56, 6,  14, 73, 122,  114,  55, 5,  15, 73, 123,  113,
54, 5,  15, 74, 123,  113,  53, 5,  16, 75, 123,  112,  53, 5,  16, 76, 124,  112,  52, 4,  17, 77, 124,  111,  51,
4,  17, 77, 124,  110,  50, 4,  18, 78, 124,  110,  49, 4,  18, 79, 124,  109,  49, 3,  19, 80, 125,  109,  48, 3,
19, 80, 125,  108,  47, 3,  20, 81, 125,  108,  46, 3,  21, 82, 125,  107,  46, 3,  21, 83, 125,  107,  45, 2,  22,
83, 126,  106,  44, 2,  22, 84, 126,  105,  43, 2,  23, 85, 126,  105,  43, 2,  24, 86, 126,  104,  42, 2,  24, 86,
126,  104,  41, 2,  25, 87, 126,  103,  40, 2,  25, 88, 126,  102,  40, 1,  26, 89, 127,  102,  39, 1,  27, 89, 127,
101,  38, 1,  27, 90, 127,  100,  38, 1,  28, 91, 127,  100,  37, 1,  29, 92, 127,  99, 36, 1,  29, 92, 127,  98,
35, 1,  30, 93, 127,  98, 35, 1,  31, 94, 127,  97, 34, 1,  31, 94, 127,  96, 33, 1,  32, 95, 127,  96, 33,
1,  33, 96, 127,  95, 32, 1,  33, 96, 127,  94, 31, 1,  34, 97, 127,  94, 31, 1,  35, 98, 127,  93, 30, 1,
35, 98, 127,  92, 29, 1,  36, 99, 127,  92, 29, 1,  37, 100,  127,  91, 28, 1,  38, 100,  127,  90, 27, 1,  38,
101,  127,  89, 27, 1,  39, 102,  127,  89, 26, 1,  40, 102,  126,  88, 25, 2,  40, 103,  126,  87, 25, 2,  41, 104,
126,  86, 24, 2,  42, 104,  126,  86, 24, 2,  43, 105,  126,  85, 23, 2,  43, 105,  126,  84, 22, 2,  44, 106,  126,
83, 22, 2,  45, 107,  125,  83, 21, 3,  46, 107,  125,  82, 21, 3,  46, 108,  125,  81, 20, 3,  47, 108,  125,  80,
19, 3,  48, 109,  125,  80, 19, 3,  49, 109,  124,  79, 18, 4,  49, 110,  124,  78, 18, 4,  50, 110,  124,  77, 17,
4,  51, 111,  124,  77, 17, 4,  52, 112,  124,  76, 16, 5,  53, 112,  123,  75, 16, 5,  53, 113,  123,  74, 15, 5,
54, 113,  123,  73, 15, 5,  55, 114,  122,  73, 14, 6,  56, 114,  122,  72, 14, 6,  56, 114,  122,  71, 13, 6,  57,
115,  121,  70, 13, 7,  58, 115,  121,  70, 12, 7,  59, 116,  121,  69, 12, 7,  60, 116,  120,  68, 11, 8,  60, 117,
120,  67, 11, 8,  61, 117,  120,  66, 11, 8,  62, 118,  119,  66, 10, 9,  63, 118,  119,  65, 10, 9,  64, 118,  119,
64, 9,  10,
};

//1477 Hz.
frekansDikey3[65]={
64,  122,  110,  43, 1,  35, 103,  125,  73, 10, 12, 76, 126,  101,  32, 1,  46, 112,  120,  61, 5,  20, 88, 127,  90,
22, 4,  58, 119,  114,  49, 2,  30, 99, 126,  79, 14, 9,  70, 124,  106,  37, 1,  40, 108,  123,  67, 7,  16, 82,
127,  96, 27, 3,  52, 116,  117,  55, 3,  25, 93, 127,  85, 18, 6, 
};

//1633 Hz.
frekansDikey4[436]={
64,  124,  98, 23, 6,  72, 126,  91, 17, 10, 80, 127,  84, 12, 15, 88, 127,  76, 8,  20, 95, 125,  68, 5,  27,
102,  123,  60, 2,  34, 108,  120,  51, 1,  41, 114,  115,  44, 1,  49, 118,  110,  36, 2,  57, 122,  104,  29, 4,  65,
125,  98, 22, 7,  73, 126,  90, 17, 11, 81, 127,  83, 12, 15, 89, 127,  75, 8,  21, 96, 125,  67, 4,  27, 103,
123,  59, 2,  34, 109,  119,  51, 1,  42, 114,  115,  43, 1,  49, 119,  110,  35, 2,  58, 122,  104,  28, 4,  66, 125,
97, 22, 7,  74, 126,  90, 16, 11, 82, 127,  82, 11, 16, 89, 126,  74, 7,  22, 97, 125,  66, 4,  28, 103,  122,
58, 2,  35, 109,  119,  50, 1,  42, 115,  114,  42, 1,  50, 119,  109,  35, 2,  58, 123,  103,  28, 4,  67, 125,  96,
21, 7,  75, 127,  89, 16, 12, 83, 127,  81, 11, 17, 90, 126,  73, 7,  22, 97, 125,  65, 4,  29, 104,  122,  57,
2,  36, 110,  118,  49, 1,  43, 115,  114,  41, 1,  51, 119,  108,  34, 2,  59, 123,  102,  27, 5,  67, 125,  95, 21,
8,  75, 127,  88, 15, 12, 83, 127,  80, 10, 17, 91, 126,  72, 7,  23, 98, 124,  64, 4,  29, 105,  122,  56, 2,
37, 111,  118,  48, 1,  44, 116,  113,  40, 1,  52, 120,  108,  33, 3,  60, 123,  102,  26, 5,  68, 125,  95, 20, 8,
76, 127,  87, 15, 13, 84, 127,  80, 10, 18, 92, 126,  72, 6,  24, 99, 124,  63, 3,  30, 105,  121,  55, 2,  37,
111,  118,  47, 1,  45, 116,  113,  40, 1,  53, 120,  107,  32, 3,  61, 123,  101,  26, 5,  69, 126,  94, 19, 9,  77,
127,  87, 14, 13, 85, 127,  79, 9,  18, 92, 126,  71, 6,  24, 99, 124,  63, 3,  31, 106,  121,  54, 2,  38, 112,
117,  47, 1,  46, 117,  112,  39, 1,  54, 121,  107,  32, 3,  62, 124,  100,  25, 6,  70, 126,  93, 19, 9,  78, 127,
86, 14, 14, 86, 127,  78, 9,  19, 93, 126,  70, 6,  25, 100,  124,  62, 3,  32, 107,  121,  54, 1,  39, 112,  117,
46, 1,  46, 117,  112,  38, 2,  54, 121,  106,  31, 3,  63, 124,  100,  24, 6,  71, 126,  93, 18, 9,  79, 127,  85,
13, 14, 87, 127,  77, 9,  19, 94, 126,  69, 5,  26, 101,  123,  61, 3,  32, 107,  120,  53, 1,  40, 113,  116,  45,
1,  47, 117,  111,  37, 2,  55, 121,  105,  30, 3,
};
Bildiklerimize göre hareket edersek bilmediklerimizi de öğrenebiliriz.

Hattuşa

slm yapmak istediğiniz şöyle bir şey mi?
eklentiyi pc ye kurduğunuzda programı çalıştırıp çıkartmak istediğiniz sinus sinyalinin frekans değerini belirtiyorsunuz, ayrıca sinüsün miktarı, açısı vs ile de oynayarak istenen frekansı 8 bit olarak alabiliyorsunuz.

Serk@n

Bildiklerimize göre hareket edersek bilmediklerimizi de öğrenebiliriz.

Powered by EzPortal