اطلاعیه

Collapse
No announcement yet.

کمک در مورد دیکد کردن DTMF (مورد ضروری)

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کمک در مورد دیکد کردن DTMF (مورد ضروری)

    سلام خدمت اساتید بزرگوار
    من می خوام یه دستگاه درست کنم که بشه با اون سیگنال های Busy tone , Ring back و Dial tone رو تشخیص داد ، این مدار رو با یه فرکانس متر که به پایه کانتر میکرو وصل می شد درست کردم ، جواب می داد ولی خطاش قابل چشم پوشی نبود
    الان میخوام از الگوریتم گورتزل استفاده کنم ولی جواب درستی نمی گیرم
    می تونید تو این برنامه کمک کنید و بگید که چه جوری می شه تشخیص داد که الان خط تلفن در چه وضعیته ؟؟
    خواهش میکنم کمکم کنید ضروریه
    اینم نمونه برنامه :
    کد:
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    $swstack = 220
    $hwstack = 220
    $framesize = 64
    
    $baud = 19200
    
    
    Const N = 205
    Const Adc_prescaler = 128
    Const Sample_rate = Int(_xtal / Adc_prescaler / 13)
    Const Pi = 3.14159265358979
    '-------------------------------------------------------------------------------
    Const F_busy_signal_low = 480
    Const K_busy_signal_low = Int((n * F_busy_signal_low) / Sample_rate)
    Const W_busy_signal_low =(2 * Pi * K_busy_signal_low) / N
    Const Cosin_busy_signal_low = Cos(w_busy_signal_low)
    Const Sine_busy_signal_low = Sin(w_busy_signal_low)
    Const Coeff_busy_signal_low = 2 * Cosin_busy_signal_low
    Const F_busy_signal_high = 620
    Const K_busy_signal_high = Int((n * F_busy_signal_high) / Sample_rate)
    Const W_busy_signal_high =(2 * Pi * K_busy_signal_high) / N
    Const Cosin_busy_signal_high = Cos(w_busy_signal_high)
    Const Sine_busy_signal_high = Sin(w_busy_signal_high)
    Const Coeff_busy_signal_high = 2 * Cosin_busy_signal_high
    '-------------------------------------------------------------------------------
    Const F_dial_tone_low = 350
    Const K_dial_tone_low = Int((n * F_dial_tone_low) / Sample_rate)
    Const W_dial_tone_low =(2 * Pi * K_dial_tone_low) / N
    Const Cosin_dial_tone_low = Cos(w_dial_tone_low)
    Const Sine_dial_tone_low = Sin(w_dial_tone_low)
    Const Coeff_dial_tone_low = 2 * Cosin_dial_tone_low
    Const F_dial_tone_high = 440
    Const K_dial_tone_high = Int((n * F_dial_tone_high) / Sample_rate)
    Const W_dial_tone_high =(2 * Pi * K_dial_tone_high) / N
    Const Cosin_dial_tone_high = Cos(w_dial_tone_high)
    Const Sine_dial_tone_high = Sin(w_dial_tone_high)
    Const Coeff_dial_tone_high = 2 * Cosin_dial_tone_high
    '-------------------------------------------------------------------------------
    Const F_ring_back_low = 440
    Const K_ring_back_low = Int((n * F_ring_back_low) / Sample_rate)
    Const W_ring_back_low =(2 * Pi * K_ring_back_low) / N
    Const Cosin_ring_back_low = Cos(w_ring_back_low)
    Const Sine_ring_back_low = Sin(w_ring_back_low)
    Const Coeff_ring_back_low = 2 * Cosin_ring_back_low
    Const F_ring_back_high = 480
    Const K_ring_back_high = Int((n * F_ring_back_high) / Sample_rate)
    Const W_ring_back_high =(2 * Pi * K_ring_back_high) / N
    Const Cosin_ring_back_high = Cos(w_ring_back_high)
    Const Sine_ring_back_high = Sin(w_ring_back_high)
    Const Coeff_ring_back_high = 2 * Cosin_ring_back_high
    '-------------------------------------------------------------------------------
    
    Config Adc = Single , Prescaler = Adc_prescaler , Reference = Avcc
    
    Dim Adc_buff(n) As Word
    Dim Magnitude(6) As Long
    
    Dim I As Byte
    Dim Real As Single , Imaj As Single
    Dim Y0 As Single , Y1 As Single , Y2 As Single
    Dim Mag As Long
    Dim Sc As Byte
    Dim Mag_avg As Word
    Dim Avg As Byte
    
    Dim An As Byte
    
    Dim Ka As Byte
    
    
    Dim Data1 As Single
    Dim Data2 As Single
    Dim Data3 As Single
    Dim Data4 As Word
    
    Do
    
    
       Start Adc
       For Sc = 1 To N
         Adc_buff(sc) = Getadc(0)
       Next
       Stop Adc
    
       For An = 0 To 5
    
         Data1 = Lookup(an , Coeff_table)
         Data2 = Lookup(an , Sine_table)
         Data3 = Lookup(an , Cosin_table)
    
         Y1 = 0 : Y2 = 0
    
         For I = 1 To N
          Y0 = Data1 * Y1
          Y0 = Y0 - Y2
          Y0 = Y0 + Adc_buff(i)
          Y1 = Y0
          Y2 = Y1
         Next
    
         Real = Y2 * Data3
         Real = Y1 - Real
         Imaj = Y2 * Data2
         Imaj = Imaj ^ 2
         Real = Real ^ 2
         Mag = Imaj + Real
    
         Magnitude(an + 1) = Sqr(mag)
    
       Next
    
       For An = 1 To 6
         Ka = An - 1
         Data4 = Lookup(ka , Frequency_table)
         Print Data4 ; "hz ->" ; Magnitude(an)
       Next
    
       Print "---------------------------"
    
    Loop
    End
    
    
    
    
    
    Frequency_table:
      Data F_busy_signal_high% , F_busy_signal_low% , F_dial_tone_high% , F_dial_tone_low%
      Data F_ring_back_high% , F_ring_back_low%
    Cosin_table:
      Data Cosin_busy_signal_high , Cosin_busy_signal_low , Cosin_dial_tone_high , Cosin_dial_tone_low
      Data Cosin_ring_back_high , Cosin_ring_back_low
    Sine_table:
      Data Sine_busy_signal_high , Sine_busy_signal_low , Sine_dial_tone_high , Sine_dial_tone_low
      Data Sine_ring_back_high , Sine_ring_back_low
    Coeff_table:
      Data Coeff_busy_signal_high , Coeff_busy_signal_low , Coeff_dial_tone_high , Coeff_dial_tone_low
      Data Coeff_ring_back_high , Coeff_ring_back_low
    دلا خو کن به تنهایی که از تنها بلا خیزد

    #2
    پاسخ : کمک در مورد دیکد کردن DTMF (مورد ضروری)

    هم اکنون نیازمند یاری RGB تان هستیم
    دلا خو کن به تنهایی که از تنها بلا خیزد

    دیدگاه


      #3
      پاسخ : کمک در مورد دیکد کردن DTMF (مورد ضروری)

      از آی سی MT8870 استفاده کن

      دیدگاه


        #4
        پاسخ : کمک در مورد دیکد کردن DTMF (مورد ضروری)

        می خوام بدون IC واسط باشه
        دلا خو کن به تنهایی که از تنها بلا خیزد

        دیدگاه


          #5
          پاسخ : کمک در مورد دیکد کردن DTMF (مورد ضروری)

          از اساتید ، کسی حاضر به کمک نیست ؟
          دلا خو کن به تنهایی که از تنها بلا خیزد

          دیدگاه


            #6
            پاسخ : کمک در مورد دیکد کردن DTMF (مورد ضروری)

            اگه یکی ، محض رضای خدا یه ذره کمک میکرد ، ممنون میشدم
            دلا خو کن به تنهایی که از تنها بلا خیزد

            دیدگاه


              #7
              پاسخ : کمک در مورد دیکد کردن DTMF (مورد ضروری)

              منم میخاستم با میکرو اینکارو بکنم ولی با الگوریتم گورتز آشنا نیستم میشه یکم در موردش بگی؟ میدونم که تون ها 2 تا فرکانس بالای 1000 و زیر 1000 داره که رو هم سواره

              دیدگاه


                #8
                پاسخ : کمک در مورد دیکد کردن DTMF (مورد ضروری)

                والا من یه چیزایی خوندم ، یه کارایی کردم ولی به جایی نرسیدم
                دلا خو کن به تنهایی که از تنها بلا خیزد

                دیدگاه

                لطفا صبر کنید...
                X