سلام خدمت اساتید بزرگوار
من می خوام یه دستگاه درست کنم که بشه با اون سیگنال های 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
دیدگاه