سلام خدمت اساتید بزرگوار
من می خوام یه دستگاه درست کنم که بشه با اون سیگنال های Busy tone , Ring back و Dial tone رو تشخیص داد ، این مدار رو با یه فرکانس متر که به پایه کانتر میکرو وصل می شد درست کردم ، جواب می داد ولی خطاش قابل چشم پوشی نبود
الان میخوام از الگوریتم گورتزل استفاده کنم ولی جواب درستی نمی گیرم
می تونید تو این برنامه کمک کنید و بگید که چه جوری می شه تشخیص داد که الان خط تلفن در چه وضعیته ؟؟
خواهش میکنم کمکم کنید ضروریه
اینم نمونه برنامه :
من می خوام یه دستگاه درست کنم که بشه با اون سیگنال های 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




دیدگاه