عناوين متن

زبانهاي برنامه‌نويسيAI،  برنامه‌نويسي تابعي ، برنامه‌نويسي تابعي در Lisp ، A- Syntax (نحو) و semantic هاي (معاني) Lisp ،  ليست انواع داده ،  تعريف توابع جديد ، تعريف ساختارهاي كنترلي ،  تعريف توابع بازگشتي ،  توابع مرتبه بالا ، ساير زبانهاي برنامه‌نويسي تابعي غير از Lisp ، برنامه‌نويسي منطقي در Prolog ، ساير روشهاي برنامه‌نويسي
 

واژه نامه
بندهاي برنامه Prolog
شامل مجموعه‌اي از جملات بنام بندها هستند كه براي نشان دادن داده‌ها و برنامه‌ها بكار مي‌روند.
تابع مرتبه بالا تعريف تابعي است كه اجازه مي‌دهد آرگومانها يا مقدار بازگشتي تابع، مقدار توابع باشد. نماد ساختار ليستها اغلب نشان‌دهنده نحوه استفاده از ليست ساختاري داده هستند، كه يك عنصر ليست ممكن است نماد يا ليست ديگر باشد. ليستها ساختاري مركزي Lisp هستند كه براي نشان دادن داده‌ها و برنامه‌ها بكار مي‌روند. بازگشت تكنيكي الگوريتمي براي انجام يك كار است كه يك تابع با بعضي از قسمتهاي كار خودش را فراخواني مي‌كند.
محاسبات نمادين برنامه‌نويسي AI (اساساً) شامل دستكاري نمادها است نه اعداد. اين نمادها مي‌توانند اشياء در جهان و ارتباط بين آن اشياء را نشان دهند- ساختارهاي پيچيده نمادها نياز به دانش ما از جهان دارند. واژه ساختار اساسي داده‌ها در Prolog واژه‌اي است كه مي‌تواند يك ثابت، يك متغير يا يك ساختار باشد. ساختارها موضوعات ريز محاسبات گزاره‌اي را نشان مي‌دهند و شامل يك عملگر نام و يك پارامتر ليست هستند.
زبانهاي برنامه‌نويسي هوش مصنوعي(AI) ابزار اصلي بررسي و ساخت برنامه‌هاي كامپيوتري هستند كه مي‌توانند در شبيه‌سازي فرايندهاي هوشمند مانند يادگيري،‌ استدلال و فهم اطلاعات نمادين بكار بروند. هر چند اخيراً زبان كامپيوتر اصولاً براي استفاده از كامپيوترها براي انجام محاسبات با اعداد طراحي شده بود، اما بزودي دريافتند كه رشته‌اي از بيتها نه تنها اعداد بلكه مي‌توانند اشياي دلخواه را نيز نمايش دهند. عمليات روي ويژه‌گي‌ها يا نمادها مي‌تواند با استفاده از قوانين براي ايجاد، انتساب يا دستكاري نشان داده شود. اين تصور از محاسبات نمادين بعنوان تعريف الگوريتمهايي كه هر نوع اطلاعات را پردازش مي‌كنند و بنابراين مي‌تواند براي شبيه‌سازي هوش انسان بكار برود مناسب است.
بزودي برنامه نويسي با نمادها كه نياز به سطح بالايي از چكيدگي دارند توليد مي‌شوند، غير از امكاناتي كه با زبانهاي برنامه نويسي مخصوص پردازش اعداد ممكن بود مانند فرترن
 
I-زبانهاي برنامه نويسي AI
در AI خودكار كردن يا برنامه‌نويسي همه جنبه‌هاي شناخت انساني بوسيله بنيادهاي شناخت علمي روشهاي نمادين و غير نمادين AI، پردازش زبان طبيعي، ديد كامپيوتري و سيستمهاي تكامل يا سازگار مطرح مي‌شود. لازم است دامنه مسئله‌هاي خيلي پيچيده در ابتداي مرحله برنامه‌نويسي يك مسئله AI معين، مشخص شود كه كافي نيست. تنها بوسيله تعامل و افزايش اصلاحات خصوصيات بسيار دقيق ممكن است. در حقيقت مسئله‌هاي معمول AI به بسياري از زمينه‌هاي خاص گرايش دارند، بنابراين روشهاي ذهني بايد بوسيله توليد و آزمايش روشها بطور تجربي توسعه يابند(مشهور به نمونه سازي سريع). در اينصورت برنامه‌نويسي AI بطور قابل توجهي با روشهاي استاندارد مهندسي نرم‌افزار متفاوت بوده زيرا برنامه‌نويسي معمولا از يك مشخصات رسمي با جزئيات شروع مي‌شود. در برنامه‌نويسي  AI پياده‌سازي در واقع جزئي از پردازش مشخصات مسئله است.  به اقتضاي طبيعت مسئله‌هاي  AI برنامه‌نويسي AI مزاياي بسياري دارد اگر زبانهاي برنامه نويسي، برنامه‌نويسAI را آزاد بگذارند و در بسياري از ساختارهاي فني محدود نكنند (مانند ساختار انواع داده‌اي جديد سطح پايين، دستيابي دستي به حافظه). ترجيحاً سبك برنامه‌نويسي اعلاني براي استفاده در ساختارهاي پيش‌ساخته داده‌اي سطح بالا(مانند ليستها و درختها) و عمليات(مانند تطبيق الگوها) مناسب است، بنابراين محاسبات نمادين سطح خلاصه‌سازي بيشتري نسبت به آنچه كه با زبانهاي دستوري استاندارد مانند فرترن، پاسكال يا C امكان‌پذير خواهد بود را پشتيباني مي‌كند. البته طبقه‌بندي خلاصه سازي آسان نيست،‌ زيرا تدوين برنامه‌هاي AI روي كامپيوترهاي استاندارد وان نيومن نمي‌تواند به كارآمدي زبانهاي دستوري باشد. هر چند يك مسئله مسلم AI فهم آن است (حداقل جزئيات) امكان دارد با تنظيم مجدد آن به شكل خصوصيات جزئي شده با بكار بردن يك زبان دستوري پياده‌ سازي مجدد شود. با توجه به نيازمنديهاي محاسبات نمادين و برنامه‌نويسي  AI دو الگوي  جديد برنامه‌نويسي كه به سبك دستوري پيشنهاد مي‌شوند بوجود مي‌‌آيد: سبك برنامه‌نويسي تابعي و منطقي. هر دو بر مبناي رياضيات طرح‌ريزي شده‌اند، يعني نظريه توابع بازگشتي و منطق رسمي. اولين زبان برنامه‌نويسي AI كاربردي كه هنوز هم بطور گسترده استفاده مي‌شود زبان برنامه‌نويسي Lisp است كه در اواخر دهه 1950 توسط جان مك كارتي توسعه يافته است. Lisp برمبناي نظريه توابع رياضي و خلاصه‌سازي Lambda است. تعدادي از كاربردهاي مهم و موثرAI در Lisp نوشته شده است. كه ما بعضي از جزئيات اين زبان برنامه‌نويسي را در اين مقاله شرح خواهيم داد. در اوايل دهه 1970 يك الگوي برنامه‌نويسي جديد بنام برنامه‌نويسي منطقي بر اساس محاسبات گزاره‌اي بوجود آمد. اولين و مهمترين زبان برنامه‌نويسي منطقي Prolog است كه توسط آلن كالمرار، رابرت كوالسكي و فيليپ راسل توسعه يافته است. مسئله‌ها در prolog بصورت حقايق، بديهيات و قوانين منطقي براي استنباط حقايق جديد بيان مي‌شوند. Prolog  با قانون رياضي در محاسبات گزاره‌اي و نتايج نظري بدست آمده در زمينه اثبات قضيه خودكار در اواخر دهه 1960 بنا نهاده شده است.


II- برنامه نويسي تابعي
يك تابع رياضي نگاشتي از يك مجموعه (دامنه) به مجموعه ديگر(برد) است. تعريف يك تابع توصيف اين نگاشت است كه يا بطور صريح بوسيله شمارش و يا بطور ضمني بوسيله يك عبارت است. تعريف يك تابع بوسيله نام تابع كه بدنبال آن ليستي از پارامترها در داخل پرانتز قرار دارند و به دنبال آن نيز عبارت توصيفي نگاشت است مشخص مي شود مانند:
X يك عدد حقيقي است cube(X) ≡ X X X , where X is a real number.
آلونسو چارچ توابع بي نام را با استفاده از نمادLambda معرفي مي كند. يك عبارت Lambda  پارامترها و نگاشت تابع را با استفاده از عملگر X مشخص مي كند, مانند λ (X)X X  X آن خودش تابع است, بنابراين شرح بكار رفته در مثال تابع بي نام با يك آرگومان مشخص است. براي مثال:(λ (X) X  X  X)(4).
برنامه نويسي در يك زبان تابعي شامل ساختمان تعريف توابع و بكاربردن كامپيوتر براي ارزيابي عبارات است. يعني بكاربردن توابع با آرگومانهاي واقعي. كار اصلي برنامه نويسي پس از ساخت يك تابع براي يك مساله خاص تركيب توابع تعريف شده قبلي با توجه به اصول رياضي است. كار اصلي كامپيوتر ارزيابي توابع فراخواني شده و چاپ حاصل مقادير تابع است. در اين روش كامپيوتر مشابه يك كامپيوتر جيبي معمولي بكار مي رود البته بسيار انعطاف پذيرتر و قدرتمندتر. يك خاصيت برنامه نويسي تابعي اين است كه اگر عبارت به خوبي مقداردهي شود آنگاه ترتيب انجام ارزيابي كامپيوتر در نتايج ارزيابي تاثيري ندارد. بنابراين نتيجه ارزيابي يك عبارت تنها مقدار آن است. بدين معني است كه در يك زبان تابعي ناب اثرات جانبي وجود ندارد. اثرات جانبي در مدل موقعيت هاي حافظه به متغيرها متصل شده اند.بنابراين در يك زبان برنامه نويسي ناب در مفهوم زبانهاي دستوري متغير وجود ندارد. روشهاي اصلي كنترل جريان، بازگشت (تكرار) و عبارات شرطي هستند. اين كاملاً با زبانهاي دستوري در مفهوم اساسي كنترل ترتيب و تكرار متفاوت است. برنامه نويسي تابعي نيز خصوصيات توابع مرتبه بالا را پشتيباني مي كند. تابع مرتبه بالا تعريف تابعي است كه اجازه مي دهد آرگومانها يا مقدار بازگشتي تابع, مقدار توابع باشند. همه اين جوانب با هم مخصوصاً آخري از اصلي ترين مزاياي سبك برنامه نويسي تابعي در برابر سبك برنامه نويسي دستوري هستند. خلاصه برنامه نويسي تابعي سطح بالايي از درجه پيمانه اي بودن را فراهم مي كند. وقتي يك مسئله با تقسيم آن به مجموعه اي از زير مسئله ها تعريف مي شود, موضوع اصلي روشهايي است كه مي توان زير مسئله ها را به يكديگر چسباند. بنابراين براي افزايش قابليت پيمانه اي بودن يك مسئله مفهومي, ابتدا بايد نوع جديدي از چسب در زبان برنامه نويسي فراهم شود- قدرت اصلي برنامه نويسي تابعي .


III- برنامه نويسي تابعي در Lisp
Lisp اولين زبان برنامه نويسي تابعي است: آن براي پشتيباني محاسبات نمادين با استفاده از ليستهاي پيوندي بعنوان ساختار مركزي داده ها ابداع شده بود ( Lisp يعني پردازشگر ليست). جان مك كارتي دريافت كه روشهاي كنترل جريان توابع رياضي (بازگشت و تكرار) وسيله نظري مناسبي براي انجام محاسبات نمادين هستند. علاوه براين مفاهيم خلاصه سازي تابعي و كاربرد تابعي تعريف شده در محاسبات Lambda , سطح بالايي از خلاصه سازي موردنياز براي مسئله هاي AI مشخص شده را فراهم مي كنند.
Lisp در سال 1958 توسط مك كارتي ابداع شد و اولين نگارش محيط برنامه نويسي Lisp در سال 1960 آماده شد كه شامل يك مفسر, يك كامپايلر و مكانيسم تخصيص و بازپسگيري حافظه پويا بود (بعنوان مجموعه فضاي هرز شناخته شده است). يكسال بعد اولين زبان استاندارد با نام Lisp1.5 معرفي شد. پس از آن تعدادي از نسخه ها و محيط هاي برنامه نويسي Lisp توسعه يافته اند. مانند MacLisp، FranzLisp، InterLisp، CommonLisp، Scheme هر چند آنها در بعضي جزئيات خاص متفاوتند ولي هسته Syntax (نحو) و Semantic (معني) آنها اساساً يكسان است. هسته را در جاي ديگر معرفي خواهيم كرد. پر استفاده ترين نسخه‌هاي
Lisp ، Common Lisp و scheme هستند. در اين مقاله ما Common Lisp را براي نشان دادن جنبه هاي مختلف Lisp با مثالهاي معمولي انتخاب كرده ايم. هرچند مثالها نيز به راحتي مي توانند در نسخه هاي ديگر Lisp سازگار شوند.


 Syntax .A. (نحو) و semantics (معاني) Lisp

 1. عبارات نمادين: عناصر نحوي Lisp عبارات نمادين ناميده مي شوند (كه به صورتS-expressionsشناخته شده‌اند). داده ها و توابع (يعني برنامه هاي Lisp ) بصورت عبارات نمادين نشان داده شده اند كه مي توانند اتم ها يا ليست ها باشند. اتم ها كلمه اي شبيه اشيا‌ هستند. اتم‌ها وابسته به نوع كاراكترهايي كه براي شكل دادن يك اتم مجازند مي توانند به انواع مختلفي تقسيم شوند. انواع اصلي عبارتنداز:

Numbers:1    234-43.14159265358979    -7.5    6.02E+23
 
Symbols:SymbolSym23another-one    t    false    NILBLUE
 
Strings:  ”This is a string””977?”    ”setq””He said: \” I’m here.\” ”

 توضيح اينكه هرچند نماد خاصي مثل BLUE استفاده مي‌شود چون مفهوم مشخص براي برنامه‌نويسي دارد، اما بزودي Lisp تنها ترتيبي از حروف يا تنها يك نماد است. ليستها بندي شبيه اشياء هستند. يك ليست شامل يك پرانتز باز( دنباله‌اي از اعداد دلخواه كه بوسيله فاصله خالي از هم جدا مي‌شوند) و يك پرانتز بسته هستند. هر عنصر ليست مي‌تواند يك اتم يا ليست باشد. اينها مثالهايي از ليستها هستند:   

(This is a list) ((this) ((too))) () (((((((())))))))
 
(a b c d) (john mary tom) (loves john ?X)
 
(* (+ 3 4) 8) (append (a b c) (1 2 3))
 
(defun member (elem list)
 
    (if (eq elem (first list)) T
 
  (member elem (rest list))))

توضيح اينكه در بسياري از مثالها عناصر ليست خود ليستها هستند.چنين ليستهايي، ليستهاي تو در تو ناميده مي‌شوند. در مورد تو در تويي محدوديتي وجود ندارد. براي مثال يكي از قويترين Lisp ها را شرح مي‌دهيم: پيچيده‌ترين اشياء را به راحتي مي‌توان نوشت. تنها چيزي كه در نظر گرفته مي‌شود درستي عدد داخل پرانتزهاست. مهم توضيح اين است كه معني وابسته به يك ليست نمايش ويژه يا اتم در ليست نمايش وارد نمي‌شود. به اين معني كه همه عبارات نمادين كه در بالا توصيف شده است از لحاظ نحو برنامه‌هاي Lisp را اصلاح مي‌كنند ولي الزاماً از لحاظ معني (semantic) برنامه‌ها رااصلاح نمي‌كنند.
2. Semantics (معاني): هسته هر سيستم برنامه‌نويسي Lisp مفسر است كه كارش محاسبه مقدار براي يك عبارات نمادين داده شده است. اين فرآيند ارزيابي نام دارد. نتيجه يا  مقدار يك عبارت نمادين، يك عبارت نمادين است. كه بعد از كامل شدن ارزيابي برگردانده شده است. توضيح اينكه در واقع Lispداراي Semantics (معاني) عملياتي است كه با يك تعريف رياضي دقيق از نظريه تابع بازگشتي بدست مي‌آيد.
حلقه خواندن- محاسبه- چاپ چگونه مي‌تواند مفسر Lisp را فعال كرده و براي محاسبه عبارات نمادين و بنابراين اجراي واقعي برنامه‌هاي Lisp بكار برود؟
مسئله‌‌هاي Prolog بصورت حقايق، بديهيات و قوانين منطقي   براي استنباط حقايق جديد بيان مي‌‌ شوند . Prolog با قانون رياضي در محاسبات گزاره‌ اي و ونتايج نظري بدست آمده در زمينه اثبات قضيه خودكار در اواخر دهه1960 بنا شده است. مفسر  Lisp در واقع بعنوان يك تابع معمولاً بنام eval و جزئي از هر محيط برنامه‌‌‌نويسي Lisp است تعريف شده است (مانند تابعي كه پيش‌ساخته نام دارد). آن بوسيله فراخواني حلقه خواندن- محاسبه- چاپ در يك سيستم  Lisp جاسازي مي‌شود، وقتي يك عبارت نمادين توسط كاربر داده مي‌‌ شود ابتدا به داخل سيستم Lisp خوانده مي‌شود( خواندن هم يك تابع پيش‌ساخته است). سپس مفسر Lisp كه via نام دارد تابع eval را فراخواني مي‌كند تا عبارت نمادين را محاسبه و نتيجه عبارت نمادين را با چاپ در دستگاه كاربر برگرداند ( شگفت‌آورنيست گفتن اينكه چاپ هم يك تابع پيش‌‌ساخته است). وقتي سيستم Lispدر كامپيوتر شروع به اجرا مي‌‌شود اين حلقه خواندن- محاسبه- چاپ بطور خودكار شروع به اجرا كرده و بوسيله علامت ويژه اعلان  Lisp در ابتداي خط جديد به كاربر علامت مي‌دهد در اين مقاله ما علامت سئوا ل (?) را به عنوان اعلان Lisp بكار خواهيم برد. براي مثال:

 ( 4 3 +) ?
  7

هر وقت سيستم Lisp اجرا شود حلقه خواندن- محاسبه- چاپ فعال خواهد بود.
عبارت نمادين ( 4 3 + ) كه بوسيله هكر Lisp وارد شده است بوسيله مفسر Lisp بصورت فراخواني تابع جمع تفسير شده و نتيجه عبارت نمادين در ابتداي خط جديد 7 چاپ مي‌‌شود ارزيابي مفسر Lisp مطابق سه قانون زير انجام مي‌‌شود:
1- يكساني: يك عدد،‌ يك رشته يا نمادهاي t و nil خودشان را ارزيابي مي‌كنند (بر مي‌گردانند) به اين معني كه ارزش عدد 3،3 و ارزش رشته ”house”، رشته ”house”است. نمادt مقدار t برمي‌گرداند كه به معناي true تفسير مي‌شود وnil ، nil به معني false برمي‌‌گرداند
2- نمادها: ارزيابي يك نماد عبارت نمادين مربوط به آن را برمي‌‌‌گرداند. ( چگونگي‌ اش را در زير نشان خواهيم داد) بنابراين اگر ما فرض كنيم نماد‌ *names* به ليست
(john mary tom) وابسته است آنگاه ارزيابي *names* آن ليست را نتيجه مي‌دهد. اگر نماد color را به نماد green وابسته كنيم آنگاه green  بعنوان مقدار color برگردانده مي‌‌شود.
به بيان ديگر نمادها بعنوان متغيرهايي كه به مقاديري متصل(باند) شده‌اند تفسير مي‌‌شوند.
3- ليستها: هر ليست بعنوان يك فراخواني تابع تفسير مي‌‌شود. مفسر اول ليست دلالت بر تابعي دارد كه بايد براي بقيه عناصر( بالقوه خالي)‌ كه آرگومانهاي آن تابع را نشان مي‌دهند بكار رود. در واقع آرگومانهاي يك تابع قبلا بصورت نمادهاي پيشوندي مشخص مي‌‌شوند. اين مزيت را دارد كه توابع به سادگي مي‌توانند با تعداد دلخواهي آرگومان مشخص و استفاده شوند. ليست خالي ( ) داراي عبارت نمادين nil  بعنوان مقدارش مي‌باشد. توضيح اينكه نماد nil در واقع داراي دو معني است: يك نمايش مقدار منطقي false و ديگري نمايش ليست خالي. هر چند ممكن است اين يك بيت فرد بنظر برسد، ولي در واقع در Lisp مشكلي در شناسايي مفهوم nil بكاررفته وجود ندارد.
 ‌ ولي بطور كل آرگومانها قبل از اينكه توابع مقادير آنها  را استفاده كنند ارزيابي مي‌شوند. اولويت ارزيابي ترتيبي از آرگومانها از چپ به راست است. يك آرگو‌مان ممكن است يك اتم يا يك ليست باشد،‌درهر حالت بعنوان يك فراخواني تابع تفيسر شده و مفسر Lisp براي ارزيابي  آن فراخواني مي‌شود. براي مثال، ارزيابي زير در سيستم Lisp يك تابع به حساب مي‌آيد:

 ?(max 4 (min 9 8) 7 5)
 
 8

 در اينجا آرگومانها  5, 7, (min 9 8), 4  هستند كه در اولويتي قبل از تابعي به نام max كه نتيجه مقادير آرگومانها را به كار مي‌برد ارزيابي مي‌شوند. آرگومان اول 4 ،‌ يك عدد است پس مقدار آن 4 است. آرگومان دوم (min 9 8) است كه خودش يك فراخواني تابع است. بنابراين بايد قبل از آرگومان سوم فراخواني شود، (min 9 8) بايد توسط مفسر Lisp ارزيابي شود. چون ما بايد مفسر Lispرا براي بعضي آرگومانها در طول ارزيابي همه فراخواني‌هاي توابع استفاده كنيم مي‌‌توان گفت مفسر Lisp بصورت بازگشتي فراخواني شده است. مفسر Lisp همان مراحل را به كار مي‌برد، پس آرگومان اول 9 قبل از آرگومان دوم 8، ارزيابي مي‌شود. با بكار برروي تابع min حاصل 8 مي‌شود يعني تابع كوچكترين عدد يك مجموعه از اعداد صحيح را محاسبه مي‌‌كند. براي تابع بيروني max هم به اين معني است كه آرگومان  دوم آن 8 ارزيابي مي‌شود.
آرگومانهاي بعدي 7و5هستند كه نتيجه ارزيابي آنها مقادير  7و5 مي‌شود. حال تابع بزرگترين عدد كه max نام دارد مي‌تواند ارزيابي شود كه 8 برمي‌گرداند. اين مقدار نهايي،‌ مقدار فراخواني همه توابع مي‌‌باشد. از آنجايي كه گفته مي‌‌‌شود مفسر Lisp هميشه سعي مي‌كند مقدار يك نماد يا تفسير يك ليست بعنوان يك فراخواني تابع را تشخيص دهد ما چگونه مي‌توانيم با نمادها و ليستها بعنوان داده رفتار كنيم؟ براي مثال، اگر ما ليست (peter walks home) را وارد كنيم، آنگاه مفسر Lisp فوراً يك خطا مي‌دهد كه چيزي شبيه اين خطا مي‌گويد: تابع peter ناشناخته است (مفسرLisp بايد بقدري باهوش باشد كه بتواند ابتدا كنترل كند كه آيا تعريف تابعي براي نام تابع تعيين شده وجود دارد يا نه، قبل از اينكه هر آرماگوني را ارزيابي كند). يا اگر ما فقط house را وارد كنيم، آنگاه مفسر Lisp با خطايي شبيه اين خطا خاتمه مي‌يابد: مقداري به house متصل نيست (تخصيص نيافته است). حل اين مسئله كاملاً آسان است. زيرا عنصر اصلي هر ليست بعنوان نام تابع تفسير مي‌شود،‌هر سيستم Lisp با يك تابع پيش‌ساخته quote مي‌‌آيد كه يك عبارت نمادين را بعنوان آرگومان پذيرفته و اين عبارت نمادين را بدون ارزيابي آن برمي‌گرداند. براي مثال: ليست(quote(peter walks home)) ، به سادگي مقدار
(peter walks home) را برمي‌گرداند، و براي (quote house)، آن house را بر مي‌‌گرداند. از آنجايي كه تابع quote زياد استفاده مي‌‌‌شود، مي‌توان آن را با كاراكتر ويژه ' بيان كرد. بنابراين براي مثال بالا مي‌توانيم معادل’(Peter walks home) و’house را مشخص كنيم. برنامه‌ها بعنوان داده، يعني تابع quote به ما امكان مي‌‌‌دهد تا با فراخواني تابع بعنوان داده رفتار كنيم. براي مثال:  (quote (max 4 (min 9 8) 7 5))    يا    ’(max 4 (min 9 8) 7 5)   
قبلاً گفتيم كه مفسر Lisp يك تابع يكتايي پيش‌ساخته است كه eval نام دارد. آن صريحاً آرگومانهايش را وادار مي‌كند تا مطابق قوانين مذكور در بالا ارزيابي شوند. در بعضي حالات، آن مي‌تواند مقابل تابع  quote  قرار بگيرد بنابراين به وضوح لازم است كه يك ليست بعنوان داده مشخص شود تا سيستم Lisp بتواند يك فراخواني تابع تفسير شود، ما مي‌توانيم(eval ’(max 4 (min 9 8) 7 5))  را مشخص كنيم كه مقدار 8 را بطوري كه در بالا توصيف شد بر مي‌گرداند. به همان صورت مشخص كردن (eval ’(peter walks home)) سبب يك خطاي Lisp مي‌شود زيرا Lisp سعي مي‌كند يك تابع peter فراخواني كند. مزيت اصلي رفتار برنامه‌ها بعنوان داده اين است كه ما مي‌توانيم برنامه‌هاي Lisp (توابع) را طوري تعريف كنيم كه قادر به ساخت يا توليد برنامه‌ها باشند بطوريكه ابتدا ليست نمايش متناظر را ساخته و سپس با استفاده از تابع eval ، مفسر Lisp را به منظور ارزيابي ليست ايجاد شده بعنوان يك تابع فراخواني مي‌كند. شگفت‌آور نيست كه به اقتضاي اين خصوصيات، Lisp هنوز زبان برنامه‌نويسي برتر در زمينه برنامه‌نويسي ژنتيك AI است.
وقتي مقادير را به نمادها تخصيص مي‌دهيم كه برنامه‌نويسي برنامه‌هاي كاربردي
 real-life به ذخيره مقاديري محاسبه شده در يك متغير نياز داشته باشد تا اگر در آينده در برنامه‌ ديگري نياز باشند از هزينه محاسبه مجدد آن جلوگيري شود. در يك نگارش كاملاً تابعي Lisp ‌مقدار يك تابع تنها به تعريف تابع و مقدار آرگومانهايش در فراخواني بستگي دارد. براي اينكه Lisp را يك زبان كاربردي بكنيم (كاربردي حداقل در اين مفهوم كه بتواند بر روي كامپيوترهاي وان نيومن به خوبي اجرا شود)، ما نياز به روشي داريم تا مقادير را به نمادها تخصيص دهيم.common Lisp با يك تابع پيش‌ساخته بنام Setq مي‌آيد. Setq دو آرگومان مي‌خواهد: نماد (بنام متغير) كه يك مقدار به آن متصل شده است و يك عبارت نمادين كه بايد مقداري را فراهم كند. مفسر Lisp ارزيابي Setq را در روش خاصي انجام مي‌دهد بطوريكه آرگومان اول Setq را ارزيابي مي‌كند(متغير)،‌ اما مقدار آرگومان دوم Setq را به متغير متصل مي‌كند(براي فهم چگونگي اتصال يك مقدار به يك نماد نياز به جزئيات فني زيادي خواهيم داشت كه در اين معرفي كوتاه نمي‌توان به آن پرداخت). مقدار آرگومان دوم Setq مقدار Setq را بر مي‌گرداند. اينها مثالهايي هستند:

?color
 
error: unbound symbol color
 
?(setq color ’green)
 
green
 
?(setq max (max 3 2 5 1))
 3

توضيح اينكه در واقع Setq حالت مفسر Lisp را تغيير مي‌دهد تا دفعه بعدي كه همان متغير استفاده مي‌شود، داراي مقدار بوده و بنابراين مفسرLisp قادر به بازگرداندن آن خواهد بود. اگر اين اتفاق نيفتد آنگاه مفسر Lisp يك اخطار خواهد داد زيرا نماد متصل نشده است.
(گام 2 مفسر Lisp پيدا نشد). بنابراين آن مي‌گويدكه Setq يك اثر جانبي توليد مي‌كند زيرا حالت مفسر Lisp بطور پويا تغيير مي‌دهد. وقتي استفاده از Setq اجباري شد، به هرحال متوجه شد كه در واقع از مسير semantics (معاني) Lisp ناب دور مي‌شود. پس Setq بايد با دقت بسيار استفاده شود.
 
 B. نوع داده ليست
 برنامه‌نويسي در Lisp در واقع به معني تعريف توابعي است كه روي ليست عمل مي‌كنند. مانند ايجاد، پيمايش،‌كپي، تغيير و حذف ليستها. از آنجايي كه اين در Lisp مركزي است، هر سيستم Lisp بر مبناي مجموعه‌اي از توابع پيش‌ساخته ابتدايي كه بطور موثري عمليات اصلي ليست را پشتيباني مي‌كند مي‌آيد. ما بطور خلاصه يكي از مهمترين آنها معرفي مي‌كنيم. ابتدا نوع گزاره‌اي،‌ ما مي‌دانيم كه يك عبارت نمادين جاري يا يك ليست است يا نيست (يعني يك اتم). اين كار بوسيله تابع Listp انجام مي‌شود كه هر عبارت نمادين expr را بعنوان آرگومان پذيرفته و اگر expr ليست باشد نماد t و در غير اين صورت nil برمي‌گرداند. مثالها هستند (ما از فلش راست => براي نشان دادن نتيجه فراخواني تابع استفاده خواهيم كرد):

(listp ’(1 2 3))==>t
 
(listp ’( ))==>t 
 
(listp ’3)==>nil


 در انتخاب عناصر ليست دو تابع اساسي براي دست‌يابي به عناصر يك ليست وجود دارد: car وcdr هر دو تابع يك ليست را بعنوان آرگومان مي‌پذيرند. تابع car اولين عنصر ليست يا  اگر ليست خالي از آرگومان باشد nil بر مي‌گرداند،‌و cdr همان ليست را بطوري كه عنصر اول آن حذف شده است يا اگر ليست خالي از آرگومان بود nil برمي‌گرداند. مثالها:

(car ’(a b c)) ==>a (cdr ’(a b c))   ==>(b c)
 
(car ’( )) ==>nil(cdr ’(a))   ==>nil
 
(car ’((a b) c))==>(a b)


با استفاده از ترتيبي از فراخواني‌هاي توابع car و cdr مي‌توان يك ليست را از چپ به راست و از عناصر بيروني به سمت عناصر داخلي ليست پيمايش كرد.
براي مثال، در طول ارزيابي  (car (cdr ’(see the quote))) مفسر Lisp ابتدا عبارت
 (cdr ’(see the quote))را ارزيابي خواهد كرد كه ليست (the quote) را برمي‌گرداند، سپس به تابع car پاس مي‌شود كه نماد the را بر مي‌گرداند. اينها مثالهايي ديگر هستند:


(car (cdr (cdr ’(see the quote))))   ==>quote
 
(car (cdr (cdr (cdr ’(see the quote))))) ==>nil
 
(car (car ’(see the quote)))  ==>?

 در طول ارزيابي مثال اخير چه اتفاقي خواهد افتاد؟ ارزيابي (car ’(see the quote)) نماد see را بر‌مي‌گرداند.سپس اين به عنوان آرگومان به فراخواني بيروني car پاس مي‌شود. چون تابع car يك ليست را به عنوان آرگومان مي پذيرد پس مفسر Lisp بلافاصله ارزيابي ديگر را با خطايي مانند اين خطا متوقف خواهد كرد: سعي مي‌شود Car SEE بدست آيد ولي Listp نيست. يك توضيح كوتاه تاريخي: نامهاي Car,cdr از روشهاي قديمي هستند زيرا آنها در اولين نگارش Lisp كه بر مبناي مجموعه عمليات كد ماشين كامپيوتر انتخاب و پياده سازي شده بودند (car از محتواي ثبات آدرس استفاده مي‌كند و cdr از محتواي ثبات كاهش استفاده مي‌كند). به منظور نوشتن كد Lisp خواناتر، common Lisp  يا در تابع first و rest بوجود آمد. ما نامهاي قديمي را استفاده مي‌كنيم تا براي خواندن و فهم كد AI Lisp قديمي قادر باشيم. براي ساخت ليستها، يك تابع ابتدايي Cons مانند Car  و cdr وجود دارد كه براي ساخت يك ليست بكار مي‌رود. Cons دو عبارت نمادين را مي‌پذيرد كه اولي بعنوان يك عنصر جديد در جلوي دومي وارد مي‌شود. در مثالهاي زير ملاحظه مي‌كنيد:

(cons ’a ’(b c))  ==>(a b c)
 
(cons ’(a d) ’(b c))==>((a d) b c)
 
(cons (first ’(1 2 3)) (rest ’(1 2 3)))    ==>(1 2 3)


 در اصل، Cons و ليست خالي با هم براي ساخت ليستهاي خيلي پيچيده كافي هستند، براي مثال:

(cons ’a (cons ’b (cons ’c ’( ))))    ==>(a b c)
 
(cons ’a (cons (cons ’b (cons ’c ’( ))) (cons ’d ’( )))) ==>(a (b c) d)

 چون اين كار كاملاً طاقت‌فرساست،‌ سيستمهاي Lispبسياري با توابع ليست پيش‌ساخته بسيار پيشرفته بوجود مي‌آيند. براي مثال، تابع List با تعداد دلخواهي عبارت نمادين يك ليست مي‌سازد، و تابع append با الحاق آرگومانهايش كه بايد ليست باشند يك ليست جديد مي‌سازد. equal تابعي است كه اگر عناصر و ترتيب آنها در دو ليست يكسان باشد t ، در غير اين صورت nil بر ميگرداند. مثال:

(list ’a ’b ’c) ==>(a b c) 
 
(list (list 1) 2 (list 1 2 3))    ==>((1) 2 (1 2 3))
 
(append ’(1) (list 2)) ==>(1 2)   
 
(append ’(1 2) nil ’(3 4))==>(1 2 3 4)
 
(equal ’(a b c) ’(a b c))   ==>t    
 
(equal ’(a b c) ’(a c b)) ==>nil

 C. تعريف توابع جديد
 برنامه‌نوسي در Lisp با تعريف توابع جديد انجام مي‌شود. در اصل اين به اين معني است كه: مشخص كردن ليستها در يك روش نحوي معين. مشابه تابع setq كه بوسيله مفسر Lisp در يك روش خاص رفتار مي‌كرد. تابع خاص defun است كه براي ايجاد اشياي تابع جديد توسط مفسر Lisp بكار مي‌رود.  defunيك نماد دال برنام تابع، يك ليست از پارامترها(ممكن است خالي باشد) براي تابع جديد و تعداد دلخواهي از عبارات نماديني كه بدنه تابع جديدرا تعريف مي‌كند را به عنوان آرگومانهايش مي‌پذيرد. اين تعويض از يك تابع ساده به نام my-sum است كه دو آرگومان مي‌پذيرد و با استفاده از تابع پيش‌ساخته آنها را جمع مي‌كند.

(defun my-sum (x y)
  
(+ x y))

 اين عبارت به همان روشي كه بعنوان يك تابع فراخواني مي‌شود در سيستم Lisp وارد مي‌شود. ارزيابي يك تعريف تابع نام تابع را بعنوان مقدار برمي‌گرداند، اما يك شئ تابع را بعنوان اثر جانبي ايجاد خواهد كرد و وقتي Lisp شروع به اجرا مي‌‌كند آن را به مجموعه تعاريف توابع شناخته شده توسط سيستم Lisp اضافه مي‌كند (حداقل مجموعه توابع پيش‌ساخته)
توضيح اينكه در اين مثال بدنه شامل تنها يك عبارت نمادين است. هر چند بدنه مي‌تواند شامل ترتيب دلخواهي از عبارات نمادين باشد مقدار آخرين عبارت نمادين از بدنه مقدار تابع را تعيين مي‌كند. به اين معني است كه در واقع همه عناصر بدنه بي تاثير  هستند مگر اينكه اثرات جانبي تصميم‌گيري توليد كنند.
لسيت پارامتر تابع جديدmy-sum به ما مي‌گويد وقتي فراخواني مي‌شود درست دو عبارت نمادين را بعنوان آرگومان مي‌پذيرد. بنابراين اگر شما(my-sum   3  5) را در سيستمLisp وارد كنيد مفسرLisp قادر خواهد بود كه تعريف براي نام تابع مشخص شده بيابد و سپس آرگومانهاي داده شده را از چپ به راست پردازش كند وقتي اين كار انجام شد آن مقدار هر آرگومان را مطابق پارامتر مشخص شده در ليست پارامتر تعريف تابع وصل خواهد كرد(تخصيص خواهد داد) در مثال ما بدين معني است كه مقدار آرگومان اول كه3 است(3 همان عدد3 است كه خودش را ارزيابي كرده است) به پارامترx متصل مي‌كند. سپس مقدار آرگومان دوم كه 5 است به پارامترy متصل مي‌شود. چون مقدار يك آرگومان به يك پارامتر متصل مي‌شود، اين روش فراخواني با مقدار ناميده شده است. بعد از مقدار‌يابي براي همه پارامترها مفسرLisp قادر به ارزيابي بدنه تابع خواهد بود. مثال بدين معني است كه (  3  5 +) فراخواني خواهد شد. نتيجه فراخواني8 است كه بعنوان نتيجه فراخواني(my-sum  3 5) برگردانده مي‌شود. بعد از تكميل فرا‌خواني تابع اتصالات موقت پارامترهايx وy حذف مي‌شوند. هنگامي كه يك تعريف تابع جديد در سيستمLisp وارد مي‌شودمي‌تواند به عنوان جزئي از تعريف تابع جديد به همان روش كه بعنوان تابع پيش ساخته استفاده شده است بكار برده شود بطوريكه در مثال زير نشان داده شده است.

(defun double-sum (x y)
 
  (+ (my-sum x y) (my-sum x y)))

كه با دوبار فراخوانيmy-sum جمع آرگومانهايش را دو برابر خواهد كرد اين مثال ديگري از يك تعريف تابع است نشان دادن استفاده از عبارات نمادين چند‌گانه در بدنه تابع است.

(defun hello-world () (print ”Hello World!”) ’done)

 

 اين تعريف تابع پارامتري ندارد زيرا ليست پارامتر آن خالي است بنابراين وقتي(hello-world) فراخواني مي‌شود مفسرLisp بلافاصله (print ”Hello World!”) را ارزيابي و رشته
 ”Hello World!”را روي نمايشگر شما بعنوان يك اثر جانبي چاپ مي‌كند سپس نماد’done را ارزيابي خواهد كرد وdone را به عنوان نتيجه فراخواني تابع برمي‌گرداند.


D. تعريف ساختارهاي كنترلي
 هر چنداكنون تعريف توابع جديد با تعريف توابع پيش ساخته  و توابعي كه كاربر تعريف مي‌كند ممكن است برنامه‌نويسي درLisp بسيار خسته كننده خواهد شداگر كنترل جريان اطلاعات بوسيله شاخه‌هاي شرطي ممكن نبود شايد بارها تكرار مي‌شد تا اينكه يك روند توقف اجرا شود گزينشLisp بر مبناي ارزيابي توابع است توابع كنترل تستهايي روي عبارات  نمادين واقعي انجام مي‌دهد و ارزيابي عبارات نمادين متناوب را بسته به نتايج انتخاب مي‌كنند تابع اساسي براي تعيين اثباتهاي شرطي درcond،Lisp است.cond تعداد دلخواهي آرگومان رامي‌پذيرد هر آرگومان يك بخش ممكن را بيان مي‌كنند و بعنوان يك ليست نمايش داده شده كه عنصر اول يك تست و بقيه عناصر اعمال (عبارات نمادين) هستند كه اگر تست انجام شود  ارزيابي مي‌شوند مقدار آخرين عمل به عنوان مقدار پيشنهادي برگردانده مي‌شود همه آرگومانهاي ممكنcond (يعني بخشها) تا زماني كه بخش اول بطور مثبت تست شوداز چپ به راست ارزيابي مي‌شوند درآن حالت مقدار آن بخش مقدار كل تابعcond است. در واقع اين مفهوم بسيار پيچيده تر از آن است اجازه دهيد تابعverbalize-prop زيركه يك مقدار احتمال را بيان مي‌كند. به عنوان يك عدد حقيقي فرض مي‌كنيم.

 (defun verbalize–prop (prob-value)
 
 (cond ((> prob–value 0.75) ’very-probable)
 
 ((> prob–value 0.5) ’probable)
 
 ((> prob–value 0.25) ’improbable)
 
   (T ’very-improbable)))

وقتي(verbalize-prop 0.33) فراخواني مي‌شود مقدار واقعي آرگومانها به پارامترprop-value متصل مي‌شود.سپسcond با آن اتصالات ارزيابي مي‌شود very-probable)’((>prop-value)است.> يك گزاره پيش ساخته است  كه تست مي‌كند كه آيا آرگومان اول از دومي بزرگتر است،چونpropvalue،0.33 است. بهnil ارزيابي مي‌شود كه به معني انجام نشدن تست است. بنابراين ارزيابي اين بخش پيشنهادي بلافاصله پايان مي‌يابد. و سپس پيشنهاد
 ((> prob–value 0.5) ’probable)ارزيابي مي‌شود كه تابع تست باز هم  nilبرمي‌گرداندبنابراين ارزيابي هم پايان مي‌يابد. سپس ((prop-value 0.25) ’improbable) ارزيابي مي‌شود حال با بكار بردن تابع تستT برگردانده مي‌شود كه به معني انجام تست است.آنگاه همه اعمال اين بخش كه بطور مثبت تست شده است. ارزيابي ومقدار آخرين عمل به عنوان مقدارcond برگردانده مي‌شود در مثال ما تنها عملimprobable’ تعيين مي‌شود كه مقدارimprobable (غيرمحتمل) را برمي‌گرداند از آنجايي كه اين مقدارcond را تعيين مي‌كند و عبارت cond تنها عبارت بدنه تابعverbalize-prop است. نتيجه فراخواني improbable ,((verbalize-prop 0.33) است. توضيح اينكهاگرما (verbalize- prop 0.1)را وارد كنيم مقدارvery- improbable را بر‌مي‌گرداند زيرا تست هر سه با شكست مواجه شده و بايد بخش (T ’very-improbable)ارزيابي شوددر اين حالت نمادT به عنوان تستي كه هميشهT بر‌مي‌گرداند استفاده شده است بنابراين مقدار اين پيشنهاد
 very- improbable است.
 
E. تعريف توابع بازگشتي
 دومين روش اصلي براي تعريف كنترل جريان درLisp تعاريف توابع بازگشتي هستند. تابعي كه از تعريفش بعنوان جزئي از تعريفش استفاده مي‌كند باز‌گشتي نام دارد. بنابراين، يك تعريف بازگشتي، تا جايي كه امكان دارد مسئله‌اي را به قسمتهاي كوچكتر تقسيم مي‌كند سپس اين قسمتهاي كوچكتر را با استفاده از توابع مشهور و جمع پاسخهاي يكسان حل كرده و حل برنامه را كامل مي‌كند. بازگشت يك روش طبيعي براي كنترل ساختارهاي داده‌اي  است كه اندازه معيني ندارد. مانند ليستها، درختها و گرافها. بنابراين براي مسئله‌هايي كه در يك فاصله از حالات دنبال حل كانديد مي‌گردند مناسب است.   
Lisp اولين زبان برنامه‌نويسي كاربردي بود كه با روش معين تعريف تعاريف بازگشتي را پشتيباني كرده است. ما از دو مثال كوچك براي نشان دادن بازگشت درLisp استفاده خواهيم كرد. اولين مثال براي تعيين طول يك ليست طويل دلخواه استفاده مي‌شود. طول يك ليست برابر تعداد عناصر آن است. تابع بازگشتي آن به صورت زير است.

(defun length (list)
 
(cond ((null list) 0)
 
 (T (+ 1 (length (cdr list))))))

 وقتي يك تعريف بازگشتي تعريف مي‌شود. ما بايد حالتهاي اساسي راشناسايي كنيم يعني آن قسمتهايي كه نمي‌توانند بيشتر تجزيه شوند. مسئله اندازه وابسته به ليست است. كوچكترين مسئله اندازه در ليست، ليست خالي است. بنابراين اولين چيزي كه ما بايد مشخص كنيم تستي براي شناسايي ليست خالي است و تعيين اينكه طول ليست خالي بايد چقدر باشد تابع پيش‌ساخته  null تست مي‌كند كه آيا اين ليست خالي است در اين صورت t برمي‌گرداند. از آنجايي كه ليست خالي بدون عنصر است تعريف مي‌كنيم كه طول ليست خالي صفر باشد كار ديگري كه بايد انجام شود تجزيه مسئله اندازه به قسمتهاي كوچكتر است كه همان مسئله مي‌تواند براي فسمتهاي كوچكتر استفاده شود. تجزيه ليست مي‌تواند با استفاده از توابع cdr,car انجام شود. به اين معني كه ما بايد تعيين كنيم تا وقتي كه ليست خالي پيدا شود عنصر اول و بقيه عناصر ليست چه كار بكنند. از آنجايي كه ما ازقبل ليست خالي را بعنوان حالت اساسي شناسايي كرديم، مي‌توانيم فرض كنيم تجزيه برروي ليستي شامل حداقل يك عنصر انجام خواهد شد. بنابراين هر بار كه قادر خواهيم بود تا با بكار بردن cdr بقيه عناصر ليست را بدست آوريم، ما يك عنصر اضافي پيدا كرديم كه بايد براي افزايش تعداد عناصر ليست قبلا شناسايي شده بوسيله يك استفاده مي‌شود. استفاده از اين تعريف تابع(length ’( ))  بلافاصله صفر بر‌خواهد گرداند و اگر
(length ’(a b c)) را فراخواني كنيم، نتيجه 3 خواهد بود زيرا براي اينكه ليست خالي شود بايد سه فراخواني بازگشتي member انجام دهيم بعنوان مثال دوم، تعريف بازگشتي را در نظر مي‌گيريم كه تست مي‌كند كه آيا عنصر داده شده در ليست داده شده قرار دارد اگر عنصر براستي در ليست پيدا شود زير ليستي كه با عنصر پيدا شده شروع مي‌شود را برمي‌گرداند اگر عنصر پيدا نشوددnil برگردانده مي‌شود مثال فراخواني‌ها هستند. 

(member ’b ’(a f b d e b c))    ==> (b d e b c)
 
  (member ’k ’(a f b d e b c))    ==>    nil

 مشابه تعريف بازگشتي ما ليست خالي را به عنوان حالت اساسي استفاده مي‌كنيم برايmember ليست خالي به اين معني است كه عنصر مورد سوال در ليست پيدا نشود. بنابراين ما بايد يك ليست را تا زماني كه عنصر مورد سوال پيدا مي‌شود يا ليست خالي است تجزيه مي‌كنيم تجزيه با استفاده ازcar وcdr انجام مي‌شود.car براي استخراج عنصر اول ليست به كار مي‌رود كه مي‌تواند براي كنترل اينكه با عنصر مورد سوال برابر است استفاده شود در اين حالت مي‌توانيم پردازشهاي اضافي را مستقيماً متوقف كنيم اگر برابر نبود آنگاه بايد تابعmember را براي بقيه عناصر تا خالي شدن ليست بكار ببريم بنابراين مي‌تواند به صورت زير تعريف شود.

(defun member (elem list)
 
(cond ((null list) nil)
 
  ((equal elem (car list)) list)
 
(T (member elem (cdr list)))))

F. توابع مرتبه بالا
 درLisp توابع مي‌توانند بعنوان آرگومان استفاده شود تابعي كه بتواند توابع را بعنوان آرگومانهايش بپذيرد تابع مرتبه بالا ناميده مي‌شود. مشكلات فراواني وجود دارند كه يكي پيمايش يك ليست(يا يك درخت يا يك گراف) است كه بايد براي هر ليست عنصر تابع معيني استفاده شود. براي مثالfilter تابعي است كه تستي براي عناصر ليست به‌كار مي‌برد و آنهايي كه شكست مي‌خورند را حذف مي‌كند. نگاشتها توابعي هستند كه همان تابع را روي هر عنصر ليست به كار مي‌برند تا ليستي از نتايج را برگردانند. تعاربف توابع مرتبه بالا مي‌تواند براي تعريف توابع عمومي پيمايش ليست استفاده شود كه آنها از توابع خاصي كه براي پردازش عناصر ليست بكار مي‌روند خلاصه مي‌شوند (چكيده مي‌شوند). به منظور پشتيباني تعاريف مرتبه بالا يك تابع خاص است كه يك تابع و دنباله‌اي از آرگومانها را به عنوان آرگومان مي‌پذيرد و آن تابع را در آرگومانهاي آنها به كار مي‌برد. بعنوان مثال با استفاده ازfuncall، تابع عموميfilter را تعريف خواهيم كرد كه مي‌تواند به اين صورت فراخواني شود:
(filter ’(1 3 -9 -5 6 -3) #’plusp)   ==>(1 3 6)
plusp يك تابع پيش ساخته است كه كنترل مي‌كند آيا يك عدد داده شده مثبت است يا نه؟ اگر باشد آن عدد را بر‌مي‌گرداند در غير اين صورتnil بر‌مي‌گرداند نماد خاص# بكار مي‌رود تا به مفسرLisp بگويد كه مقدار آرگومان يك شي تابعي است . تعريف به صورت زير است:

(defun filter (list test)
 
   (cond ((null list) list)
 
((funcall test (car list))
 
(cons (car list) (filter (cdr list) test)))
 
    (T (filter (cdr list) test))))

 اگر ليست خالي باشد آنگاه بسادگي برمي‌گردد در غير اين صورت تابع تست روي عنصر اول ليست بكار مي‌رود. اگر تابع تست موفق شودcons بكار مي‌رود تا ليست حاصل را با استفاده از اين عنصر و همه عناصري كه در طول فراخواني بازگشتيfilter ازcdr و تابع تست استفاده مي‌كنند بسازد. اگر تابع تست براي عنصر اول با شكست مواجه شود اين عنصر بسادگي با بكاربردنfilter بصورت بازگشتي روي عناصر باقيمانده  پرش مي‌كند. يعني اين عنصر نمي‌تواند جزئي از ليست حاصل باشد تابع مي‌تواند براي بسياري از توابع مختلف تست استفاده شود مانند:


(filter ’(1 3 A B 6 C 4) #’numberp)    ==> (1 3 6 4)
 
(filter ’(1 2 3 4 5 6) #’even)    ==> (2 4 6)


  به عنوان مثال ديگري از تعريفfilter تابع مرتبه بالا، مامي‌خواهيم يك تابع نگاشت ساده تعريف كنيم  كه يك تابع روي همه عناصر يك ليست بكاررفته، ليستي از همه مقادير بر‌مي‌گرداند. اگر تابع  my-map را فراخواني كنيم آنگاه تعريفي شبيه اين داريم:

 (defun my-map (fn list)
 
 (cond ((null list) list)
 
(T (cons (funcall fn (car list)) (my-map fn (cdr list))))))

اگر يك تابع Double وجود داشته ياشد كه تنها عدد را دو برابر كند آنگاه يك فراخواني ممكن my-map به اين صورت مي‌تواند باشد:
(my-map #’double ’(1 2 3 4))==>   (2 4 6 8)
بارها شده كه يك تابع بايد يكبار استفاده مي‌شد. بنابراين اگر ما بتوانيم مستقيما تعريفي از يك تابع بعنوان آرگومان از تابع نگاشت فراهم كنيم كاملا مناسب خواهد بود براي اينكار تعريف عبارت lambda را پشتيباني مي‌كند. ما قبلا به طور غير رسمي نماد‌سازي عبارات را در بخش II بعنوان تعريف توابع بي نام يا مستعار معرفي كرديم. در Lisp عبارات lambda با استفاده از نوع خاصي از lambda تعريف مي‌شوند نوع عمومي عبارت lambda به اين صورت است:


(lambda (   parameter . . . ) body . . . )


  يك عبارت lambda امكان مي‌دهد تا ما تعريف تابع را از نام تابع تشخيص دهيم عبارات lambda مي‌توانند به جاي نام تابع در تابع funcall استفاده شوند مانند عبارت كه تابع double ما مي‌تواند باشد:

(lambda (x) (+ x x))

براي مثال: فراخواني تابع my-map بالا مي‌تواند با استفاده از عبارت lambda مجدداً به صورت زير بيان شود:

(my-map #’(lambda (x) (+ x x)) ’(1 2 3 4)    ==>   (2 4 6 8)

 يك عبارت lambda يك شئ تابعي بر مي‌گرداند كه به نام تابع متصل نيست در تعريف
my-map ، پارامتر fn را بعنوان متغير نام تابع استفاده مي‌كنيم. وقتي شكل lambda محاسبه شد مفسر Lisp شئ تابعي را به متغير نام تابع متصل خواهد كرد. به اين طريق يك پارامتر تابع بصورت يك نام تابع پويا استفاده مي‌شود. نماد # صروري است تا به Lisp بگويد كه نه تنها يك شئ تابعي را وصل كند بلكه بايد اتصالات محلي و سراسري مقادير وابسته به شئ تابعي را نيز نگه دارد. اين تنها با استفاده از عملگر quote امكان‌پذير نخواهد بود (متأسفانه به دليل محدوديت جا جزئيات بيشتري داده نمي‌شود).
 
 G. ساير زبانهاي برنامه‌نويسي تابعي غير از Lisp
 ما Lisp را به عنوان نماينده اصلي زبان برنامه‌نويسي تابعي معرفي كرديم (مخصوصاً نسخه پر استفاده Common Lisp )، زيرا هنوز هم زبان برنامه‌نويسي پر استفاده‌اي براي تعدادي از مسئله‌هاي هوش مصنوعي مانند فهم زبان طبيعي، استخراج اطلاعات، يادگيري ماشين،‌ برنامه‌ريزي AI يا برنامه‌نويسي ژنتيك است. دركنار Lispتعدادي  از زبانهاي برنامه‌نويسي تابعي ديگر توسعه يافتند. ما بطور خلاصه دو عضو مشهور را ذكر مي‌كنيم، ML و Haskell.
ML  برگرفته از Meta-Language است يك زبان برنامه‌نويسي تابعي با دامنه ايستاست. تفاوت اصلي‌اش با Lisp درsyntax (نحو) است (كه بيشتر شبيه پاسكال است)، و يك نوع سيستم چند ريختي محض است (يعني بكاربردن انواع قوي و نوع استنتاجي بوسيله متغيرهايي كه نياز به اعلان ندارند). نوع هر متغير اعلان شده و عبارت مي‌تواند در زمان كامپايل تعيين شود.  MLتعريف انواع داده خلاصه را پشتيباني مي‌كند، به صورتي كه در مثال زير شرح داده شده است:


 datatype tree = L of int
|   int * tree * tree;


  خوانده مي‌شود’’ هر درخت دو دويي داراي يك برگ شامل يك عدد صحيح و يا يك گره
شامل يك عدد صحيح و دو درخت است( زير درختها)‘‘ در مثال بعدي، مثالي از تعريف يك تابع بازگشتي كه روي يك ساختار درخت بكار مي‌رود نشان داده شده است:


fun depth(L ) = 1
 
|   depth(N(i,l,r)) =
 
  1 + max(depth l, depth r);


 
تابع depth نگاشتي از درختها به اعداد است. عمق هر برگ 1 است و عمق هر درخت ديگر 1 بعلاوه بيشترين عمق زير درختهاي چپ و راست آن است.
Haskell شبيه ML است:  Syntax مشابهي بكار مي‌برد، دامنه‌اش هم ايستاست و از همان روش استنتاج استفاده مي‌كند. با ML در اين تفاوت دارد كه يك زبان كاملاً تابعي است. به اين معني است كه به اثرات جانبي اجازه نداده و شامل هيچ نوع ويژگي دستوري نيست، در اصل متغير و جملات انتسابي ندارد. بعلاوه از يك تكنيك ارزيابي كند استفاده مي‌‌كند، كه زير عبارت را ارزيابي نمي‌كند تا موقع نياز مقدارش معلوم باشد. ليستها رايجترين ساختار داده در Haskell هستند. براي مثال [1,2,3] ليستي از سه عدد صحيح 3,2,1 است ليست [1,2,3] در Haskell در واقع خلاصه‌نويسي شده ليست 1:(2:(3:[ ] )) است، كه[ ]  ليست خالي است و: عملگري ميانوندي است كه آرگومان اولش را جلوي آرگومان دومش اضافه مي‌كند( يك ليست). بعنوان مثالي از يك تابع كاربر تعريفي كه روي ليستها عمل مي‌كند، مسئله شمارش تعداد عناصر در يك ليست با تعريف تابع length ملاحظه مي‌شود.


length :: [a] -> Integer
 
length [ ] = 0
 
length (x:xs) = 1 + length xs


 خوانده مي‌شود’’طول ليست خالي 0 است، و طول ليستي كه عنصر اولش x است و بقيه xs است،1 بعلاوه طول xs است‘‘. در Haskell تابع invocation احضار با تطبيق الگو راهنمايي مي‌كند، براي مثال طرف چپ معادله داري الگوهايي مانند[ ] و x:xs است. در يك كاربرد تابع اين الگوها با پارامترهاي واقعي تطبيق داده مي‌شوند [ ] ) تنها با ليست خالي مطابقت مي‌كند، و x :xs  با هر ليست با حداقل يك عنصر با موفقيت تطبيق مي‌كند، x به عنصر اول و xs به بقيه ليست متصل مي‌شوند). اگر تطبيق موفقيت‌آميز باشد طرف راست معادله ارزيابي و بعنوان نتيجه كاربرد برگردانده مي‌شود. اگر با شكست مواجه شود معادله بعدي سعي مي‌شود، و اگر همه معادلات با شكست مواجه شوند،‌ حاصل يك خطا مي‌شود.
اين پايان كوتاه ما از’’سفر در Lisp ‘‘ است. ما تنهاي توانستيم جنبه بسيار مهم Lisp را مطرح كنيم. خوانندگان علاقمند به جزئيات خاص بيشتر بايد حداقل يكي از كتابهاي مذكور در  آخر مقاله را كنكاش كنند. بقيه اين مقاله معرفي الگوي برنامه‌نويسي ديگري بنام ‌Prolog است كه در برنامه‌نويسي AI بطور گسترده مورد استفاده قرار مي‌‌گيرد.


IV. برنامه‌‌نويسي منطقي در Prolog
در دهه 1970 يك الگوي ديگر براي محاسبات نمادين در برنامه‌نويسي AI از موفقيت در زمينه اثبات قضيه خودكار ارئه شد. حل رويه اثبات بطور قابل توجهي توسط رابينسون
(1965) توسعه يافته كه كه با منطق رسمي نشان داده شده است، در محاسبات گزاره‌اي خاص مي‌‌توان بعنوان نمادي براي تعيين الگوريتم‌ها و بنابراين براي انجام محاسبات نمادين استفاده شود. در اوايل (دهه 1970) Prolog ، مخفف(برنامه‌نويسي در منطق) اولين زبان‌‌ برنامه‌‌نويسي بر مبناي منطق پديدار شد. آن توسط آلن كالمرار، رابرت كووا لسكي و فيليپ راسل توسعه يافته است. اساس Prolog شامل يك روش براي مشخص كردن گزاره‌هاي محاسبات گزاره‌اي و تصميات محدود است. برنامه‌‌نوسي در Prolog شامل مشخصات حقيقي در مورد اشياء و ارتباط آنها و قوانيني كه ارتباطات را مشخص مي‌كند، است. برنامه‌هاي Prolog مجموعه‌اي از جملات اعلاني در مورد يك مسئله هستند زيرا آنها نحوه محاسبه نتيجه را مشخص نمي‌‌‌كند.بلكه ساختار منطقي نتيجه را مشخص مي‌‌كنند  Prolog با برنامه‌نويسي دستوري و حتي برنامه‌‌نويسي تابعي در تعريف نحوه محاسبه نتيجه كاملاً متفاوت است. با استفاده از Prolog برنامه‌نويسي مي‌تواند در يك سطح خيلي خلاصه و كاملاً نزديك به مشخصات رسمي يك مسئله انجام مي‌‌گيرد. Prolog  هنوز هم مهمترين زبان برنامه‌نوسي منطقي است. تعدادي از سيستمهاي برنامه‌نوسي تجاري در بازار موجود است كه شامل ماجولهاي مدرن برنامه‌‌‌نويسي هستند، يعني كامپايلر، Debugger  و ابزارهاي تجسم. Prolog در تعدادي از زمينه‌هاي AI  مانند سيستم‌هاي خبره و پردازش زبان طبيعي بطور موفقيت‌آميزي استفاده شده است. اما در زمينه‌هاي ديگري مانند سيستم‌ هاي مديريت پايگاه داده رابطه‌اي يا در آموزش نيز استفاده مي‌شود. يك برنامه Prolog بسيار ساده برنامه‌اي است كه شامل دو حقيقت و يك قاعده است.


scientist(godel).
 
scientist(einstein).
 
logician(X) :- scientist(X).


دو جمله اول مي‌تواند بصورت ’’Godel is a scientist ‘‘ و ’’Einstein is a scientist ‘‘ تفسير شود.جمله قانون مي‌‌‌گويد: ’’X is a logician if x is a scientist ‘‘. براي تست اين برنامه بايد عبارات پرس و جو( يا قضايا) را مشخص كنيم كه Prolog سعي مي‌كند با استفاده از برنامه مشخص شده به آنها جواب دهد(يا اثبات كند). يك پرس و جوي ممكن اين است: ?- scientist(godel).

كه مي‌تواند به صورت ’’Is Godel a scientist?‘‘ بيان شود. Prolog با بكار بردن رويه اثبات پيش‌ساخته خودش ’’yes‘‘ جواب خواهد داد، زيرا ممكن است يك حقيقت پيدا شود كه كاملاً مطابق با پرس و جو باشد. ديگر پرس و جوي ممكن بصورت سئوال:
’’who is a scientist?‘‘و در Prolog بصورت زير بيان مي‌شود:

?- scientist(X).

  Prolog نتيجه خواهد داد’’X = godel , X= Einstein ‘‘. در اين حالت Prolog نه‌تنها جواب مي‌دهد’’yes ‘‘ بلكه همه متغيرهاي متصل به x را كه در طول اثبات موفق پرس و جو پيدا مي‌كند را بر مي‌گرداند. مثال ديگر، ممكن است ما با پرس و جوي Prolog زير سئوال كنيم ’’who is a logician ‘‘:

?- logician(X).
 

اثبات اين پرس و جو همان مجموعه‌اي از حقايق را كه قانون مشخص كرده است را نتيجه مي‌دهد. سرانجام ممكن است ما پرس و جوي زير را مشخص كنيم:

?- logician(mickey-mouse).

در اين حالت Prolog جواب خواهد داد با ’’No ‘‘. هر چند قانون مي‌گويد كسي منطق‌دان است كه دانشمند هم باشد، ‌ولي Prolog حقيقتي نمي‌يابد كه بگويدMickey Mouse دانشمند است. توضيح اينكه Prolog تنها نسبت به برنامه داده شده مي‌تواند پاسخ بدهد. در واقع به اين معني است كه ‘‘ No, I couldn’t deduce the fact‘‘. اين ويژگي بعنوان فرض جهان بسته يا رد آن بصورت شكست،‌ مشهور است. به اين معني كه Prolog همه اطلاعات لازم براي حل مسئله موجود در پايگاه داده را فرض مي‌‌كند.
جملات برنامه‌هاي Prolog شامل مجموعه‌اي از جملات بنام بند هستند كه براي نمايش داده‌ها و برنامه‌ها استفاده مي‌شوند. نماد نقطه‌ براي پايان دادن بند بكار مي‌رود. يك واژه مي‌تواند يك ثابت(نامهاي نمادين كه با يك حرف كوچك شروع مي‌شوند مانند godel يا eInstein )، يك متغير(نمادهايي كه با يك حرف بزرگ شروع مي‌شوند مانند x يا ‌ Scientist)، يا يك ساختار باشد. ساختارهاي گزاره‌هاي اتمي محاسبات گزار‌ه‌اي را نمايش مي‌دهند و شامل عملگر نام و يك ليست پارامتر هستند. هر پارامتر مي‌تواند يك واژه باشد به اين معني كه واژه‌ها،‌ اشياء‌ بازگشتي هستند. Prolog سه نوع بند را تشخيص مي‌دهد: حقايق،‌قوانين و پرس و جوها. يك حقيقت با يك ساختار واحد نمايش داده مي‌شود كه بعنوان يك گزاره درست ساده تفسير مي‌شود. قبلاً در مثال ساده برنامه بالا دو حقيقت ساده را معرفي كرديم.
اينها چند مثال ديگر هستند:


 male(john).
 
 male(bill).
 
 female(mary).
 
 female(sue).
 
 father(john, mary).
 
 father(bill,john).
 
 mother(sue,mary).


توضيح اينكه اين حقايق داراي معاني ذاتي نيستند يعني معني عملگر نام father تعريف نشده است. براي مثال با بكار بردن حواس معمول ممكن است آن را بصورت
’’John is the father of mary‘‘ تفسير كنيم. هر چند براي Prolog اين معني وجود ندارد و تنها يك نماد است.
قوانين متعلق به نوع ديگري از بندها هستند. يك بند قانون شامل دو قسمت است،‌ سر كه تنها يك واژه است و بدنه كه تنها يك واژه يا يك اتحاد است. يك اتحاد يك مجموعه از واژه‌هاست كه با نماد كاما از هم جدا مي‌شوند.
منطقاً يك بند قانون بعنوان يك استدلال تفسير مي‌شود، اگر همه عناصر بدنه درست باشند، آنگاه عنصر سر نيز درست است. بنابراين بدنه بند به صورت قسمت if (اگر) و سر بند بصورت قسمت then (آنگاه) قانون مشخص مي‌شوند.
اين مثال براي مجموعه‌اي از بندهاي قانون است:

 parent(X,Y) :- mother(X, Y).
 
 parent(X,Y) :- father(X, Y).
 
grandparent(X,Z) :- parent(X,Y), parent(Y,Z).


قانون اخير خوانده مي‌شود:

’’X is a grand parent of z if X is a parent of y and  y is a parent of z ‘‘


دو قانون اولي مي‌گويند:

’’some one is parent if it is the father or mother of some one else‘‘


دليل رفتار دو قانون اول را هنگام معرفي رويه اثبات Prolog بعنوان فصلي بطور آشكار خواهد آمد. قبل از انجام اين كار بايد آخرين نوع بند را معرفي كنيم،‌ بند پرس و جو (كه بند هدف ناميده مي‌شود). يك پرس و جو براي فعال كردن رويه اثبات Prolog بكار مي‌رود.
منطقاً يك پرس و جو مشابه يك قضيه مجهول است. آن شكلي مشابه حقيقت دارد تا به Prolog بگويد كه يك پرس و جو بايد اثبات شود، عملگر مخصوص پرس و جو –?است معمولاً در جلوي پرس و جو نوشته مي‌شود. در مثالهاي ساده برنامه Prolog معرفي شده در بالا، قبلاً توصيفي غير رسمي از چگونگي استفاده پرس و جو در Prologرا ديديم.
فرايند استنتاج Prolog شامل دو مؤلفه اساسي است: روش جستجو و يكي كننده. روش جستجو براي جستجو ميان حقيقت و قانون پايگاه داده بكار مي‌رود در حالي كه يكي‌سازي براي تطبيق الگو و بازگرداندن اتصالاتي كه يك عبارت صحيح مي‌سازد بكار مي‌رود.
يكي‌ساز روي دو واژه بكار مي‌رود و سعي مي‌كند با تركيب آن دو يك واژه جديد شكل بدهد. اگر يكي سازي ممكن نباشد آنگاه گفته مي‌شود يكي‌سازي شكست خورده است. اگر دو واژه مادي هيچ متغيري نباشند آنگاه يكي‌سازي در واقع از بررسي اينكه آيا واژه‌ها برابرند، خواهد كاست. براي مثال، يكي‌سازي دو واژه father (john,mary) و father(john,mary)  موفق مي‌شود در حاليكه يكي‌سازي جفت واژه‌هاي زير با شكست مواجه خواهند شد.

father(X,mary) و father(john,sue)
 
sequence(a,b,c) و sequence(a,b)

  اگر يك واژه حاوي يك متغير (يا بيشتر) باشد آنگاه يكي كننده بررسي مي‌كند كه آيا متغير مي‌تواند با بعضي از اطلاعات واژه دوم متصل شود، هر چند تنها اگر قسمتهاي باقيمانده واژه‌ها يكي شوند. براي مثال، براي دو واژه زير:

father(X,mary) and father(john,mary)

 يكي كننده X را به john متصل خواهد كرد زيرا واژه‌هاي باقيمانده برابرند. هرچند براي
 زوج زير:

father(X,mary) and father(john,sue)

مفهوم اتصال ساخته نمي‌شود چون mary و sue مطابق نيستند. روش جستجويي كه براي پيمايش فضاي جستجو بكار مي‌رود بوسيله حقايق و قوانين برنامه Prolog محدود شده است. Prolog يك روش بالا به پائين، روش جستجوي عمقي (dfs) استفاده مي‌كند. اين به چه معنا است؟ همه مراحل كاملاً شبيه به روش تابع ارزيابي استفاده شده در Lisp است اگر يك پرس و جوي Q مشخص شده باشد آنگاه ممكن است آن مطابق يك حقيقت يا يك قاعده باشد. در حالتي از قاعده Prolog ,R ابتدا سعي مي‌كند سر R را تطبيق دهد و اگر موفق شود آنگاه سعي مي‌كندهمه عناصر بدنه R كه زير پرس و جو ناميده مي‌شوند را تطبيق دهد اگر سر R حاوي متغيرها باشد آنگاه اتصالات در طول اثبات از زير پرس و جوها استفاده خواهند كرد. از آنجايي كه اتصالات تنها براي زير پرس و جوها معتبر هستند، گفته مي‌شود كه براي يك قاعده محلي هستند. يك زير پرس و جو هم مي‌تواند يك قاعده باشد و هم يك حقيقت. اگر يك قاعده باشد آنگاه فرايند استنتاج Prolog بطور بازگشتي براي بدنه اين پرس و جو بكار مي‌رود. اين، قسمت بالا به پائين روش جستجو را مي‌سازد. عناصر بدنه يك قاعده از چپ به راست بكار مي‌روند و تنها اگر عنصر جاري بتواند با موفقيت اثبات شود عنصر بعدي سعي مي‌شود. اين روش جستجوي عمقي را مي‌سازد. ممكن است براي اثبات يك زير پرس و جو دو يا چند حقيقت يا قاعده ديگر تعريف شوند. در آن صورت A, Prolog را انتخاب مي‌كند و سعي مي‌كند آن را اثبات كند، اگر لازم باشد زير پرس و جوهاي A را نيز پردازش مي‌كند. اگر A با شكست مواجه شود Prolog به نقطه‌اي كه اثبات A شروع شده بر مي‌گردد(با حذف همه اتصالهايي كه در طول اثبات A انتساب داده شده است) و سعي مي‌كند ديگري را اثبات كند. اين فرايند عقب‌گرد نام دارد . به منظور شرح همه روشها پرس و جوهاي نمونه زير را مي‌توانيم ملاحظه كنيد (مثال معرفي شده در بندهاي پاراگراف قبلي را بعنوان پايگاه داده Prolog استفاده مي‌كنيم):

?- grandparent(bill,mary).

 تنها بندي كه با اين پرس و جو تطبيق مي‌كند قاعده زير است.

grandparent(X,Z) :- parent(X,Y), parent(Y,Z).

 و يكي‌سازي پرس و جو با سر قاعده اتصالهاي زير را بر مي‌گرداند: Z=mary,X=bill براي اثبات قاعده، بايد دو عنصر بدنه قاعده از چپ به راست اثبات شوند. توضيح اينكه متغيرهاي مشترك قواعد با سر قاعده و بنابراين اتصالهاي محاسبه شده در طول تطبيق سر با پرس و جو براي پاسخ به زير پرس و جوها موجودند. بنابراين زير پرس و جوي اول در واقع بصورت parent(bill,y) و زير پرس و جوي دوم بصورت parent (y,mary) معرفي شود. حال براي اثبات بند اول prolog دو قاعده parent ديگر مي‌يابد. اجازه دهيد فرض كنيم prolog اولي را انتخاب مي‌كند.( براي ياد‌آوري بيش از يك انتخاب، prolog يك نقطه انتخاب مشخص مي‌كند)

parent(X,Y) :- mother(X, Y).

 يكي‌سازي زير پرس و جوها با سه قاعده به راحتي ممكن است و متغيرx به واژه bill متصل خواهد شد . اين عنصر تك بدنه‌اي بصورت (bill,y) mother معرفي مي‌شود. متاسفانه هيچ حقيقتي كه اين زير پرس و جو را معتبر كند در پايگاه داده وجود ندارد. چون يكي‌سازي (bill,y) mother با شكست مواجه مي‌شود. پس همه قاعده انجام مي‌شود. سپس prolog به نقطه انتخابي كه اولين قاعده parent ممكن را انتخاب كرده بود، برگشته و دومي را انتخاب مي‌كند.

parent(X,Y) :- father(X, Y)   

 يكي‌سازي زير پرس و جوي (هنوز فعال) parent(bill,y) ، father(bill,y) معرفي خواهد شد. اينبار يكي‌سازي ممكن است،‌اتصال y=john برگردانده مي‌شود. حال اولين زير پرس و جوي parent از قاعده grand parent اثبات شده متغيرهاي واقعي X=bill Z=mary,Y=john, هستند. عنصر دوم از بدنه قاعده grandparent،
parent (john, mary) معرفي مي‌شود (توضيح اينكه مقدار z بعد از انتخاب قاعده grand parent فوراً متصل شده است).
همان روش براي اين زير پرس و جو بكار رفته و prolog حقايق كافي براي اثبات موفقيت‌آميز آن خواهد يافت. وقتي كه دو عنصر بدنه قاعده grand parent به طور معتبر اثبات شد، prolog به پايان مي‌رسد كه اولين پرس و جو true مي‌شود. توسعه prolog ، به منظور استفاده از prolog براي برنامه‌نويسي كاربردي است. كه با توسعه‌هايي مانند ليست ساختارهاي داده، عملكردهايي براي كنترل واضح پيمايش از فاصله جستجو با يك برنامه prolog(بنام عملگر برش) و روالهايي براي رابطهاي ورودي /خروجي، تست درستي (رديابي) و اشكالزدايي مي‌آيد. ما نمي‌توانيم همه اين توسعه‌ها را در متن اين مرور كوتاه شرح دهيم. ما تنها بطور خلاصه نشان مي‌دهيم كه ليستها در prolog چگونه مي‌توانند استفاده شوند. Prolog ليستها را بعنوان يك ساختار داده‌اي پايه‌اي با استفاده از syntax متداول پشتيباني مي‌كند. عناصر ليست با كاما جدا مي‌شوند. كل ليست با براكت تعيين مي‌شود. يك عنصر ليست مي‌تواند يك واژه دلخواه يا يك ليست باشد، بنابراين كاملاً شبيه ساختارهاي ليست در Lisp است. اين مثالي از يك ليست prolog است:

[john, mary, bill]

 ليست خالي بصورت [ ]  نمايش داده مي‌شود. براي ايجاد و پيمايش ليستها، prolog يك تركيب خاص مبني بر سر و دنبال يك ليست فراهم مي‌كند.  [X | Y]يك ليست است شامل يك سرليست x و يك دنباله y است. براي مثال ليست بالا مي‌تواند بصورت زير مشخص شود.


[john | mary, bill]

ما گزارهmember  را بصورت مثالي براي نحوه رفتار ليستها در prolog استفاده خواهيم كرد. اين گزاره تعيين خواهد كرد كه آيا يك عنصر داده شده در يك ليست داده شده واقع مي‌شود؟ با توجه به توضيحات بالا يك عنصر در يك ليست است اگر سر ليست آن ليست باشد يا اگر در جايي از دنباله ليست واقع شود، با استفاده از تعريف غيررسمي گزاره member ما مي‌توانيم برنامه prolog زير را طرح كنيم. (نمادي كه يك متغير بي‌نام را مشخص مي‌كند،‌استفاده مي‌شود تا به prolog بگويد مهم نيست مقدار يكي كننده به آن متصل شود)

 member(Element,[Element | ]).
  member(Element,[ | List]) :- member(Element,List).

با فرض پر س و جوي زير

?- member(a, [b,c,a,d]).

 Prolog ابتدا كنترل مي‌كند كه آيا سر ليست  [b | c,a,d]برابر a است.
به اين علت بند اول با شكست مواجه مي‌شود، پس دومي سعي مي‌شود. اين زير پرس و جوي member (a,[c,a,d]) معرفي خواهد شد كه معني‌اش اين است كه از روي عنصر اول بسادگي مي‌پرد با بكار بردن بازگشي member،prolog سعي مي‌كند تا اثبات كند كه آيا سر ليست  [c | a,d]با a برابر است، كه با شكست مواجه مي‌شود.، زير پر س و جوي جديد member (a,[a,d]) را با معرفي بند دوم بدست مي‌آوريم. گام بازگشتي بعدي ليست [a | d]را كنترل خواهد كرد. اينبار a براستي با عنصر سر ليست اين ليست برابر مي‌شود، بنابراين prolog با "yes" پايان خواهد يافت.
برنامه‌نويسي منطقي محدوديت (clp)تصميمي از سبك برنامه‌نويسي (ساده)‌prologاست. در clp واژه يكي‌سازي به حل محدوديت تعميم يافته است. در برنامه‌نويسي منطقي محدوديت مولفه‌هاي اصلي يك مسئله بصورت محدوديت‌ها حالت يافته‌اند (يعني ساختار اشياء در سؤال) و مسئله بصورت يك كل كه با گذاشتن محدوديتهاي مختلف بوسيله قواعد ارائه شده است. (اساساً بوسيله تعريف بندها) براي مثال بند معين زير نمونه يك تجزيه ريز از گرامر يك زبان طبيعي مانند انگليسي است.

  sign(X0) ←
 sign(X1),
 
 sign(X2),
 
 X0 syn cat = s,
 
 X1 syn cat = np,
 
 X2 syn cat = vp,
 
 X1 syn agr = X2 syn ag


بيان مي‌شود يك شي زباني بصورت يك عبارت S طبقه‌بندي مي‌شود كه بايد مركب از يك شيء طبقه‌بندي شد كه بصورت يك NP (عبارت اسمي) و يك شئ طبقه‌بندي شده بصورت يك VP(عبارت لفظي) باشد و قرارداد اطلاعات (مانند شخص، حالت) بايد بين NP و VP يكسان باشد. همه اشيايي كه حداقل اين محدوديتها را انجام مي‌دهند جزء‌اشياي S هستند. توضيح اينكه هيچ ترتيب پيش فرضي براي VP,NPبعنوان حالتي براي گرامر زبان طبيعي مبني بر ظواهر وجود ندارد كه متن بدون استحكام به آن تكيه كند. اگر يك محدوديت نياز به محدوديتهاي اضافي داشته باشد. بايد به قاعده اضافه شود، براي نمونه زير ريشه‌ها بايد با الحاق تركيب شوند از نجاطيآنآن
آنجايي كه محدوديتهاي مثال بالا تنها شرايط لازم براي شئ از كلاس S را مشخص مي‌كند آنها اطلاعات مختصري بيان مي‌كنند. اين براي دانش مبني بر استدلال خيلي مهم است زيرا در كل ما تنها اطلاعات مختصري درباره جهان (محيط)‌داريم، ‌ما براي پردازش چنين خصوصياتي دليل مبني بر حل محدوديت و الگوي برنامه‌نويسي منطقي مي‌خواهيم. چون يكي‌سازي، فقط حالت خاصي از حل محدوديت است، برنامه‌هاي منطقي محدوديت توان بيان بالايي دارند.
تعدادي از زبانهاي برنامه‌نويسي منطقي محدوديت (همراه با رابط كاربر سطح بالا و ابزارهاي توسعه) تحقق يافته‌اند. مانند CHIP يا زبان OZ كه برنامه‌نويسي اعلاني، برنامه‌نويسي شئ گرا، برنامه‌نويسي محدوديت و همزماني را بعنوان جزئي از كل منسجم پشتيباني مي‌كند. OZ زباني محدوديت قدرتمندي با متغيرهاي منطقي،‌دامنه‌متناهي، مجموعه‌هاي متناهي، درختهاي عقلاني و ركورد محدوديت‌هاست. آن در صدد است تا يك روش يكتا و انعطاف‌پذير بدون شاخ و بندها براي برنامه‌نويسي منطقي فراهم كند. OZ بين روشهاي مستقيم و غير مستقيم برنامه‌نويسي منطقي اعلاني تفاوت قايل مي‌شود.


V. ساير روشهاي برنامه‌نويسي
‌در اين مقاله قبلاً زبانهاي AI را با روشهاي برنامه‌نويسي دستوري مقايسه كرديم. زبانهاي شيء گرا به الگوي برنامه‌نويسي مشهور ديگري تعلق دارند. در اين جور زبانها اولين وسيله براي تعيين مسئله‌ها، تعيين خلاصه ساختارهاي داده است كه كلاس‌ها، اشياء‌نام دارند. يك كلاس شامل يك ساختار داده همراه با عمليات اصلي‌اش كه اغلب اسلوبها (روشها) نام دارند است. يك ويژگي مهم اين است كه ممكن است كلاسها در سلسله مراتبي از كلاسها و زير كلاسها مرتب شوند. يك كلاس مي‌تواند صفات سوپر كلاسهايش كه پيمانه‌اي بودن را پشتيباني مي‌كنند را به ارث ببرد.
مشهورترين زبانهاي شيءگرا C++,Eiffel و Java (جاوا) هستند. سيستم Common Lisp شيءگرا يك توسعه از common Lisp است. آن يكپارچه‌سازي كامل برنامه‌نويسي تابعي و شيءگرا را پشتيباني مي‌كند. اخيراً جاوا در بعضي از زمينه‌ها AI، خصوصاً در فن‌آوري عامل هوشمند، موتورهاي جستجوي اينترنت يا استخراج داده‌ها كاملاً مشهور شده است. جاوا بر مبناي C++ است و زبان اصلي براي برنامه‌نويسي كاربردهاي اينترنتي است. مهمترين ويژگيهاي زبان كه جاوا را از چشم‌آنداز AI جذاب مي‌سازد فضاي هرز خودكار پيش‌ساخته آن و مكانيزم چند نخي (چند وظيفه‌اي) آن است.
با افزايش تحقيقات در زمينه وب هوشمند يك الگوي برنامه‌نويسي جديد- برنامه‌نويسي عامل‌‌گرا – پديدار شد. برنامه‌نويسي عامل‌گرا يك الگوي جديد برنامه‌نويسي است كه يك نماي اجتماعي از محاسبه را به خوبي پشتيباني مي‌كند. در AOP اشياء بعنوان عاملهايي شناخته مي‌شوند كه براي دستيابي به اهداف شخصي عمل مي‌كنند. عامل در يك ساختار مي‌تواند به پيچيدگي شبكه سراسري اينترنت يا به سادگي يك پيمانه (ماجول) از يك برنامه معمولي باشد. عاملها مي‌توانند موجوديتهاي مستقل باشند يعني بدون دخالت كاربر براي گام بعدي‌شان تصميم بگيرند، يا مي‌توانند قابل كنترل باشند، يعني بعنوان وسيله‌اي بين كاربر و عاملهاي ديگر بكار بردند. از آنجايي كه عاملها زنده در نظر گرفته مي‌شوند، با رشد موجوديتهاي نرم‌افزار، به نظر مي‌رسد انتقالي از نقطه‌نظر زبانهاي برنامه‌نويسي به طرف نقطه‌نظر سكوي پيشرفت نرم‌افزار پديدار مي‌شود. اينجا تأكيد روي طراحي سيستم، سكوي پيشرفت و اتصال است. سئوالات حساس عبارتنداز: چگونه تعدادي از منابع پيشرفته AI كه در زبانها و سكوهاي مختلف موجودند مي‌توانند با ساير منابع استفاده‌كننده از ابزارهاي پيشرفت سيستم جديد مانند CORBA (معماري عادي رابط درخواست شئ) تركيب شوند (يكپارچه شوند)، خلاصه‌سازي عمومي انواع داده و زبانهاي تفسيري(يادداشت حاشيه‌اي) مانند XML و زبان استاندارد ارتباطات عامل‌گرا مانند KQML (زبان شناخت پرس و جو و دستكاري).
 بنابراين آينده برنامه‌نويسي AI كمتر نگران سئوالاتي مثل: ” مناسب‌ترين الگوي برنامه‌نويسي چيست؟ “ است  ولي بايد به سئوالاتي مثل: ” چگونه مي‌توانم الگوهاي مختلف برنامه‌نويسي را زير يك سايبان يكپارچه كنم؟ “  و ” بهترين زبان ارتباطي براي نرم‌افزارهاي مستقل پيمانه‌اي هوشمند چيست؟ “  پاسخ دهيم.
 


*اين مقاله ترجمه‌اي است از:


Neumann, Gunter Programming Languages in Artificial Intelligence. In: Bentley & Bidgoli: Encyclopedia of Information Systems,
Academic Press, San Diego, 2002

http://www.dfki.de/~neumann/publications/new-ps/ai-pgr.pdf 
 

VI. منابعي براي مطالعه بيشتر

 1.Charniak, E., Riesbeck, C.K., McDermott, D.V. and Meehan, J.R., 1980, Artificial Intelli- gence Programming, Lawrence Erlbaum Associates, Hillsdale, New Jersey.
 
2.Clocksin, W.F. and Mellish, C.S, 1987, Programming in Prolog, Springer, Berlin, Germany.
 
3.Keene, S.E., 1988, Object–Oriented Programming in Common Lisp, Addison–Wesley, Read-ing, Massachusetts.
 
4.Luger, G.F. and Stubblefield, W.A., 1993, Artificial Int elligence: Structures and Strategies
 
for Complex Problem Solving, second edition, Benjamin/Cummings, Redwood City, Cali-fornia.
 
5.Norvig, P., 1992, Artificial Intellig ence Programming, Morgan Kaufman Publishers, San ateo, California.
 
6.Pereira, F.C.N. and Shieber, S.M., 1987, Prolog and Natural Language Analysis, CSLI Lecture Notes, Number 10, Stanford University Press, Stanford, California, 1987.

7.Sebesta, R.W., 1999, Concepts of Programming Languages, fourth edition, Addison–Wesley, Reading, Massachusetts.

8.Ullman, J.D., 1997, Elements of ML Programming, second edition, Prentice-Hall.
9.Watson, M., 1997, Intelligent Java Applications for the Internet and Intranets, Morgan Kaufman Publishers, San Mateo, California.

مرجع: www.irandoc.ac.ir   

+ نوشته شده در ساعت توسط alireza |

 

چکیده:
در حال حاظر تحقیقات زیادی در گرایش های پردازش تصویر و پردازش صوت در سطح دنیا در حال انجام است که عموما از روشهای هوش مصنوعی و الگوریتم های مختلف پردازش، نظیر DSP ،الگوریتم ژنتیک،شبکه عصبی و... استفاده میکنند.هدف این تحقیق ایجاد روشی هوشمند جهت افزودن قابلیت تشخیص کلمات برای کامپیوتر، مبتنی بر تکنیک شبکه عصبی میباشد.این روش از راه آموزش دادن شبکه ای مناسب، قادر است سیگنالهای صوتی مختلف را تفکیک و دسته بندی نماید و در نهایت مفاهیمی را که کاربر برای هر گروه از اصوات مشخص مینماید به طور محدود بیاموزد.در این تحقیق، شبکه با سیگنالهای صوتی اعداد صفر تا نه، به زبان فارسی آموزش داده شده وهدف شبکه بعد از آموزش، تفکیک سیگنالهای ورودی و یافتن عدد متناظر با سیگنال ورودی میباشد.

كليدواژه ها: شبکه عصبی، تشخیص صدا، پردازش صوت، سيستمهاي هوشمند


1) مقدمه:
در زمینه تشخیص الگوی صوت توسط شبکه عصبی تا کنون در ایران کار زیادی صورت نگرفته و مقاله های محدودی که وجود دارد بیشتر به این موضوع از دید عمومی و معرفی تکنیک پرداخته شده است. نتایج این تحقیق کاملا عملی و حاصل کار،یک نرم افزار به زبان برنامه نویسی مطلب میباشد ونتایج بصورت نمودار ها و جداول در پایان ارائه شده.در مقاله های خارجی از روشهای مختلف شبکه عصبی استفاده شده و عموما نمونه های صوت را بدون تغییر به عنوان دیتای ورودی به شبکه در نظر گرفته اند و این موضوع باعث حجیم شدن شبکه ،طولانی شدن مراحل آموزش شبکه، وابستگی شدید نتایج به دامنه سیگنال وحساسیت زیاد نتایج به نویز میباشد.
روش ارائه شده در این مقاله بواسطه وجود یک مرحله اصلاح وتغییر دیتا، مقداری از مشکلات بالا کاسته ولی نقاط ضعفی هم دارد. از جمله وابستگی زیاد شبکه به تن صدا ودیتایی که شبکه توسط آن آموزش می بیند. بنا بر این برای عمومیت پیدا کردن عملکرد شبکه نیاز به دیتای فراوان ازافراد مختلف،لهجه ها و گویش های متفاوت دارد.

2) روش استفاده شده برای تشخیص:
به طور کلی میتوان مراحل انجام این پروژه از ابتدا تا پایان را به قسمتهای زیر تقسیم بندی نمود
-1تهیه دیتا
-2اصلاح دیتای خام جهت ارائه به شبکه
-3ایجاد یک شبکه مناسب
-4آموزش شبکه
تمامی مراحل فوق به کمک جعبه ابزار ها و دستورات مختلف نرم افزار مطلب قابل اجرا است .

در مرحله اول که تهیه دیتا میباشد از جعبه ابزارData Acquisition Toolbox استفاده شده مراحل مختلف استفاده از این جعبه ابزار بطور کامل در help مطلب به همراه مثال آموزش داده شده .که بطور خلاصه شامل مراحل زیر است.
• تعریف یک ورودی آنالوگ
• مشخص نمودن مرجع دریافت ورودی (کارت صوتی تحت اختیار سیستم عامل و یا ...)
• تعریف کانال یا کانالهای ورودی(سخت افزار مرجع ممکن است چندین ورودی داشته باشد)
• تعیین فرکانس نمونه برداری.
• تعیین ورودی پیش فرض جهت نمونه برداری از بین کانالهای تعریف شده.
• مشخص نمودن نحوه شروع نمونه برداری (یک تحریک سخت افزاری یا یک دستور شروع نرم افزاری) که ما بنا بر ملاحظات کار خود حالت سخت افزاری را انتخاب میکنیم.
• دستور شروع نمونه برداری شامل یک حلقه هزارتایی جهت برداشت هزار سیگنال از اعداد0الی9

(شکل1) سیگنال مربوط به عدد یک میباشد و(شکل2) به ترتیب اعداد از0الی 9را نشان میدهد.الگوی سیگنال مربوط به سایر اعداد متفاوت میباشد.اما الگوی اعداد یکسان نیز کاملا منطبق بر هم نیست وتفاوتهایی باهم دارند.

 

شکل1

شکل2
 

همانطور که قبلا نیز گفته شد،هر کدام از این سیگنالها شامل 4800 نمونه میباشد واین نمیتواند جهت ارئه به یک شبکه مناسب باشد.زیرا اولا باعث حجیم شدن بی مورد شبکه میشود چرا که در اینصورت شبکه میبایست 4800 ورودی دااشته باشد . ثانیا ّ این تعداد نمونه شامل اطلاعات جزئی بسیاری هست که از نظر ما چندان مورد نیاز نیست. بلکه یک سری اطلاعات کلی تر وبهینه که بیانگر بیشتر اطلاعات سیگنال اصلی باشد برای ما کفایت میکند.بدین منظور سیگنال خام ورودی را به 12 قسمت که هر قسمت شامل 400نمونه میباشد تقسیم میکنیم و از هر قسمت یک مشخصه که بیانگر رفتارسیگنال در آن بازه میباشد استخراج میکنیم.بدین ترتیب از هر سیگنال بجای 4800 نمونه 12 نمونه خواهیم داشت.که نتایج پروژه کافی بودن آن را تایید میکند.
اما روش استخراج این 12 مشخصه از هر سیگنال چیست ؟
در این مورد تاکید پروژه بر مشخصات فرکانسی سیگنال میباشد.به نحوی که در نهایت بدانیم در هر یک از 12 قسمت سیگنال، چه فرکانسی بیشترین سهم را در انرژی آن قسمت داشته است.بدین منظور باید ازهر قسمت سیگنال بطور جداگانه FFT گرفته وبا استفاده از تکنیک های مختلف ریاضی فرکانس غالب را از میان ضرایب FFTجستجو کنیم که در ادامه بیشتر به آن میپردازیم.(شکل3 ) سیگنال عدد یک را که به 12 قسمت تبدیل شده نمایش میدهد.

 


 

شکل3


(شکل4) FFT مربوط به هر قسمت را نظیر به نظیر نشان میدهد.وبه سادگی میتوان توزیع انرژی را در حوزه فرکانس مشاهده نمود.به علت تقارن نیمی از این اطلاعات برای تعیین فرکانس غالب کافیست.

شکل4


برای به دست آوردن فرکانس غالب روشهای مختلف آماری را میتوان بکار برد.انواع میانگین گیری های حسابی ،هندسی،وزنی، توافقی ، از این نوع میباشند.ولی در این پروژه از روش خاص دیگری از میانگین گیری استفاده شده که در ادامه توضیح داده میشود.
برای بدست آوردن فرکانس غالب،ابتدا اندازه ضرایب FFT را بدست میاوریم سپس این ضرایب را به ترتیب از ضریب dc تا بالاترین فرکانس، که 1 است روی یک دایره از 0تا2/π قرار میدهیم بطوری که به هر ضریب یک زاویه تعلق میگیرد(شکل5).بنابراین هر ضریب به صورت یک بردار در می آید.از حاصل جمع این بردارها یک بردار حاصل بدست میاید که زاویه آن بیانگر فرکانس غالب میباشد(شکل6).


شکل5                                                      شکل6


بدیهی است برای هر یک از 12 قسمت سیگنال، یک بردار خواهیم داشت که زاویه هریک از این بردارها نشان دهنده فرکانس غالب آن قسمت خواهد بود .بدین ترتیب از هر سیگنال با 4800 نمونه تنها 12 عدد بدست می آید که اطلاعات کافی از سیگنال با خود دارد و ضمنا برای شبکه نیز مناسب است. چرا که در این صورت شبکه تنها12 ورودی خواهد داشت(.شکل7 ) این 12 بردار را از یک سیگنال(سیگنال صحبت عدد یک)در کنار هم نشان میدهد.

 

شکل7


شکل (8)در نتیجه اعمال الگوریتم بالا بر روی سیگنالهای صوتی اعداد 1 ،2،..... 9 ،0 میباشد.همینطور که مشاهده میشود از هر یک از سیگنالها خام که 4800 نمونه هستند،سیگنال جدید اصلاح شده ،شامل 12 نمونه تولید شده است.
 


 

شکل8


در این پروژه از یک شبکه عصبی رقابتی دو لایه Backpropagation با آموزش LM استفاده شده ورودی شبکه همان بردارهای 12تائی فصل قبل میباشد وخروجی شبکه یا همان target ها یک بر دار 10تایی از اعدادی میباشدکه درایه متناظر با عدد گفته شده مقدار1 وسایر درایه ها مقدار صفر را دارند .)شکل9 (نمایی از شبکه و) شکل(10 الگوی خروجی را نشان میدهد

 

الگوی در نظر گرفته شده برای خروجی حالت رقابتی ایجاد میکند .یعنی بعد از آموزش دادن به شبکه هرگاه یک ورودی به شبکه بدهیم ،هریک از10 خروجی یک مقدار را نشان میدهد.که از رقابت نرون های مختلف با هم حاصل میشود .نرون خروجی برنده نرونی است که بیشترین مقدار را نشان دهد، حتی اگر منطبق بر مقدار آموزش داده،یعنی 1 نباشد .با استفاده از یک ماکزیمم گیری از خروجی میتوان دست اندیس خروجی ماکزیمم را به عنوان برنده بالا برد.

آموزش شبکه همانطور که گفته شد روش Levenberg-Marquard یا همان LM میباشد.که یکی از سریعترین روشهای آموزش شبکه میباشد.(شکل11) همگرائی آموزش را نشان میدهد که با150 epoch به دقت 0.0048 رسیده است و شیب منحنی در مراحل پایانی به سمت صفر نزدیک شده که نشان میدهد دقت بیشتر از0048.0 چندان میسر نیست.


شکل11

 

3.  ساختار شبیه سازی و آزمون:
بعد از آموزش شبکه، برای تست شبکه ، دو نوع آزمایش انجام میشود . در جداول 1 و 2 پاسخ شبکه به دو نوع آزمایش دیده میشود.آزمایش اول به این صورت است که اعداد 1 ،2،.....9 ،0 به ترتیب در چهار نوبت گفته شده. در) جدول (1مربوط به آزمایش اول، خانه های با حاشیه و فونت ضخیم تر نشان میدهد که خروجی به درستی بیشترین مقدار را کسب کرده و پاسخ صحیح است.خانه های خاکستری نشان میدهد که پاسخ نادرست است و آن خانه مقدار مناسب را کسب نکرده است.
آزمایش دوم مربوط به مواردی است که سیگنال ورودی کلماتی بجز اعداد 0 الی 9 باشد. در این صورت نیز یکی از خروجی ها به تصادف ماکزیمم میشود. سوال این است که آیا میتوان این نوع کلمات غیر مجاز را تشخیص داد. جهت بررسی رفتار شبکه نسبت به اینگونه موارد سیگنال صحبتهای مربوط به کلمات اراک، سلام، شبکه،نرون،سمینار،آزمون،مطلب،جمعه،دانشگاه وموسیقی به شبکه داده شده و خروجی متناظر به این کلمات نیزدر )جدول2 (ارائه شده که در بخش نتیجه گیری در مورد نتایج آن بحث میشود.


جدول 1

0.99996

0.00247

0.00759

0.00118

-0.0093

-0.0005

0.92969

-0.0033

0.01247

-0.0055

-0.00769

1

-0.0149

0.02235

-0.0172

-0.0003

-0.02104

7.54E-

0.00112

0.62631

0.00075

0.00054

1

0.00361

0.0019

0.0002

3.45E-

6.43E-5

-0.00174

0.00061

-0.00389

0.11726

0.00099

0.93426

-0.0082

-0.0007

0.00501

0.00031

0.00590

0.03090

0.45899

0.00528

0.00898

0.00048

1

0.14434

-0.41392

0.00603

0.01618

0.33243

-0.00048

0.00012

0.00085

-0.0039

-8.86E-

1

0.00010

-0.0014

0.00025

0.00069

0.04716

0.02354

0.04645

0.00770

1

0.00131

0.6119

0.00348

0.076719

0.02444

-0.00227

-.00136

0.000568

-0.0003

-.00442

-.01326

0.000438

1

-1.83E-

0.00283

0.002355

-.00065

0.000788

0.00222

0.01919

-0.0002

0.028465

-7.53E-

0.008661

-.00253

0.001012

-.00098

-0.1952

-.00399

-.00207

-.00086

0.000554

-5.97E-

0.001909

0.00151

 

0.991

-0.00256

0.006515

-0.01268

0.004974

-0.00285

0.012477

-0.00129

0.000747

-0.00129

0.000972

0.73688

0.010713

0.7069

-0.00724

0.003887

0.001131

-0.0076

-0.01859

-0.0076

-0.00166

-0.00093

-1

0.005138

0.000579

-0.00013

-0.00174

0.017381

-0.00118

0.017379

0.005728

0.043277

0.005206

0.044472

-0.00347

0.001654

0.005909

-0.00106

0.000753

-0.00106

0.015809

-0.00467

0.011563

-0.01747

0.97897

-0.51628

0.016042

-0.0023

0.233

-0.00229

0.000243

-0.00026

-0.00257

-0.00171

-0.00047

1

0.00025

-0.00118

5.46E-05

-0.00119

0.074424

-0.0223

0.039055

-0.08554

0.050751

-0.02927

0.076761

-0.01035

-0.01348

-0.01034

-3.13E-05

-0.00147

-0.00483

-0.00213

-0.0022

0.83739

-1.84E-06

0.000168

-6.87E-06

0.000132

0.006861

-0.00073

0.014313

-0.00624

0.00284

-0.00173

0.007129

-0.00013

0.99994

-0.00013

0.001856

-0.00148

0.1669

1

0.001098

-0.0012

0.003419

1

0.000373

1

 

1

-0.00167

-0.01126

0.001187

-0.00026

-0.00058

-1

-0.00332

0.72346

0.001114

-0.00448

1

-0.01303

-0.02235

0.000119

-0.0003

0.039466

7.54E-06

-0.03148

-0.00122

0.001213

-0.00031

1

-0.00361

2.17E-05

0.000216

1.83E-01

6.43E-05

0.386

0.01393

-0.00044

0.036589

0.92687

0.93426

-1.33E-05

-0.00072

0.004776

-0.00031

-0.01409

0.000408

-0.01243

-0.00659

-0.19702

0.000487

1

0.009393

0.016012

0.006036

-0.0421

0.000933

7.91E-06

-0.00017

1

-0.0039

-8.76E-04

1

0.000195

-0.0014

-0.00275

-0.00093

-0.0082

-0.02237

-0.07733

0.007707

-0.00559

-0.00134

0.046798

-0.00348

-0.19102

0.004884

-0.00102

-0.00062

-0.0054

-0.0003

0.00077

-0.06206

0.000442

1

-5.74E-03

1.00E-04

-0.00258

-0.00154

-0.00358

-0.00222

5.29E-05

-0.0002

0.98317

-7.53E-05

0.99999

0.001139

-3.94E-05

-0.0006

-0.06519

-0.00394

-4.26E-05

-0.00086

0.000446

-5.97E-05

0.006024

1

 

1

-0.00268

-0.00639

-0.00053

0.005069

0.012435

-0.01044

-0.00332

0.002323

-0.00052

-0.0036

0.99844

0.4439

-0.0046

-0.00735

0.001108

-0.00998

7.54E-06

0.001367

0.067117

0.001213

-0.00088

0.66924

0.009655

5.84E-04

-0.00179

1.88E-03

6.43E-05

0.000208

0.014646

-0.00045

0.023702

0.018831

-0.00028

-3.51E-03

0.005874

-0.00579

-0.00031

0.001268

0.003004

-0.01249

-0.00491

-0.0068

-0.00056

0.63852

0.017369

0.76069

0.006036

-1

-0.00133

8.01E-06

-0.00022

-0.00254

-0.00146

-4.64E-04

0.042868

0.0008

-0.00139

0.000843

-0.00099

-0.0082

-0.02303

-0.04434

-0.00494

0.05174

0.076547

1

-0.00348

0.99994

-0.00579

-0.00102

-0.00147

-0.00552

-0.00056

-0.00221

-1.77E-05

0.18026

1

-5.78E-03

-1.01E-05

-0.00258

-0.00079

0.005069

0.000119

2.89E-03

0.007105

-0.01587

-7.53E-05

0.96363

0.000281

-3.87E-05

-0.00145

0.005708

1

1.12E-03

0.001901

-0.01922

-5.97E-05

-0.00946

1

 


جدول 2

 

اراک

سلام

نرون

سمینار

آزمون

مطلب

جمعه

دانشگاه

موسیقی

1

0.011132

0.012473

-0.00339

0.010817

0.010684

0.007492

0.012466

0.012473

-0.01703

2

0.079602

0.001128

-0.02374

7.87E-05

0.00039

-0.0046

1.12E-03

0.001129

-0.00865

3

0.029131

-0.00173

-0.00097

5.68E-04

0.000373

-1.70E-04

-1.72E-03

-0.00173

0.019162

4

0.009284

0.005906

-0.001

5.07E-03

0.005234

-0.00045

0.005903

0.005907

-0.0072

5

0.014323

0.016299

-0.00492

0.013961

-0.00115

0.3279

0.016173

0.016176

-0.01662

6

0.000206

0.00025

-1.58E-05

7.73E-05

6.16E-05

-0.00023

0.000249

0.00025

-0.00283

7

0.067926

0.07673

-0.05896

0.066284

0.065378

0.059999

0.076677

0.076722

-0.09027

8

-0.00013

-2.33E-06

8.51E-07

1.43E-05

4.61E-01

-0.00149

-1.72E-06

2.39E-04

1.00E+00

9

0.006421

0.007127

1

6.25E-03

0.006229

0.004276

7.12E-03

0.007127

-0.0073

0

0.001443

0.009729

-9.97E-05

1.00E-100

0.99995

0.001429

4.11E-02

0.015686

1

میانگین

0.012001

0.021934

1.28E-02

0.090689

0.11031

0.15482

0.039415

0.015908

0.013398

واریانس

0.000827

0.00054

0.102426

0.098116

0.108582

0.010631

0.000616

5.38E-04

0.184428


4. نتیجه گیری:
در مورد سیگنالهای اعداد 0 الی 9 همینطور که دیده میشود فراوانی پاسخ صحیح چشمگیر است. نتایج نشان میدهد که در بیش از 70% موارد،تشخیص شبکه صحیح است و در مواردی نیز خروجی مربوط به دو یا چند عدد همزمان 1می شوند که تشخیص اشتباه میباشد.نتایج فوق با آموزش شبکه توسط صدسیگنال از هر عدد حاصل شده . درصورتی که آموزش شبکه بادیتای بیشتری صورت گیرد قطعا خطا نیز کاهش خواهد یافت.
در مورد یک کلمه مجاز در بهترین شرایط یکی از خروجیها 1 و نه تای دیگر0 است پس انتظار داریم واریانس و میانگین، هردو0.1 باشد. برای تشخیص ورودی های غیر مجاز میتوان از نحوه توزیع خروجی شبکه استفاده کرد.در این صورت خروجی هادر بیشتر موارد توزیعی نسبتاً یکنواخت دارند و یا اینکه بطور همزمان بیش از یک ماکزیمم خواهیم داشت.بنا بر این واریانس خروجی کوچک خواهد شد و میانگین نیز از 0.1 فاصله میگیرد بدین ترتیب ما متوجه این خطا خواهیم شد. همینطور که مشاهده میشود. در مورد کلمات غیر مجاز جدول2 هردوشرط میانگین و واریانس با هم بر قرار نیست. بنا بر این میتوان از این دو پارامتر به عنوان معیاری جهت قبول یا رد پاسخ استفاده کرد .
نکته آخر اینکه موفقیت شبکه در تشخیص صحیح به شدت وابسته به تعداد و تنوع دیتا میباشد.و حتی با اضافه کردن دو شرط بالا در صورت کم بودن دیتای آموزش، موفقیت شبکه چندان قابل توجه نخواهد بود.

مرجع: www.irandoc.ac.ir   

+ نوشته شده در ساعت توسط alireza |

 

چکیده:
کنترل رباتهای سیار(موبایل ربات) جهت عدم برخورد با موانع بر اساس آموزش و پیشگویی مختصات موانع در لحظات بعدی از موسوم ترین روش های کنترل سینماتیک و دینامیک روباتهای سیار می باشد.اما آنچه که ما ارائه می دهیم، براساس آموزش شبکه عصبی از دست فرمان اپراتور ربات درمقایسه با موانع پیش آمده درحین آموزش ربات است.این ایده برای کنترل اتوموبیل ها نیز قابل تعمیم است.بعبارتی ربات ما نیازی به داشتن یک حافظه برای بخاطر سپردن موقعیت موانع در حین آموزش، برای پبشگویی مکان های موانع بعدی ندارد.در نمونه های رایج دنیا ربات با اسکن نامحدود صفحه مورد آزمایش میخواهد نحوه چینش موانع  را بر اساس  x , y  صفحه تست بیاموزد ، تا در حالت اجرا پس ازآموزش بتواند  موانع را پیشگویی کند.اما ما یک دست فرمان ایده آل خودمان را از طریق اپراتور به ربات آموزش داده سپس آن را در محیط های متنوع دیگر میتوانیم بکار بگیریم
 كليدواژه‌ها: Feed Forward Network - Back Propagation
 
1- مقدمه:
هدف ما فیدبک گیری از موانع از طریق تصویر یا سنسور ها می باشد تا با آموزش نحوه کنترل سرعت و جهت حرکت در مواجهه با رخ دادها ، به ربات آموزش لازم را بدهیم ، و ربات  تصمیم لازم را در نحوه کنترل بردار سرعت در محیط های مختلف تست از خود بروز دهد. با اینکار دانستن موقعیت  x ,yموانع برای آموزش کاملا منتفی است. بلکه فقط با دانستن فاصله از موانع محیط تست برحسب آموزش داده شده به شبکه عصبی ، ربات تصمیم لازم را در مقابل موانع ثابت وحتی متحرک اتخاذ می کند.ایده ما بر این اساس است که ربات از هر اپراتوری دست فرمان همان اپراتور را آموزش ببیند. همانند راننده ای که با راننده دیگراتومبیل را متفاوت می راند.(همانند پیچیدن در سر پیچ با سرعت های مورد علاقه هر راننده).
امروزه در دنیا  اصول کنترل این نوع ربات ها این گونه طراحی شده است که با یک دوربین یا هر نوع  فیدبک دیگری موقعیت (x ,y) موانع در لحظات مختلف آموزش ، به ربات آموزش داده شود بطوری که در حالات بعدی بتواند موقعیت آنها را پیشگویی کند.اما ما با استفاده از دید راننده (اپراتور آموزش دهنده) و دید ربات از موانع ، تصمیم اپراتور را به ربات آموزش می دهیم. آنگاه ربات در مواجهه با موانع مختلف ثابت ویا متحرک شبیه اپراتور عمل می کند وتصمیم میگیرد.
 
2- ساختار ربات:
در ایده ما ربات نیاز به چینش 5 سنسور در موقعیت های مشابه شکل زیر دارد.سنسورها می توانند از نوع آلتروسونیک یا مادون قرمز باشند، تا  بالاخره بتوانندبازه دید ربات را پوشش دهند.

در اجرای این طرح ما از شیب دار  بودن سطوح آزمایش ربات چشم پوشی میکنیم.در این حال فیدبک دریافتی از هر سنسور را بصورت درصدی بین صفر تا صد برای سخت افزار و نرم افزار شبکه عصبی مان معرفی میکنیم. یعنی اگر کل تشعشع تابشی بازگشت کند به معنی این است که آن سنسورکاملا در مقابل مانع قرار گرفته است و مقدار کمّی آن 100% است. برای طراحی این شبکه پارامترهای ورودی عبارتند از: مقادیر در صد بازگشت تشعشع  هر سنسور (a, b, c, d, e) ، طول بردار  سرعت فعلی ربات ( V ) و زاویه بردار سرعت فعلی یا همان زاویه  فرمان ربات(θ).و در این حال پارامترهای خروجی ربات نیز عبارتند از: طول بردار سرعت ربات ( V )  و زاویه بردار سرعت یا همان زاویه  فرمان ربات (θ).
به عبارت بهتر بردار بازتابش تشعشع سنسورها و بردار سرعت در لحظه فعلی، ورودی های شبکه مورد طراحی ما بوده و بردار سرعت برای لحظه بعد ، خروجی شبکه ما خواهد بود.
 
3- خصوصیات شبکه عصبی مورد نیاز:
با توجه به نیاز سیستم برای کسب آموزش در حین یادگیری وحذف وکاهش خطا ی خروجی ، وجود فیدبک در شبکه مورد طراحی اجتناب ناپذیر است. از طرفی چون نتایج ایده آل نیز در اختیار شبکه قرار میگیرد وبردار هدف راتشکیل میدهد، لذا استفاده از روشی برای کاهش خطا بین حالت رانندگی  اپراتور و رانندگی ربات الزامی است. با این توصیف  بهترین نوع شبکه  برای ما  Feed Forward Network است که با الگوریتم B.P برای یادگیری قانون اصلاح خطا بکار برود. در مسیر رفت این الگوریتم پارامترهای شبکه،ثابت و بدون تغییر فرض می شوند. ودر مسیر برگشت این پارامترها بر اساس قانون اصلاح خطا تنظیم میگردند.این کار تا زمانی انجام میپذیرد که در لایه خروجی شبکه سیگنال خطا ی شبکه در حد مورد قبول کاربر برسد.بردار خطا که همان اختلاف بین پاسخ مطلوب و پاسخ واقعی است ، ناشی از (Vt و θ t) بدست آمده در عمل  و  (V وθ) مطلوب اپراتور است که در اثر باز تابش

 سنسورها یعنی (a, b, c, d, e) ، باید ربات آن تصمیم را می گرفت . که شبکه مذکور قابلیت پس انتشار خطا، جهت اصلاح رفتاری شبکه انتخاب شده را دارد.
 
4- ساختار شبکه عصبی پیشنهادی ما:
شبکه عصبی طراحی شده ما از نوعFeed Forward با الگوریتم Back Propagation بوده واز 3 لایهتشکیل شده است که، در لایه اول 7 نرون (به ازای هر ورودی) و در لایه دوم 19نرون (برحسب نتایج شبیه سازی انجام شده که پاسخ  مناسب داده) و در لایه سوم 2 نرون ( به تعداد پارامتر های خروجی) طراحی کرده ایم.توابع لایه اول از نوع tan sigmoid  و توابع لایه دوم از نوع log sigmoid وتوابع لایه سوم از نوع خطی است.لایه های ورودی و خروجی ، تاثیر گرفته از تعداد و محدوده اعداد  ورودی ها وخروجی ها ی مورد نظر ماست.
این ربات نیز مانند هر سیستم کنترل شونده با شبکه های عصبی در فاز اول که به آن  به اصطلاح off line گفته  میشود،آموزش دیده و در فاز بعدی داده های آموزش دیده را برای تصمیم گیری بکار می گیرد.در حالت آموزش ربات توسط اپراتور کنترل  می شود ، بعبارتی سرعت و جهت حرکت  بصورت مختصات قطبی (θ, V) از طرف  اپراتور به ربات داده میشود از طرفی ربات، هم زمان داده های دریافتی از موانع محیط اطراف را در حافظه نگه میدارد. (سیگنالهای  برگشتی از برخورد به موانع  نزدیک ربات  در 5 نقطه حساس  مطابق شکل- 1- ) . با این کار میتوان گفت ربات عملا داده ها را دریافت و عکس العمل اپراتور را به ثبت می رساند. مثلا داده [0,0.6,0,0,0] از سیگنال های دریافتی سنسورها نشان می – دهد که ربات از گوشه سمت راست جلو به مانعی رسیده که پس خور امواج به سنسور شصت در صد شده است در مقایسه با این داده دریافتی، اپراتور در حالت آموزش(off line)  داده ای مشابه داده زیر را به ربات می دهدکه این کار بصورت دستی نخواهد بود، بلکه بصورت نمونه برداری از سرعت حرکت و زاویه ای است که اپراتور در مواجهه با موانع دیده شده از خود عکس العمل نشان می دهد و در حرکت ربات اعمال مینماید (شکل- 2-) :
[-30, 0.86]

در حالت بعدی که No line  نامیده شده ربات بعنوان ورودی، سیگنالهای دریافتی از سنسورها را (که حاصل پسخور امواج ارسالی از سنسور و دریافت آن پس از برخورد به مانع است) بصورت یک ماتریس با درایه هایی بین صفر تا یک دریافت میکند، که هر درایه در صد پس خور سیگنال از موانع اطراف ربات است. از طرف دیگر داده های موجود درحافظه شبکه آموزش دیده که شامل پسخور سنسورها و بردار سرعت است توسط شبکه عصبی بکار گرفته میشود، تا یک بردار سرعت مناسب برای موقعیت مانع در حالت تست ارائه دهد.با اینکار چون ربات هر لحظه بصورت زنده حرکت بعدی خود را پیش گویی میکند عملا در مقابل موانع متحرک نیز پاسخگو خواهد بود ،.بدون نیاز به تعیین موقعیت آنها.

1-4- شبیه سازی شبکه در نرم افزار مطلب:


clc;
 
net= newff([0 1 ; 0 1 ; 0 1 ; 0 1 ; 0 1 ;-90 90 ;0 1 ],[7 , 19 ,2],{'tansig', 'logsig', 'purelin'});
 
N=input('Enter number of sample training  data to load and train network : N= ');
fid = fopen('Data.txt', 'r');
P = fscanf(fid, '%f %f %f %f %f %f %f', [7 N])  
fclose(fid);
 
 fid = fopen('Target.txt', 'r');
T = fscanf(fid, '%f %f', [2 N]) 
fclose(fid);
 
net = init(net);
net.trainParam.epochs = 2000;
net.trainParam.min_grad = 1e-60;
net = train(net,P,T);
 
 fprintf('\nEnter online samples of data from sensors to Simiulate : \n');
SensorData=input('[Delta<a>; Delta<b>; Delta<c>; Delta<d>; Delta<e>;Delta<teta>; Delta<V>]= ');
  
NetOutput= sim(net,SensorData)
 
fprintf('\nNew Teta =%f     ,  New Velocity=  %f \n' , NetOutput(1) ,NetOutput(2) );
 
 %end

 

2-4- سرعت یادگیری شبکه و مقدار خطای آن :

 3-4- دیتا ی داده شده به این شبکه و جواب حاصل از آن در شبیه سازی:


 Enter online samples of data from sensors to Simiulate :
[Delta<a>; Delta<b>; Delta<c>; Delta<d>; Delta<e>;Delta<teta>; Delta<V>]= [1;0;0;1;1;0;1]
 
NetOutput =
 
   80.0044
    0.1391
 
New Teta =80.004377     ,  New Velocity=  0.139101

 


5 – نتایج:
برتری های انجام گرفته در این روش نسبت به انواع مشابه:
در روشهای مشابه انجام گرفته در دنیا ربات با آموزشهای متعدد عملا محیط آزمایش را  اسکن کرده و محل تعدادی از موانع را با درج مختصات(x ,y)آنهادر حافظه به خاطر می سپارد  با این کار  پس از آموزش در همین محل(فضا) قادر است تا محل سایر موانع ندیده را تاحدودی پیش گویی کند.
آن روش دارای معایبی است که عبارتند از :
1) در صورت تغییر فضای تست پس از آموزش امکان پیشگویی از بین میرود.چرا که ربات برای فضای جدید آموزش ندیده بود.
2) در صورت متحرک بودن موانع در محیط تست پس ازآموزش، ربات با موانع متحرک برخورد خواهد کرد.


اما در روش پیشنهادی ما:
ربات بدلیل فیدبک گیری از فاصله موانع و بردارسرعت حرکت اپراتور درحین آموزش میتواند به دو نقص فوق الذکر پاسخ بگوید:
1) در فضاهای مختلف تست، نسبت به فاصله موانع و بردار سرعت ربات تصمیم لازم را برای بردار حرکت در لحظه بعدی بگیرد.
2) برای حرکت در میان موانع متحرک  نیز پاسخ گو باشد. 
 

مرجع: www.irandoc.ac.ir   

+ نوشته شده در ساعت توسط alireza |

چکیده:
يكي از مشکلات ارسال سیگنال وجود نویز و خطای بین سمبلها واعوجاج مي‌باشد. يكي از كاربردهاي شبكه‌هاي عصبي در پردازش سيگنالها طراحي فيلتر است بطوريكه از آن براي:

 1. حذف خطاي بين سمبلها [1] (ISI).

2 .حذف اثر اعوجاج كانال

3. حذف اثر نويز استفاده مي‌شود.

شبكه با مينيمم كردن كردن سيگنال خطا عملا تلاش مي‌کند تا خطاي سيگنال خروجي به حداقل خود برسد. در این مقاله شبکه عصبی برای حذف اعوجاج طراحی شده است.
 

اعوجاج سیگنال:
سیگنال خروجی(Y(t را بدون اعوجاج مي‌گوییم هر گاه شبیه سیگنال ورودی(X(t باشد. به عبارت دقیقتر اگر(Y(t با(X(t در یک ضریب تناسب ثابت و یک تاخیر زمانی محدود اختلاف داشته باشند در اینصورت انتقال را بدون اعوجاج مي‌گوییم. یعنی برای انتقال بدون اعوجاج:



ثابت K ضریب تضعیف و td تاخیر زمانی است. افت توان در انتقال برابر است. شرایط لازم برای انتقال بدون اعوجاج بیان شده در معادله(1) در صورتی تامین خواهد شد که تابع تبدیل سیستم  برابر با عبارت زیر باشد:


که در آن fX پهنای باند سیگنال باند پایه مي‌باشد. اگر فرض کنیم که فرستنده و گیرنده هیچگونه اعوجاجی را روی سیگنال وارد نمي‌کنند در اینصورت بایستی پاسخ کانال برای انتقال بدون اعوجاج به صورت زیر باشد:


برقراری شرط بیان شده در معادله(3) خیلی دشوار است و در بهترین حالت کانالهای واقعی فقط با تقریب در این شرط صدق مي‌کنند. بنابراین همواره مقداری اعوجاج در انتقال سیگنال اتفاق مي‌افتد. اگر چه با طراحی مناسب مي‌توان آنرا به حداقل رسانید. روش مناسب برای به حداقل رسانیدن اعوجاج سیگنال مشخص کردن انواع مختلف اعوجاجها و تلاش برای حداقل کردن اثرات بد آنها بطور جداگانه مي‌باشد.
1.  اعوجاج دامنه ناشی از
2.  اعوجاج فاز (تاخیر زمانی) ناشی از:
            (m یک عدد بزرگتر از صفر)زاویه
3.  اعوجاج غیر خطی ناشی از وجود عناصر غیر خطی در کانال.
دو نوع اول را اعوجاج خطی و نوع سوم را اعوجاج غیر خطی گویند.
 
اعوجاج خطی:
اگر پاسخ دامنه کانال در فرکانسهایی که طیف ورودی برای آنها مخالف صفر است ثابت(پهن) نباشد، در اینصورت مولفه‌های مختلف طیفی سیگنال ورودی دارای تغییرات مختلفی خواهند بود و در نتیجه اعوجاج دامنه خواهیم داشت. متداولترین فرم اعوجاج دامنه، تضعیف و یا تقویت اضافی در فرکانسهای بالا یا پایین طیف سیگنال است. تجربه نشان داده است که اگر در باند فرکانسی پیام بین ±1 dB تغییر کند، در اینصورت اعوجاج دامنه قابل صرف نظر کردن است. بجز این بیان کیفی و بدون تجزیه و تحلیل کامل نمي‌توان مطلب بیشتری را در مورد اعوجاج دامنه بیان کرد. اگر انتقال فاز اختیاری باشد، مولفه‌های مختلف سیگنال ورودی با اندازه‌های مختلف تاخیر زمانی روبرو بوده و در نتیجه اعوجاج فاز یا تاخیر زمانی خواهیم داشت. تاخیر زمانی مولفه طیفی سیگنال ورودی در فرکانس f برابر است با:



مي‌توان ثابت کرد که زاویه تابع تبدیل خروجی، یعنی خروجی بدون اعوجاج را نتیجه خواهد داد. هر پاسخ فاز دیگری به انضمام انتقال فاز ثابت و اعوجاج را نتیجه مي‌دهد. اعوجاج تاخیر زمانی یک مساله مهم و اساسی در انتقال پالس (داده‌ها) مي‌باشد. اما در کمال تعجب گوش انسان نسبت به اعوجاج تاخیر زمانی حساس نیست در نتیجه در انتقال صدا، اعوجاج تاخیر زمانی بندرت مورد توجه قرار مي‌گیرد.
 
همسانسازی:
روش حذف نظری اعوجاج خطی، همسانسازی[2] است که در شکل(2) نشان داده شده است.

شکل(2) همسانساز کانال    

 

 


  شکل(3)  یک همسانساز با خط تاخیر[3] سه تاخیری (فیلتر عرضی)
 


اگر تابع تبدیل همسانساز در رابطه زیر صدق کند:

در اینصورت داریم و هیچگونه اعوجاجی نخواهیم داشت. اما بندرت مي‌توان همسانسازی طراحی نمود که در معادله(5) دقیقا صدق کند ولی تقریب خوب امکان پذیر است، مخصوصا با استفاده از همسانسازهای با خط تاخیردار و نشان داده شده در شکل(3). خروجی همسانساز نشان داده شده در شکل(3) را مي‌توان به صورت زیر نوشت:

از روی آن مي‌توان تابع تبدیل فیلتر را به صورت عبارت زیر به دست آورد:

با تعمیم یک رابطه فوق برای یک همسانساز با 2M+1 تا تاخیر، داریم:

که دارای فرم سری فوریه نمایی با دوره تناوب 1/∆ است. بنابراین، برای همسانسازی کانال در باند فرکانس پیام fx  مي‌توان سمت راست معادله(6) را با یک سری فوریه (در حوزه فرکانس) با دوره تناوب  تقریب زد. اگر تقریب سری فوریه دارای 2M+1 جمله باشد، در این صورت یک همسانساز با 2M+1تا تاخیر مورد نیاز خواهد بود. ضریب تقویت تاخیرهای همسانساز برابر با ضرایب بسط سری فوریه هستند.
 
حذف خطاي بين سمبلها:
يكي از مشكلات ارتباطات راديويي و موبايل تداخل سمبلها ISI ناشي از انتشار امواج راديويي در چند مسير مي‌باشد وسبب مي‌شود كه گيرنده در تشخيص سمبل دريافتي که اثر، سمبلهاي قبلي هنوز باقي است دچار مشکل شود. به این منظوراز فيلترهاي قابل تنظيم در داخل سيستم به منظور جبرانISI استفاده میشود.
 
همسان ساز عرضي:
واضح است كه فيلترهمسان ساز بايدداراي پاسخ فركانس باشد، بطوريكه وقتي پاسخ فركانس واقعي كانال در آن ضرب شود حاصل برابر با پاسخ فركانس فرضي كانال باشد كه در طراحي مورد استفاده قرار گرفته است. با توجه به اينكه فقط به شكل موج خروجي در چند لحظه نمونه برداري از قبل تعيين شده علاقمند هستيم، طراحي فيلتر همسانساز خيلي ساده‌تر خواهد شد. فيلتر عرضي نشان داده شده در شكل(4) ساده‌ترين همسانساز قابل تنظيم بوده و غالبا از آن براي اين منظور استفاده مي‌شود. همسانساز عرضي از يك خط تاخير با سوئيچ‌هايي(تاخیرهايي) به فاصله ثانيه از يكديگر تشكيل شده است.


شكل(4) همسانساز عرضي


 هر سوئيچ(تاخیر) توسط يك ضريب تقويت متغير به يك تقويت كننده جمع كننده متصل مي‌شود. براي سادگي فرض مي‌شود كه فيلتر شامل (2N+1) تاخیر و با ضرايب تقويتهايW-N,W-N+1,….,W0,W1,….WN  باشد. ورودي همسانساز شكل معلوم(Pr(tو خروجي آن(Peq(t خواهد بود. خروجي(Peq(tرا بر حسب Pr(t)  و ضريب تقويت تاخیرها به صورت زير مي‌توان نوشت:

اگر پيك(Pr(t در نقطه t=0 و ISIدر هر دو طرف آن باشد، در اينصورت خروجي  مي‌بايستي در لحظات tk=(k+N)Ts نمونه برداري شده و


 

اگر(Pr(nTS را با(Pr(n و tk  را با K نشان دهيم، در اينصورت:

در حالت ايده‌آل علاقمند به رابطه ساده زير هستيم:

با توجه به اينكه (2N+1) متغير (2N+1 وزن) در اختيار داريم، شرط بالا همسشه قابل حصول نخواهد بود، اما مي‌توان مقدارPeq(t) را در 2N+1 نقطه به صورت زير مشخص نمود:

با تركيب معادلات (10) و(11) داريم:

 

 معادله(12) بيانگر (2N+1) معادله همزمان است كه ضرايب WN  بدست مي‌آيند. اين همسانساز از اين نظر كه پيك تداخل بين سمبلها را حداقل مي‌کند بهينه است.
 
همسانساز خودكار:
طراحي و تنظيم ضرايب تقويت تاخیرهاي همسانساز  مراحل زير را لازم مي‌دارد:
1.  ارسال يك پالس آزمايشي توسط سيستم
2.  اندازه‌گيري خروجي فيلتر گيرنده(Pr(t در لحظات نمونه برداري
3. تعیین ضرايب تقويت تاخیرها توسط شبکه
در سالهاي اخير براي تنظيم ضرايب تقويت، سيستم‌هاي خودكار با دقت بالا و بسادگي قابل ساخت پيشنهاد شده‌اند. اين شبكه‌ها معمولا به دو گروه تقسيم مي‌شوند: نوع پيش تنظيم كه از يك دنباله پالسهاي مخصوص قبل از ارسال اطلاعات واقعي و يا در فواصل قطع اطلاعات واقعي استفاده مي‌کنند و در اين حين وزنها تنظيم مي‌شود تا خطا حداقل شود  و نوع  وفقي یا تطبیقی كه بطور پيوسته و در هنگام ارسال اطلاعات واقعي و عمل روي اطلاعات، وزنهاي خود را تنظيم مي‌نمايد.
 
همسانساز پيش تنظيم:
 يك همسانساز پيش تنظيم ساده در شكل(5) نشان داده شده است. در اين سيستم، مولفه‌هاي بردار خطا توسط ارسال يك دنباله پالسها با فاصله زياد از يكديگر توسط سيستم و مشاهده خروجي همسانساز يعني در لحظات نمونه برداري اندازه‌گيري مي‌شوند.

 

شكل(5) يك همسانساز پيش تنظيم سه تاخیري

 
 براي تنظيم ضرايب تنظيم تاخیرها، از نمو ثابت∆ استفاده مي‌شود. نمونه مركزي با +1 مقايسه شده و علامت مولفه خطا به دست مي‌آيد. علامت ساير مولفه‌هاي خطا از روي خروجي فيلتر در لحظات به دست مي‌آيند. اگر مقدار پالس همسانسازي شده در پايان تكرار k ام را با نشان دهيم، در اينصورت                                
در پايان پالس آزمايشي kام، دريچه باز شده و با توجه به علامت مولفه‌هاي، به اندازه ∆+ يا ∆- تغيير مي‌کنند. تكرار مرحله تا زمان همگرايي الگوريتم ادامه مي‌یابد. مرحله راه اندازي ممكن است شامل صدها پالس گردد. يكي از مشكلات ايجاد شده کاهش سرعت همگرايي الگوريتم است.
 
همسانساز وفقي:
همسانسازهاي وفقي، بردار خطا بطور پيوسته و در حين ارسال اطلاعات تخمين زده مي‌شود. اين نماها قدرت تطبيق با تغييرات در هنگام ارسال اطلاعات را داشته و نيازي به مرحله طولاني راه اندازي ندارند. همسانسازهاي وفقي در عمل بيشتر به كار رفته، دقيقتر، جامع تر از همسانسازهاي پيش تنظيم مي‌باشند. خروجي همسانساز(Y(t در لحظات نمونه برداري بايستي برابر با ± A  باشد: +A هنگامي كه بيت واقعي ورودي مربوط به لحظه نمونه برداري 1 و–A هنگامي كه بيت ورودي صفر است.
در يك سيستم واقعي به دليل وجود ISI، مقدار(‎Y(jTb متفاوت از مقادير±A خواهد بود. براي يك دنباله داده‌هاي تصادفي، اين تغييرات تصادفي خواهند بود. اگر ISI خيلي بزرگ نباشد، هنوز مي‌توان داده‌ها را آشكار سازي نمود و دنباله اي از سطوح ايده آل و يا دلخواه  Ajو Aj=±A را توليد كرد. از روي دنباله ايده‌آل Aj و مقادير واقعي اندازه‌گيري شده (‎Y(jTb ، غالبا مي‌توان مقدار ضرايب تقويت را تخمين زد زير را بكار برد.

 تخمين زننده بيشترين درست نمايي، jامين مولفه بردار خطا است. عبارت سمت راست معادله (13) عمل همبستگي متفابل را نشان مي‌دهد. m طول دنباله‌هاي بكار برده شده براي تخمين است. ضريب تقويت تاخیر jام مطابق رابطه زير تنظيم مي‌شود:

k  معرف تعداد تكرار در الگوريتم است. براي اينكه همسانساز وفقي بطور موثر كار كند دنباله بيت ورودي و دنباله نمونه‌هاي دريافتي Y(nTb) بايد تصادفي باشند. بعلاوه همسانساز وفقي مشكل تنظيم وقت را براي آغاز همسانسازي  دارا مي‌باشد. هرگاه همسانسازي صحيح حاصل شد، تخمين خطا دقيق بوده و حلقه همسانسازي تغييرات در مشخصات كانال را بسادگي دنبال مي‌کند. براي غلبه بر اين مشكل، غالبا از يك سيستم هايبريد استفاده مي‌شود كه در آن انتقال داده‌ها در يك زمان كوتاه كه سيستم خاموش است به تاخير افتاده و در اين زمان يك دنباله شبه تصادفي ارسال و دوباره در گيرنده توليد مي‌شود. هنگاميكه همسانسازي تا حدودي خوب انجام مي‌پذيرد همسانساز به حالت وفقي منتقل شده و ارسال اطلاعات آغاز مي‌شود.
 
شبکه عصبی:
خط تاخیردار:
برای استفاده کامل از شبکه عصبی به خط تاخیردار نیاز داریم. شکل(6) یک خط تاخیردار را نشان مي‌دهد. سیگنال ورودی از سمت چپ وارد میشود و سیگنالهای تاخیردار از سمت راست خارج مي‌شوند. سیگنال خروجی N بعدی است. همانطوری که گفتیم کار اصلی ما با شبکه آدالاین است. این شبکه از قانون یادگیری LMS استفاده مي‌کند قانون یاد گیری ویدرو-هوف (LMS) شبکه را به سمت تنها نقطه مينیمم مي‌برد مشروط به اینکه نرخ یادگیری آن مناسب اختیار شود.  یک مسیر یا کانال همواره دارای نویز است. مي‌توان کانال را با دیاگرام شکل(6) تخمین زد.

 

 

شکل(6) خط تاخیردار 


                                                
شکل(7) فیلتر خطی


فیلترهای خطی:
فیلترهای خطی در شبکه‌های تطبیقی کاربرد دارند. فرق شبکه‌های خطی با پرسپترون در تابع تبدیل آنها است. شبکه پرسپترون دارای خروجی 0 و1 است ولی خروجی شبکه خطی مي‌تواند هر مقداری را بگیرد. مي‌توان شبکه را برای کمترین خطا با الگوریتم(LMS(Widrow-Hoff ، آموزش داد. از ترکیب خط تاخیردار و شبکه خطی، فیلتر خطی حاصل مي‌شود. شکل(7) یک فیلتر خطی را نشان مي‌دهد. اگر یک خط تاخیردار را همراه شبکه آدالاین آن در نظر بگیریم بلوک دیاگرام شکل(7) را خواهیم داشت. خروجی شبکه برابر است با:

Mean Square Error:
مانند الگوریتم یادگیری پرسپترون، خطای LMS مثالی از یادگیری با ناظر است.  برای ورودیهای P و خروجیهای T یعنی:

که در آن Pi ورودی iام بهمراه Ti یعنی خروجی مربوط به ورودی Piام، خطای مجذور میانگین برابر است با:

الگوریتم LMS  (یا یادگیری ویدروهوف):
الگوریتم LMS یا روش یادگیری ویدروهوف مبتنی بر روش تقریبی از Steepest descent است. در این روش خطای مجذور میانگین از بدست آوردن مجذور خطا از هر تکرار بدست مي‌آید. معادلات این الگوریتم و روند بدست آمدن آنها در زیر آورده شده است. اگر مشتق جزئی مجذور خطا را نسبت به وزنها و بایاسها در kامین تکرار داشته باشیم، داریم: 


و برای

 


این دو رابطه آخری وزنها و بایاس بدست آمده از این الگوریتم هستند.
 
کاربرد شبکه آدالاین در فیلترهای تطبیقی:
اگر چه این شبکه محدودیت نگاشت پذیری دارد (فقط برای مسائلی که بطور خطی از هم متمایز هستند قابل استفاده مي‌باشد)، اما یکی از پر استفاده‌ترین شبکه‌های عصبی است که کاربردهای عملی بسیار زیادی، مخصوصا در پردازش سیگنالهای دیجیتالی دارد. یکی از کاربردهای مهم آن را در پردازش سیگنالها مي‌توان در فیلترهای تطبیقی دید. دستورات برنامه matlab برای حذف نویز دامنه عبارتند از:
با دستور (net = newlind(P,T مي‌توان شبکه خطی طراحی کرد. P ورودی وT هدف است. با دستور(Y = sim(net,P مي‌توان رفتار شبکه را مشاهده کرد. دستورات دیدن وزنها و بایاس بدین ترتیب هستند:

{weights = net.iw{1,1
bias = net.b(1)

قسمتی از برنامه:

X1 = sin(sin(time).*time*10);
P = con2seq(X1);
T1 = con2seq(2*[0 X1(1:(end-1))] + X1);
net1 = newlin([-3 3],1,[0 1],0.1);
[net1,Y1,E1,Pf1]=adapt(net1,P,T1);

نتایج شبیه سازی برنامه هم برای رفع نویز دامنه و تاخیر در شکل(8) مشاهده مي‌شود. شبیه سازی از1 تا 3 ثانیه انجام شده است. فرض شده دامنه ورودی بین 3 و -3 است. شبکه دارای نرخ یادگیری0.1 است. با دستور{W = net.IW{1,1، مي‌توانیم وزنهای شبکه را ببینیم. با دستور{b= net.b{1، مي‌توانیم بایاس شبکه را ببینیم.

 

 

شکل(8) نتایج شبیه سازی


پانوشت‌ها:

[1] Intersymbol Interference
[2] Equalization
[3] Tapped-delay line equalizer 


 

مرجع: www.irandoc.ac.ir   

+ نوشته شده در ساعت توسط alireza |

  چکيده :

در اين نوشتار به معرفي شبکه هاي عصبي مصنوعي[1] و ساختارهاي آنها به صورت خلاصه ميپردازيم. در ابتدا نرونهاي شبکه هاي عصبي طبيعي معرفي شده و طرز کار آنها نشان داده شده است. سپس مدل مصنوعي اين نرونها و ساختار آنها ، مدل رياضي آنها ، شبکه هاي عصبي مصنوعي و نحوه آموزش و بکار گيري اين شبکه ها به همراه روش يادگيري گراديان کاهنده نشان داده شده است. تمرکز بيشتر بر نوعي از اين شبکه ها بنام شبکه هاي عصبي مصنوعي پرسپترون چند لايه ميباشد.  ابزاهايي نيز براي پياده سازي اين شبکه ها نام برده شده است.

كليدواژه‌ها: شبکه هاي عصبي مصنوعي ، شبکه هاي عصبي، Artificial Neural networks Multi layered Perceptron, Gradient descent

 

مقدمه :

در ساليان اخير شاهد حرکتي مستمر از تحقيقات صرفا تئوري به تحقيقات کاربردي بخصوص در زمينه پردازش اطلاعات ، براي مسائلي که براي آنها راه حلي موجود نيست و يا براحتي قابل حل نيستند بوده ايم. با عنايت به اين امر ، علاقه اي فزاينده اي در توسعه تئوريکي سيستمهاي ديناميکي هوشمند مدل آزاد[2] -که مبتني بر داده هاي تجربي ميباشند ايجاد شده است. ANN ها جزء اين دسته از سيستمهاي مکانيکي قرار دارند که با پردازش روي داده هاي تجربي ، دانش يا قانون نهفته در وراي داده  ها را به ساختار شبکه منتقل ميکنند.به همين خاطر به اين سيستمها هوشمند گفته ميشود ، زيرا بر اساس محاسبات روي داده هاي عددي يا مثالها ، قوانين کلي را فرا ميگيرند.اين سيستمها در مدلسازي ساختار نرو-سيناپتيکي[3] مغز بشر ميکوشند.

البته اين سخن که" ANN ها در مدلسازي مغز بشر ميکوشند" اغراق آميز ميباشد.دانشمندان هرچه بيشتر در مورد مغز بشر تحقيق ميکنند و مي آموزند ، بيشتر در مي يابند که مغز بشر دست نيافتني است.در حقيقت در مورد مغز و ساختار سيستم عصبي انسان اطلاعات زيادي بدست آمده است. ولي پياده سازي ساختاري با پيچيدگي مغز انسان بر اساس اطلاعاتي و تکنولوژي که امروزه وجود دارد غير ممکن ميباشد.

ما ميتوانيم يک نرون عصبي انسان و عملکرد آنرا را توسط مدل هاي رياضي ، مدلسازي کنيم.شکل1 ساختار يک نرون طبيعي را نشان ميدهد.

شکل1 - ساختار نرون طبيعي انسان

هر نرون طبيعي از سه قسمت اصلي تشکيل شده است :

1.            بدنه سلول (Soma)

2.            دندريت(Dendrite)

3.            اکسون (Axon)

دندريتها به عنوان مناطق دريافت سيگنالهاي الکتريکي ، شبکه هايي تشکيل يافته از فيبرهاي سلولي هستند که داراي سطح نامنظم و شاخه هاي انشعابي بيشمار ميباشند .دندريتها سيگنالهاي الکتريکي را به هسته سلول منتقل ميکنند. بدنه سلول انرژي لازم را براي فعاليت نرون فراهم کرده و برروي سيگنالهاي دريافتي عمل ميکند ، که با يک عمل ساده جمع و مقايسه با يک سطح آستانه مدل ميگردد. اکسون بر خلاف دندريتها از سطحي هموارتر و تعداد شاخه هاي کمتري برخوردار ميباشد. اکسون طول بيشتري دارد و سيگنالهاي الکتروشيميايي دريافتي از هسته سلول را به نرونهاي ديگر منتقل ميکند.محل تلاقي يک اکسون از يک سلول به دندريتهاي سلولهاي ديگر را سيناپس ميگويند.توسط سيناپسها ارتباطات مابين نرونها برقرار ميشود.به فضاي مابين اکسون و دندريتها فضاي سيناپسي گويند.

در حقيقت دندريتها به عنوان ورودي نرون و اکسون به عنوان خروجي و فضاي سيناپسي محل اتصال  ايندو ميباشد. زمانيکه سيگنال عصبي از اکسون به نرونها و يا عناصر ديگر بدن مثل ماهيچه ها ميرسد ، باعث تحريک آنها ميشود.

نرونها از هريک از اتصالات ورودي خود يک ولتاژ کم دريافت ميکند ( توسط سيگنال عصبي ورودي ) و آنها را با هم جمع ميزند. اگر اين حاصل جمع به يک مقدار آستانه رسيد اصطلاحا نرون آتش ميکند و روي اکسون خود يک ولتاژ خروجي ارسال ميکند که اين ولتاژ به دندريتهايي که به اين اکسون متصلند رسيده و باعث يکسري فعل و انفعالهاي شيميايي در اتصالات سيناپسي ميشود و  ميتواند باعث آتش کردن نرونهاي ديگر شود. تمامي فعاليتهاي مغزي انسان توسط همين اتش کردنها انجام ميشود.

حافظه کوتاه مدت انسان جرقه هاي لحظه اي الکتريکي ميباشند و حافظه بلند مدت به صورت تغييرات الکتروشيميايي در اتصالات سيناپسي ذخيره ميشود که عمدتا منجر به تغيير يونها ميشود.

همانگونه که گفته شد ما ميتوانيم توسط مفاهيم رياضي يک نرون طبيعي را مدل کنيم.شکل 2 يک نرون عصبي مصنوعي را نشان ميدهد.

شکل 2 ساختار يک نرون مصنوعي

سيگنالهاي ورودي  تا معادل سيگنالهاي عصبي ورودي و وزنهاي تا معادل مقادير اتصالات سيناپسي وروديهاي نرون ميباشند که جمعا ورودي نرون را تشکيل داده است.

تابع جمع کننده  تمامي عمليات هسته سلول را انجام ميدهد.در مورد تابع فعال سازي[4] (فشرده سازي[5] ) صحبت خواهد شد.

خروجي نرون توسط تابع زير مشخص ميشود:

به خصوصيات زير در مورد مغز انسان توجه کنيد :

محاسبات کاملا به صورت توزيع شده وموازي انجام ميشود.

"يادگيري" جايگزين برنامه ريزي از قبل ميشود.

در مغز انسان يک ساختار ALU مشخص وجود ندارد. ALU ، حافظه و کنترل همگي در يک ساختار درهم تنيده شبکه اي از تعداد بسيار زيادي نرون توزيع و پخش شده است.

مغز انسان توسط يک پروسه يادگيري مي آموزد که در پاسخ به يک ورودي ، چه خروجي را توليد کرده و ارسال کند. اين فرآيند يادگيري در حقيقت توسط تنظيم اتصالات سيناپسي در نرونهاي طبيعي و معادل آنها در ANN ها ،يعني تنظيم وزنهاي  نرونهاي مصنوعي انجام ميشود. در حقيقت در طراحي يک نرون مصنوعي فقط کافيست وزنهاي  را مشخص کنيم تا شبکه عصبي بتواند خروجي مورد نظر را از ورودي خاص توليد کند. متدهاي مختلف يادگيري وجود دارد که ميتواند بر اساس زوج مرتبهاي <خروجي، ورودي> مقدار وزنها را بدست آورد.

حال بر اساس مطالب گفته شده ميتوان به تعريف ANN ها پرداخت.

تعريف شبکه هاي عصبي مصنوعي

يک ساختار شبکه اي از تعدادي عناصر مرتبط به هم به نام نرون که هر نرون داراي وروديها و خروجيهايي است و يک عمل نسبتا ساده و محلي[6] را انجام ميدهد.شبکه هاي عصبي عموما عملکرد خود را طي يک پروسه يادگيري[7] فرا ميگيرد.

شبکه هاي عصبي کاربردهاي عمده اي در تشخيص الگو ، گروه بندي ، پيش بيني يا برون يابي و ... دارا ميباشد.

تاريخچه

در سال 1949 مدل MP شبکه هاي عصبي مصنوعي توسط مک کالوخ و پيت مطرح شد که يک مدل خطي ساده بود . سپس پرسپترون الگوريتمهاي يادگيري را ارائه نمود. سال 1969 آغاز افول موقت شبکه هاي عصبي شد. زيرا عدم توانايي شبکه هاي عصبي در حل مسائل غير خطي آشکار شد. ANN هاي آن زمان فقط قادر به حل مسائلي بودند که ميتوانستيم پاسخهاي آن مسئله را توسط يک خط در محور مختصات از هم جدا کنيم. در 1982 هاپفيلد با معرفي شبکه هاي چند لايه و الگوريتمهاي يادگيري داراي feedback  ، راه حلي براي حل موارد غير خطي ارائه کرد.در اين زمان بود که شبکه هاي بازگشتي ، خودسازمانده ، Autoregressive ، RBF و روش يادگيري هيبيان مطرح شد.از نيمه دهه نود ، نسل سوم ANN  ها مطرح شدند که عبارت بودند از :

·                    تعيين محدوديتهاي تئوري و عملي شبکه

·                    عموميت و حدود آن

·                    ترکيب ANN و الگوريتمهاي ژنتيکي و منطق فازي

در نهايت امروزه استفاده عملي و پياده سازي تجاري و سخت افزاري ANN ها ممکن شده است .

 

معرفي مدل نرون ساده خطي

بر اساس ايده گرفته شده از نرونهاي طبيعي ، ميتوان مدل نرون مصنوعي را رائه کرد که بتواند وروديها را باهم ترکيب کرده و يک خروجي از آنها به وجود آورد. در ساده ترين حالت نرون وروديهاي وزن دار را با هم جمع ميکند. شکل 3 يک نرون ساده خطي را نشان ميدهد.

(bias)

+

Text Box: …

 

شکل3 : نرون ساده خطي

 

                        

ميتوان شبکه عصبي را به صورت يک سيستم محرک / پاسخ در نظر گرفت. مهم اينست که بدانيم تعليم شبکه يعني تنظيم پارامترهاي آن به نحويکه رفتار محرک / پاسخ طبق خواسته باشد. در حين تعليم در واقع مجهولات ما  وزنها(w) ميباشند. وزنها در غالب حافظه ها عمل ميکنند و نحوه توليد پاسخ را مشخص ميکنند. درصورتيکه وروديهاي و خروجيهاي متناظر موجود باشد ( به اين زوج ورودي و خروجي مجموعه تعليم[8]گفته ميشود )  ، ميتوان وزنها را بر اساس فرمول  بدست آورد.

ميتوانيم براي اينکه خروجي خاصي توليد شود از يک تابع به نام تابع فشرده سازي[9]استفاده کنيم.اين مسئله در شکل4 نشان داده شده است.

تابع فشرده سازی

Squashing

(bias)

+

Text Box: …

شکل 4 : مدل نرون خطي به همراه تابع فشرده سازي

 

تابع فشرده سازي(فعال سازي) رنج وسيعي از مقادير ورودي را به مقدار خاصي نگاشت ميکند.به عنوان مثال ميتوانيم هرمقدار خروجي را   به مقادير باينري 0 و 1 نگاشت کنيم. انواع مختلفي از توابع فشرده سازي در  ANNها استفاده ميشود. ولي بيشترين استفاده را تابع فشرده سازي سيگمويد[10] دارد.

ادعا ميشود که فرکانس آتش نرون طبيعي به صورت تابعي شبيه سيگمويد ميباشد. البته دلايل ديگري براي استفاده از سيگمويد وجود دارد. از جمله :

1.       فشرده سازي ميکند. ( رنج ورودي (-∞,+∞) و خروجي [0,1] ميباشد )

2.       تقريبا خطي ، افزايشي و مشتق پذير است.

3.       در فرم بسته قابل نمايش است.

4.       مشتق گيري از آن ساده است.

 

تکنيکهاي تعيين پارامترهاي نرون خطي

بطور کلي دو روش براي تعيين پارامترهاي نرون خطي يا به عبارت ديگر مشخص کردن مقادير وزنها وجود دارد:

1.       تعيين مستقيم

2.       روالهاي تکرار شونده

1 - تعيين مستقيم

فرض کنيم  که b بردار پاسخهاي دلخواه ميباشد.

بنابر اين :

بدين صورت ميتوان مقادير wرا بدست آورد.

2 – روالهاي تکرار شونده

نام ديگر اين روش "گراديان کاهنده[11]" ميباشد در ادامه به توضيح اين روش مي پردازيم :

قبل از هر چيز بردار گراديان را تعريف ميکنيم:

بردار گراديان در واقع جهت تغييرات ماکزيمم در تابع f را نشان ميدهد.

در روش کاهش گراديان ، ابتدا مقادير تصادفي براي وزنها انتخاب ميشود و بر اساس اين اوزان خروجيهايي از شبکه بدست مي آيد.در يک روال تکرار شونده  محاسبه شده و در جهت آن حرکت خواهد شد.بدين معني که را طوري تغيير ميدهيم که اختلاف خروجي واقعي و خروجي مطوب کمينه شود. حرکت در جهت متناظر با حرکت در جهت کاهش آن با شيب ماکزيمم ميباشد.

خطاي شبکه به ازاء وزنهاي  برابر است با :

در واقع همان تابعي است که بايد کمينه شود.پس :

خطاي خروجي برابر است با اختلاف مابين خورجي شبکه (0) و خروجي مطلوب (t).خطاي يک ورودي برابر است با :

و خطاي کلي برابر است با :

خطاي ميانگين مربع[12] برابر با :

قاعده کلي ،بدست آوردن مشتق خطا نسبت به w ميباشد تا بتوانيم تغييرات خطا نسبت به w را به صفر نزديک کنيم.يعني ما بدنبال پيدا کردن ميباشيم که k مرتبه تکرار اين روال است .به عبارتي ديگر :

در نتيجه تصحيح وزن jام در مرحله kام از تکرار الگوريتم تعليم به صورت زير ميباشد:

که ، مشتق تابع فشرده سازي ( اکتيواسيون) و α، نرخ يادگيري ميباشد که عموما مابين 0 و 1 انتخاب ميشود. بدين صورت ميتوان وزنهاي هر نرون را بدست آورد و روند تعليم شبکه را به اتمام رساند. پس از تعليم ، شبکه آماده توليد خروجي از ورودي متناظر ميباشد.

شبکه هاي پرسپترون[13] چند لايه

شبکه هايي که از يک نرون ساخته شده اند داراي محدوديتهايي ميباشند. اين شبکه ها توانايي پياده سازي توابع غير خطي را ندارند. به عنوان مثال توسط اين شبکه ها نميتوان تابع XOR را پياده سازي نمود. براي حل اين مشکل شبکه هاي ديگري پيشنهاد شد که ما به يکي از آنان که بيشترين استفاده را دارد مي پردازيم. دليل ديگر معرفي اين نوع شبکه ، استفاده از آن در ابن تحقيق مي باشد.

مدل عمومي شبکه هاي پرسپترون ، شبکه جلو رونده[14] با روال تعليم انتشار به عقب[15] است. شبکه هاي جلو رونده شبکه هايي هستند که وروديهاي لايه اول نرونهاي آن به لايه هاي بعدي متصل بوده و در هر سطح اين مسئله صادق بوده تا به لايه خروجي برسد. روال انتشار به عقب بدين معني است که پس از مشخص شدن خروجي شبکه ، ابتدا وزنهاي لايه آخر تصحيح شده و بعد به ترتيب اوزان لايه هاي قبلي تصحيح ميشوند.در اين موارد بيشتر توضيح داده ميشود.

 شبکه هاي پرسپترون از يک لايه ورودي ، تعدادي لايه پنهان و يک لايه خروجي تشکيل شده است.در شکل 5 يک شبکه پرسپترون با يک لايه پنهان نشان داده شده است.

شکل 5 : نمونه اي از يک شبکه پرسپترون

 

در اين شکل لايه X لايه ورودي ، لايه Z لايه پنهان و لايه Y نيز لايه خروجي ميباشد.

در اين شبکه ها  شرايط زير وجود دارد :

1.       نرونهاي هر لايه تنها به نرونهاي لايه بعدي متصل ميباشند.

2.       هر نرون به تمامي نرونهاي لايه بعد متصل است.

3.       نرونهاي لايه ورودي عملي را انجام نميدهند و اوزان آنها ثابت و برابر يک ميباشد. اين نرونها فاقد تابع فشرده سازي ميباشند.

4.       انتشار عملگر رو به جلو است. تمامي نرونها به غير از لايه ورودي جمع کننده بوده و هر نرون ميتواند تابع فشرده سازي مستقلي داشته باشد.

5.       هر نرون ميتواند داراي باياس مستقل باشد.

6.       تعداد لايه هاي پنهان مشخص نميباشد.

 

الگوريتم يادگيري شبکه هاي پرسپترون ( انتشار به عقب )

در اين بخش به نحوه يادگيري شبکه پرسپترون چند لايه که در شکل 5 نشان داده شده است مي پردازيم.

در الگوريتم يادگيري از علائم زير استفاده ميکنم:

x : بردار ورودي که براي يادگيري شبکه از آن استفاده ميشود.

t : بردار خروجيهاي مطلوب

: درصدي از خطا که براي تصحيح وزن استفاده ميشود و براساس خطاي واحد خروجي ميباشد . اين خطا در لايه پنهان قبل از لايه خروجي انتشار به عقب مي يابد.

:  درصدي از خطا که براي تصحيح وزن استفاده ميشودو بر اساس انتشار به عقب اطلاعات خطا از لايه خروجي به واحد پنهان  ميباشد.

α: نرخ يادگيري.

: واحد ورودي iام.

: باياس واحد پنهان jام.

: واحد پنهان jام.

ورودي شبکه به توسط نشان داده ميشود:

سيگنال خروجي  توسط  مشخص ميشود:

: باياس واحد خروجي kام.

: واحد خروجي kام:

ورودي  توسط مشخص ميشود:

سيگنال خروجي  توسط مشخص ميشود :

براي آموزش شبکه توسط انتشار به عقب ، سه مرحله بايد انجام شود : انتشار به جلو الگوهاي يادگيري ورودي ، انتشار به عقب خطاي بدست آمده و تنظيم اوزان.

در حين انتشار به جلو ، هر واحد ورودي  سيگنال ورودي خودرا در هرکدام از واحدهاي پنهان  توزيع ميکند.سپس هرکدام از واحدهاي پنهان اکتيواسيون خودرا محاسبه کرده و سيگنال حاصل را به هرکدام از واحدهاي خروجي ارسال ميکند.در نهايت هرکدام از واحدهاي خروجي  با محاسبه اکتيواسيون خود ،  را به عنوان پاسخ شبکه به الگوي وردي ، ارائه ميکند.

درمرحله يادگيري ،در هرکدام از واحدهاي خروجي ، توليد شده را با  مقايسه کرده تا خطاي مربوطه را پيدا کنيم. بر اساس اين خطا ، فاکتور محاسبه ميشود.از  براي توزيع به عقب خطا در تمامي واحدهاي لايه قبلي استفاده ميشود. همچنين از آن براي بروزرساني اوزان ميان واحدهاي لايه پنهان و لايه خروجي نيز استفاده ميشود. به همين صورت نيز براي تک تک واحدهاي پنهان  محاسبه ميشود. البته انتشار به عقب خطا در لايه ورودي لازم نيست، ولي براي بروزرساني اوزان ميان لايه ورودي و لايه پنهان استفاده خواهدشد.

در نهايت زمانيکه تمامي δ مشخص شدند ، تمامي اوزان به صورت هم زمان تصحيح خواهند شد. تصحيح وزن (از لايه پنهان به لايه خروجي) بر اساس و  خواهد بود و تصحيح وزن ( از لايه ورودي به لايه پنهان) بر اساس  و  ميباشد.

حال بر اساس مطالب گفته شده الگوريتم يادگيري را شرح ميدهيم :

مرحله 0 : مقدار دهي اوليه اوزان بر اساس مقادير تصادفي کوچک

مرحله 1 : تازمانيکه شرط پايان برقرار نيست مراحل 2 تا 9 را تکرار کنيد.( در مورد شرط پايان صحبت خواهد شد)

مرحله 2 : به ازاء هر زوج تعليم ( ورودي و خروجي متناظر در مجموعه تعليم ) مراحل 3 تا 8 را تکرار کنيد :

مرحله 3 : هر واحد ورودي

 ,i=1,…,n

  سيگنال ورودي  را دريافت کرده و آنرا در تمامي واحدهاي لايه بعد از خويش توزيع ميکند.

مرحله 4 : هر واحد پنهان

 , j=1,…,p

حاصل جمع سيگنالهاي ورودي وزن دار خويش را محاسبه ميکند :

سپس تابع فشرده سازي مربوطه را بر حاصل اعمال ميکند :

و سيگنال حاصل را به تمامي واحدهاي لايه بعدي ارسال ميکند.

مرحله 5 : هر واحد خروجي

, k=1,…,m

حاصل جمع سيگنالهاي ورودي وزن دار خويش را بدست مي آورد:

و تابع فشرده سازي مربوط به خود را براي محاسبه خروجي به حاصل اعمال ميکند:

انتشار به عقب خطا :

مرحله 6 : هر واحد خروجي

, k=1,…,m

را بر اساس خروجي مطلوب و خروجي بدست آمده محاسبه ميکند :

و مقداري را که بعدا براي تصحيح وزن و باياس  نياز است ، بدست مي آورد :

و را به واحدهاي لايه قبل از خود ارسال ميکند.

مرحله 7 : هر کدام از واحدهاي پنهان

 , j=1,…,p

حاصل جمع دلتاي ورودي خود را که از واحدهاي لايه بعد از خود به آن رسيده است ، محاسبه ميکند:

و حاصل را در مشتق تابع فشرده سازي ضرب کرده تا ترم اطلاعات خطاي  بدست آيد:

سپس مقداري را که بعدا براي تصحيح وزن و باياس  نياز است ، بدست مي آورد :

تصحيح اوزان و باياسها :

مرحله 8 : هر کدام از واحدهاي خروجي وزنها ( j=0,…,p ) و باياس خودرا به صورت زير تصحيح ميکنند :

هر کدام از لايه هاي پنهان نيز وزنها ( i=0,…,n ) و باياس مربوطه را به صورت زير تصحيح ميکند :

مرحله 9 : شرط پايان برقرار است. پايان الگوريتم يادگيري.

البته در زمان پياده سازي بايد آرايه هاي مجزايي براي دلتاهاي واحدهاي خروجي ( مرحله 6 ،  ) و واحدهاي پنهان ( مرحله 7 ، ) تشکيل شود.

يک دوره[16] ، چرخه اي کامل حول مجموعه يادگيري است.تعداد زيادي چرخه براي آموزش يک شبکه عصبي انتشار به عقب لازم است. معمولا چرخه آموزش را تا زماني که ميانگين کل خطا به يک مقدار حداقل مطلوب يا صفر برسد ادامه مي دهند (شرط پايان) . در برخي مواقع مقدار خطاي ميانگين در طي چند دوره تغييري نميکند . در اين صورت نيز يادگيري شبکه عصبي پايان مي يابد.

عموما مقدار دهي اوليه اوزان و باياسها به صورت تصادفي با مقادير کوچک انجام ميشود. ثابت شده است که انتخاب هر مقدار اوليه براي وزنها و باياسها به سمت مقدار صحيح آنها همگرا است. بدين معني که هر مقداري براي آنها انتخاب کنيم ، پارامترهاي شبکه تنظيم خواهند شد. تنها تفاوتي که وجود دارد ، در صورت فاصله زياد مقادير اوليه وزنها و باياسها با مقادير صحيح آنها ،  براي رسيدن به مقادير مطلوب تعداد دوره ها زياد خواهد بود  . Nguyen-Widrow[1990] روشي را براي مقدار دهي اوليه اوزان و باياسها پيشنهاد داده اند که باعث ميشود وزنها با فاصله کمي نسبت به مقدار صحيح آنها انتخاب شوند . توضيح اين روش در حوصله اين مقوله نيست و علاقه مندان ميتوانند با مراجه به منابع شبکه هاي عصبي مصنوعي اين روش را بياموزند.

در زمينه تعيين تعداد الگوهاي يادگيري لازم براي تعليم شبکه روشي وجود دارد. اگر P تعداد الگوهاي يادگيري ، W تعداد وزنهاي شبکه و حداکثر خطاي مجاز شبکه e باشد ، بدين منظور که شبکه به صورت صحيح عمل کند و بتواند عمل دسته بندي را با دقت 1-e انجام دهد ، بايد رابطه زير برقرار باشد :

به عنوان مثال در صورتيکه e=0.1 و W=80 باشد ، ما به 800 (P=800) الگوي يادگيري نيازمنديم تا مطمئن شويم که شبکه عصبي مصنوعي طراحي شده در 90% مواقع به صورت صحيح عمل ميکند. اثبات اين مسئله توسط Baum و Haussler در سال 1989 انجام شد.

در شبکه هاي پرسپترون چند لايه ، تعداد لايه هاي پنهان ميتواند هر تعداد باشد. البته در بيشتر کاربردها يک لايه پنهان کفايت ميکند . در برخي مواقع نيز دولايه پنهان يادگيري شبکه را ساده تر ميکند. در حالتي که تعداد لايه هاي پنهان بيش از يک لايه باشد ، بايد الگوريتم ذکر شده در بالا را براي تمامي لايه ها تعميم داد.

روشي عملي براي تخمين  تعداد واحدها (نرونها ) در هر لايه پنهان در دست نيست. بدين منظور بايد از روشهاي سعي و خطا استفاده کرد تا به مقدار ميانگين خطاي کل مطلوب رسيد.

براي مدلسازي  شبکه هاي عصبي مصنوعي ابزاهاي زيادي وجود دارد . از اين جمله:

·         SNN (Stuttgart Neural Network Simulator)

·         Matlab standard NN Toolbox

·         Netlab toolbox for Matlab

به عنوان نمونه ميتوانيد از Netlab که يک تول باکس مجاني براي نرم افزار Matlab  ميباشد استفاده کنيد. براي استفاده از آن ميتوانيد به آدرس زير رجوع کنيد:

http://www.ncrg.aston.ac.uk/netlab/index.php

 


پانوشتها

[1] Artificial Neural Network

[2] Model Free

[3] Neuro-synaptic

[4] Activation function

[5] Squashing

[6] Local

[7] Training

[8] Training set

[9] Squashing

[10] Sigmoid

[11] Gradient descent

[12] Mean Square Error(MSE)

[13] Perseptron

[14] Feed forward

[15] Back propagation training

[16] Epoch

مرجع: www.irandoc.ac.ir   

+ نوشته شده در ساعت توسط alireza |

 

چكيده:

سيستم تشخیص گفتار نوعی فناوری است که به یک رايانه این امکان را می دهد که گفتار و کلمات گوینده را بازشناسی و خروجي آنرا به قالب مورد نظر، مانند "متن"، ارائه كند. در این مقاله پس از معرفی و ذكر تاريخچه‌اي ازفناوري سیستم ها تشخيص گفتار، دو نوع تقسیم بندی از سيستمها ارائه می شود، و سپس به برخی ضعف ها و نهایتاً کاربرد این فناوری اشاره می شود.

كليد واژه ها: سيستمهاي تشخیص گفتار، فناوري اطلاعات، بازشناسي گفتار


1. مقدمه
گفتار برای بشر طبیعی ترین و کارآمدترین ابزار مبادله اطلاعات است. کنترل محیط و ارتباط با ماشین بوسیله گفتار از آرزوهای او بوده است.طراحی و تولید سیستم های تشخیص گفتار هدف تحقیقاتی مراکز بسیاری در نیم قرن اخیر بوده است.یکی از اهداف انسانها در تولید چنین سیستم هایی مسلماً توجه به این نکته بوده است که "ورود اطلاعات به صورت صوتی ،اجرای دستورات علاوه بر صرفه جویی در وقت و هزینه ،به طرق مختلف کیفیت زندگی ما را افزایش می دهند.امروزه دامنه ای از نرم افزارها (که تحت عنوانSpeech Recognition Systems معرفی می شوند) وجود دارند که این امکان را برای ما فراهم کرده اند.با استفاده از این تکنولوژی می توانیم امیدوار باشیم که چالش های ارتباطی خود را با محیط پیرامون به حداقل برسانیم.
2.تعریف
قبل از پرداختن به به سیستم های تشخیص گفتار لازم است که فناوری تولید گفتار و تشخیص گفتار با تعریفی ساده از هم متمایز شوند:
 ● فناوری تولید گفتار(Text To Speech):تبدیل اطلاعاتی مثل متن یا سایر کدهای رایانه ای به گفتاراست.مثل ماشین های متن خوان برای نابینایان،سیستم های پیغام رسانی عمومی. سیستم های تولید گفتار به خاطر سادگی ساختارشان زودتر ابداع شدند. این نوع از فناوری پردازش گفتار موضوع مورد بحث در این مقاله نیستند.
 
 ● فناوری تشخیص گفتار(Speech Recognition System ): نوعی فناوری است که به یک کامپیوتراین امکان را می دهد که گفتارو کلمات گوینده ای را که از طریق میکروفن یا پشت گوشی تلفن صحبت می کند،بازشناسی نماید. به عبارت دیگر در این فناوری هدف خلق ماشینی است که گفتار را به عنوان ورودی دریافت کند و آنرا به اطلاعات مورد نیاز (مثل متن)تبدیل کند.


3.تاریخچه فناوری تشخیص گفتار
اولین سیستم های مبتنی بر فناوری تشخیص گفتار در سال 1952  در"آزمایشگاههای بل"طراحی شد.این سیستم به شیوه گفتار گسسته و به صورت وابسته به گوینده و با تعداد لغت محدود 10 لغت عمل می کرد.در اوایل دهه 80 میلادی برای اولین بار الگوریتم مدلهای مخفی مارکوف "Hidden Markov Model" ارائه شد.این الگوریتم گامی مهم در طراحی سیستم های مبتنی بر گفتار پیوسته به حساب می آمد.همچنین در طراحی این سیستم از مدل شبکه عصبی و نهایتاً ازهوش مصنوعی نیز استفاده می شود.در ابتدا شرکتهای تجاری این فناوری را برای کاربردهای خاصی طراحی کردند.به عنوان مثال شرکت Kurzweil در زمینه پزشکی و مخصوصاً برای کمک به معلولان و نابینایان و شرکت Dragon در زمینه خودکارسازی سیستمهای اداری محصولات اولیه وارد بازارکردند. توانجویان در واقع اولین گروهی بودند که از این دسته محصولات به عنوان یک فناوری انطباقی و یاریگر،عمدتاً برای دو عملکرد کنترل محیط و واژه پردازی استفاده کردند.
جیمز بیکر James K.Baker یکی از محققان شرکت IBM که در اواخر دهه 1970 در مورد این فناوری مقالات زیادی نوشت، یکی از پیشگامان این طرح بود.او و همکارانش یک شرکت خصوصی به نام Dragon Systems تاسیس کردند.این شرکت ابتدا در دهه 1990 نرم افزاری به نام Dragon Dictate تولید کرد که یک سیستم مبتنی بر گفتار گسسته بود.در سال 1997 این شرکت محصولی را تولید کرد که به جای استفاده از گفتارگسسته ،مبتنی بر گفتار پیوسته بود.در واقع این شرکت با ارائه نرم افزار Dragon Naturally Speaking (DNS) اولین سیستم تشخیص گفتار پیوسته را ارائه نمود.این سیستم توانایی تشخیص گفتار با سرعت 160 کلمه در دقیقه را داشت.همچنین شرکت تجاری IBM هم در این زمینه برای سالهای متمادی فعالیت می کرد که با طراحی بسته نرم افزاری Via Voice به ارائه سیستم های تشخیص گفتار پرداخت که در حال حاضر Scansoft محصولات IBM Via Voice  راتوزیع و پشتیبانی می کند.شرکت مایکروسافت نیز فعالیتهایی درجهت تولید و کاربرد این فناوری داشته است،و بیل گیتس Bill Gates در کتابها و سخنرانی هایش به کرات در مورد آینده درخشان استفاده از سیستم های تشخیص گفتار تاکید کرده است. البته عملاً تا قبل از ارائه نرم افزار office XP وword 2002 این تکنولوژی در محصولات این شرکت بکاربرده نشد.گرچه در ابتدا عمده موارد استفاده این تکنولوژی ،برای افراد توانجو پیش بینی شده بود اما بعدها پذیرش استفاده از آن گسترده تر شد و گروههای بسیاری در مدارس و دانشگاهها علاقه مند به استفاده ازاین فناوری شدند. بطوریکه Seton Hall University نیز برای تشویق دانشجویان به آشنایی با این سیستم به دانجشویان جدید الورود نرم افزار IBM Via Voice را اهدا می کرد.


4.عملکرد سیستم های تشخیص گفتار
سیستم های تشخیص گفتار به هر منظور که بکار برده شوند، عملکرد نسبتاً مشابهی دارند که عبارت است از:تبدیل گفتاربه داده و تحلیل آن توسط مدلهای آماری.


 

شکل 1

 


1.4 تبدیل گفتاربه داده
برای تبدیل گفتار به یک متن روی صفحه یا یک فرمان کامپیوتری، یک سیستم باید راه دشواری را طی کند.وقتی که گوینده صحبت می کند،لرزشهایی در هوا ایجاد می شود،سیستم تشخیص گفتار ابتدا امواج صوتی آنالوگ را دریافت می کند،مبدل آنالوگ به دیجیتال Analog-to-digital converter (ADC) این امواج آنالوگ را به داده های دیجیتالی تبدیل می کند. سپس سیگنال به سگمنت های کوچکی که به اندازه چند صدم ثانیه یا در مورد صداهای Plosive Consonant چند هزارم یک ثانیه هستند،تقسیم می شود. در مرحله بعد برنامه این سگمنت ها را به phoneme های شناخته شده در زبان تبدیل می کند.Phoneme ،کوچکترین عنصریک زبان است (ارائه ای از صداهایی که ما می سازیم و برای شکل دادن واژه های معنی دار آنها را در کنار هم قرار می دهیم).گام بعدی ساده به نظر می رسد اما در واقع انجام آن بسیار دشوار است .برنامه Phoneme های موجود را با سایر Phoneme هایی که درکنار آن قرار دارد،امتحان می کند و Phonemeهای هم بافت را از طریق یک مدل آماری بسیار پیچیده نقطه (plot) می کندو آنها را با مجموعه بزرگی متشکل از واژه های شناخته شده،عبارات و جملات مقایسه می کند.برنامه سپس چیزی را که کاربر احتمالاً گفته است مشخص می کند و آن را به عنوان متن یا شکل یک فرمان کامپیوتری یا صوت بیرون می دهد.


2.4 تشخیص گفتار با استفاده از مدل(الگوریتم)آماری
سیستم های تشخیص گفتار اولیه سعی داشتند مجوعه ای از قوانین گرامری و دستوری را با گفتار ورودی منطبق کنند. به این صورت که اگر کلمه های گفته شده در داخل مجموعه ای از قواعد و قوانین جای می گرفتند و با آن سازگار می شدند،برنامه می توانست کلمه را تشخیص دهد. تنوع لهجه ها ونوع گفتار افراد مختلف در این حالت از تشخیص می توانست تاثیر منفی بر روی دقت این سیستم ها بگذارد. به عنون مثال تلفظ کلمه barn توسط فردی از بوستون و لندن متفاوت است در حالی که هر دو یک لغت را بکار برده اند.سیستم ها مبتنی بر قواعد و قوانین دستوری به این دلیل موفق نبودند که نمی توانستند گفتار ممتد را با حداقل میزان اشتباه تشخیص دهند.
سیستم های تشخیص گفتار امروزی از سیستم های مدل آماری بسیار قدرتمند و پیچیده ای استفاده می کنند.این سیستم ها از قواعد احتمالات وریای برای تشخیص نتیجه استفاده می کنند. دو مدل مسلط امروز در این حوزه مدل مخفی مارکوف "Hidden Markov Model" و مدل شبکه عصبی"Neural Netwok Model" هستند.این روشها اساساً برای مشخص کردن اطلاعات پنهان از سیستم،از اطلاعاتی که برای سیستم شناخته شده هستند استفاده می کنند. مدل Hidden Markov رایج ترین مدل است.در این مدل هرPhoneme مثل یک پیوند در یک زنجیره است و هنگامی این زنجیره تکمیل می شود،یک کلمه بوجود می آید.در طی این فرایند، برنامه یک score احتمالات را بر اساس دیکشنری توکار و آموزش کاربر به هر Phoneme اختصاص می دهد. این فرایند برای عبارات و جملات،حتی از این هم پیچیده تر است. (سیستم مجبور است مشخص کند که هر کلمه کجا شروع می شود و کجا به اتمام می رسد). گاهی برنامه ناچار است عباراتی را که شنیده است را با عبارت یا عبارت های قبل ار آن که در بافت جمله هستند مقایسه کند،آنرا تجزیه و تحلیل کند تا بتواند آنرا به درستی تشخیص دهد.بنابراین اگر یک برنامه دارای 60000 کلمه باشد ترتیبی از سه کلمه می تواند هر یک از 216 تریلیون احتمال ممکن باشد.بدیهی است که حتی قدرتمندترین سیستم هم نمی تواند بدون کمک،تمام این احتمالات را جستجو کند. این کمک به شکل"آموزش"برنامه ارائه می شود.با وجود اینکه توسعه دهندگان و طراحان نرم افزار که دستگاه واژگانی اصل سیستم را تنظیم می کنند،بخش اعظمی از این آموزش را انجام می دهند اما کاربر نهایی نیز باید زمان زیادی را صرف این آموزش کند.
 
5.سیستم های تشخیص گفتار:تقسیم بندی بر اساس عملکرد
فناوری تشخیص گفتار بر اساس سه معیارقابل بررسی و طبقه بندی است:
الف.تعدادگویندگان
ب.شیوه صحبت کردن
ج.اندازه بانک واژگان
که در ادامه به توضیح هر یک پرداخته می شود.


1.5 تعداد گویندگان
همانطور که قبلاً نیز اشاره شد،درونداد اطلاعات در این سیستم به صورت صوتی-گفتار انسان- است.بسته به اینکه سیستم برای استفاده تعداد محدودی گوینده طراحی شده باشد یا نه ،این سسیستم به دو دسته"وابسته به گوینده" و "مستقل از گوینده" تقسیم می شوند.
در سیستم های وابسته به گوینده،سیستم هر صدایی را تشخیص نمی دهد بلکه فقط صداهایی که قبلاً آنها را آموزش دیده است را تشخیص می دهد.بدین صورت که شخص با ایجاد یک پروفایل صوتی از صدای خود،صدای خود را به سیستم آموزش می دهد و سیستم نیز با مراجعه به این پروفایل بار دیگر آن را تشخیص می دهد.این سیستم ها دقیق ترند. اما سیستم های مستقل از گوینده طوری طراحی می شوند که سیستم قادر باشد هر نوع صدایی را تشخیص دهد.


2.5 شیوه صحبت کردن
نحوه صحبت کردن گوینده می تواند به دو صورت "گفتار گسسته" و یا "گفتار پیوسته" باشد. در سیستم های مبتنی بر گفتار گسسته گوینده کلمات را جدا جدا و با مکث حداقل 200 میلی ثانیه بین آنها ادا می کند تا سیستم کلمات را بصورت مجزا تشخیص دهد. در این نوع از سیستم بانک واژگان شامل کلماتی است که برای سیستم از قبل تعریف شده است. وقتی که سیستم مبتنی بر گفتار پیوسته باشد،مرز کلمات گوینده واضح نیست که در این صورت برای انطباق گفتار با بانک واژگان، بانک واژگان از "واجهای" زبان تعریف شده تشکیل شده است.


3.5 اندازه بانک واژگان
اندازه بانک واژگان ، از نظر واژگان ذخیره شده در سیستم " محدود" ویا "بزرگ" است. که بین نوع سیستم از نظر وابستگی به گوینده و اندازه بانک واژگان رابطه معکوس وجود دارد.در سیستم های وابسته به گوینده اندازه بانک واژگان بزرگ و تعداد کاربر کم است. این نوع سیستم ها که معمولا در محیط های تجاری بکار گرفته می شوند و تعداد کمی کاربر با این برنامه کار می کنند به بهترین نحو ممکن جوابگو هستند. در حالی که این سیستم ها با سطح دقتی مناسب کار می کنند و دارای هزاران کلمه هستند باید طوری تنظیم شوند که با تعداد کوچکی از کاربران اصلی کار کنند و میزان دقت این سیستم ها تا حد بسیار زیادی به کاربر بستگی دارد. در سیستم هایی که مستقل از گوینده عمل می کنند،تعداد کاربران زیاد است اما تعداد واژاگان اندک است. در این سیستم ها کاربران می توانند با لهجه ها و الگوهای گوناگون تلفظ صحبت کنند هرچند،استفاده از این سیستم ها محدود به تعداد اندکی از فرامین و ورودی های از پیش تعریف شده نظیر گزینه های ابتدایی و اعداد است.
 
6.سیستم های تشخیص گفتار:تقسیم بندی بر اساس برونداد
سیستم های تشخیص گفتار همگی در یک ویژگی مشترک هستند و آن "لزوم درونداد به صورت صوتی" در این گونه سیستم هاست.این سیستم ها را بر اساس بروندادی که ارائه می کنند می توانیم به سه دسته تقسیم بندی کنیم:
الف.سیستم های گفتار به متنSpeech To Text  
ب. سیستم های گفتار به گفتارSpeech To Speech
ج.سیستم های گفتار به فرامین Speech To Command
که در ادامه هریک به طور مختصر معرفی می شوند.


1.6 گفتار به متن Speech To Text
این دسته از سیستم ها توانایی تبدیل گفتار به متن یا تشخیص خودکار گفتار را دارند.از این تکنولوژی برای "دیکته کردن و ایجاد مدرک" استفاده می شود.از آنجایی که تایپ کامپیوتری از کارهای متداول و وقت گیربرای کاربرهای عادی و پیشرفته می باشد بنابراین اولین موارد استفاده از این تکنولوژی ،تایپ کامپیوتری بوده است که باعث افزایش سهولت و سرعت تایپ می شده است مثل کاربرد این سیستم برای روزنامه نگاران و حقوقدانان. این امر به ویژه زمانی که افراد ملزم به تایپ مکرر هستند اهمیت پیدا می کند زیرا بیماری Carpal Tunnel Syndrome  (سندرم کانال مچی) که یکی از انواع آسیب های ناشی از تکرار می باشد در اثر استفاده تکرار شونده از کیبورد برای تایپ پدید می آید. با استفاده از سیستم های تشخیص صدا و تایپ با کیبورد به طور همزمان می توان از بروز اینگونه آسیب ها جلوگیری کرد.همچنین افراد توانجو یا کسانی که به هر نحو قادر به تایپ کردن نمی باشند، می توانند خود را با یان سیستم ها تطبیق دهند و از آنها بطور موثری استفاده کنند(به عنوان مثال افرادی که قادر به استفاده از دستان خود نیستند،یا از لحاظ بینایی دچار مشکل هستند). حتی گزارش شده است که استفاده از یک نرم افزار تشخیص صدا به یک مرد مبتلا به بیماری "زبان پریشی" کمک کرده است که بتواند عقایدش را در قالب زبان نوشتاری بیان کند و با اطرافیان خود ارتباط برقرار کند.برخی نرم افزارها در زیر برای آشنایی معرفی می شوند:

 


شکل 2


IBM Via Voice (IBM Voice Dictation for Linux)

●  تنها نرم افزاری است که سیستم عامل لینوکس را پشتیبانی می کند


 Myers Hidden Markov Model Software

●  نرم افزاری است که توسط ریچارد می یر با الگوی HMM نوشته و طراحی شده است و برای کاربران حرفه ای کاربرد دارد.
     فناوری استفاده شده در ویندوز ویستا
    فناوری استفاده شده در ویندوز XP
●  که در قالب برنامه های word xp و word 2002 به بعد، ارائه شده است.
 
نرم افزار دیکته خودکار فارسی/انگلیسی نویسا
●  یک نرم افزار تشخیص گفتار به دو زبان فارسی و انگلیسی بدون وابستگی به گوینده است که توسط گروه SPl (Speech processing Lab) در دانشگاه صنعتی شریف طراحی و تولید شده است. کاربرمی تواند از این نرم افزار در هر ویرایشگری در محیط ویندوز استفاده کند.


2.6 گفتار به گفتار Speech To Speech
سیستم های گفتار به گفتار شامل استفاده از فناوری تشخیص گفتارعمدتاً در تولید نرم افزارهای ترجمه گفتار به گفتار می باشد.شرکت Via یک تولید کننده کامپیوترهای پوشیدنی است. این شرکت یک مترجم زبانی را توسعه داده است که در اختیار انگلیسی زبانان قرار گرفته است که البته این محصول در تعداد انبوه وارد بازارنشده است.نام این ابزار که نوعی سخت افزار است ،"ابزار مترجم جهانی Via II" می باشد ،وسیله ای است به اندازه یک گوشی تلفن با عملکرد PC که به کمر کاربر متصل می شود یا در جیب لباس وی قرار می گیرد.Via II با یک نرم افزار تشخیص صدا سازگار است و با داشتن در گاه USB حتی امکان اتصال به ادوات جانبی را هم دارا است.این ابزار با قدرت شناسایی مجموعه گسترده ای از زبانها نظیر کره ای،صربستانی،عربی،تایلندی،چینی،و... ارائه می شود .این سیستم برای کاربران انگلیسی زبان طراحی شده است که قادر است صدای کاربر را شناسایی کندو به زبان مقصد ترجمه کندو از طریق بلندگو پخش کند و همچنین در مدت زمان کوتاهی قادر است که پاسخ فرد مخاطب را به انگلیسی ترجمه کند که به این ترتیب یک ترجمه دو طرفه انجام می شود.

 

شکل 3

 

 

 آژانس پروژه های تحقیقاتی پیشرفته دفاعی دارای سه تیم از محققانی است که بر روی Global Autonomous Language Exploitation یا (GALE) که برنامه ای که اطلاعات روزنامه ها و اخبار پخش شده در زبانهای خارجی را ترجمه می کند،کار می کنند. این پروژه امیدوار است که بتواند نرم افزاری ایجاد کند که بتواند دو زبان را با حداقل 90 درصد دقت به یکدیگر ترجمه کند.این آژانس همچنین بر روی یک پروژه تحقیقی و توسعه به نام TRANSTAC سرمایه گذاری کرده است که سربازان ایالات متحده امریکا را قادر می کند به شکل موثرتری با جمعیت غیر نظامی کشورهای غیر انگلیسی زبان به تعامل بپردازند.
موارد بالا نمونه هایی از تلاش محققان جهان برای توسعه این فناوری بودند.در ایران و برای کاربران فارسی زبان نیر "نرم افزار پارسیا" طراحی و تولید شده است که یک نرم افزار ترجمه صوتی(گفتار به گفتار) زبان فارسی است و عبارات رایج و مکالمات روزمره فارسی را به زبانهای مقصد (انگلیسی و عربی) ترجمه می کند. این نرم افزار توسط گروه SPL دانشگاه صنعتی شریف طراحی و تولید شده است.
 
3.6 گفتار به دستور  Speech To Command
از این نوع فناوری برای کنترل برنامه ها (computer control) استفاده می شود. با استفاده از این فناوری کاربر می تواند با ادا کردن دستورات آنها را انجام دهد. تقریباً اولین گروهی که روی به استفاده از این فناوری آوردند خلبانان بودند. خلبانان در اتاقک پرواز با استفاده از این سیستم ها علاوه کمک به کنترل امور پرواز بدون نیاز به دست، استرس ناشی از پرواز را کاهش می دادند. همچنین استفاده از این فناوری درحوزه های مشابه مانند فضا نوردی وهوانوردی نیزآزمایش شده است. علاوه بر این توانجویان به طور وسیع این فناوری را به عنوان ابزاری برای کنترل محیط و انطباق بیشتر با آن بکار بردند. به عنوان مثال توانجویان حرکتی قادر خواهند بود با کمک این فناوری دستورات حرکتی به صندلی چرخدار خود بدهند.یا حتی -در ایده ال ترین وضعیت- به کمک کار گذاشتن تراشه های هوشمند و سازگار با فناوری تشخیص صدا در عضو مصنوعی به دست و پای مصنوعی خود فرمانهای حرکتی متنوع صادرکنند.

 

شکل 4

 
با استفاده از این فناوری کاربر می تواند با گفتن جملات دستوری مانند" فایل را باز کن" یا "صفحه راببند" برنامه های مختلف کامپیوتری رانیزکنترل کند. از این فناوری به همراه قابلیت Speech To Text در برخی سیستم های عامل استفاده شده است. برخی از نرم افزارها در زیر آورده شده اند:


 C Voice Control (Consol Voice Control)

در سیستم عامل لینوکس استفاده می شود و امکان اجرای دستورات را بوسیله فرامین صوتی فراهم می کند.

Game Commander

برنامه ای است مستقل از گوینده و بدون نیاز به آموزش که با ایجاد فرمانهای صوتی برخی بازی های مشهور ویندوز را کنترل می کند.
 
7.کاربرد فناوری تشخیص گفتار در کتابخانه
سیستم های تشخیص گفتار آنچنان که در حوزه های دیگر مثل پزشکی و انجمن های  حقوقی مورد استفاده قرار گرفتند در کتابخانه ها بکار گرفته نشده اند و کتابخانه ها بیشتر موضعی منفعلانه نسبت به بکارگیری این فناوری از خود نشان داده اند.اما با توجه به ماهیت خدمات کتابخانه ای و همچنین تنوع کاربرانی که تمایل به استفاده ازکتابخانه دارند مطمئناً وجود چنین فناوری کمک فراوانی به کتابداران در تسریع و بهبود خدمات کتابخانه ای می کند.به عنوان مثال در کارهای خدماتی –فعالیت هایی که کتابدار به یک ابزار ارتباطی غیر از چشم ها و دست ها نیاز دارد- مثل رف خوانی و فهرست نویسی پیوسته، ویا در فعالیتهای مربوط به سرویسهای کتابخانه ای مثل بازیابی اطلاعات و کنترل فرایند امانت، و نهایتاً در ایجاد امکان دسترسی به پایگاههای اطلاعاتی از راه دور می تواند کاربرد موثری داشته باشد. همچنین با استفاده از اینگونه سیستم ها می توان به نمایه سازی چند رسانه ای ها (مانند فیلم و ویدئو ) پرداخت که دراین حالت کلمات کلیدی در قالب گفتار وارد می شوند و به صورت گفتارنیز بازیابی می شوند. از سوی دیگر با ورود این فناوری به کتابخانه ها و فعالیتهای آن می توان انتظار داشت که کاربران کتابخانه بطور چشمگیری افزایش یابند،چرا که همیشه کاربرانی هستند که نمی توانند با سیستم معمول کتابخانه کار کنند و از منابع اطلاعاتی آن استفاده کنند.این گروه کاربران می توانند کم سوادان ویا طیف وسیعی از توانجویان باشند که در صورت بکارگیری این فناوری آنها نیز با امکان دسترسی به منابع جزو کاربران همیشگی کتابخانه ها می شوند.
 
8.سیستم های تشخیص گفتار:ضعف ها و محدودیت ها
هیچ برنامه تشخیص گفتاری که بتواند صد در صد درست عمل کند وجود ندارد،چندین عامل وجود دارند که می توانند میزان دقت این برنامه ها را کاهش دهند ویا استفاده از آنها را محدود کنند:
 
1.8 ورود سرو صدای محیط(Noise)
 برنامه باید واژه هایی که ادا می شوند به طور واضح بشنود. هرنوع صدای اضافی همزمان با صدای گوینده وارد شود می تواند با واجهای صوتی اشتباه گرفته شود و در این فرایند تداخل ایجاد کند.منبع ایجاد نویز می تواند بسیار گوناگون باشد.مثل نویز موجود در صدای پس زمینه دریک محیط اداری و شلوغ که برای حذف آنها درهنگام استفاده کاربران باید در یک مکان نسبتاً آرام مستقر شوند و از میکروفن با کیفیت (مثل میکروفونهای noise-canseling) استفاده کنند و یا در هنگام صحبت میکروفن را در نزدیکی دهان خود قرار دهند.
گاهی نیز کارت های صوتی کیفیت پایین باعث کم شدن دقت سیستم می شوند این کارت ها اغلب فاقد لایه محافظ در برابر سیگنال الکتریکی ایجاد شده توسط سایر اجزای کامپیوتر هستند و می توانند صدای hum یا hiss را به سیگنال (صوتی) وارد کنند.
امروزه با بکار گیری" نرم افزار بهبود کیفیت " به همراه این فناوری تا حد زیادی سروصدای محیط و خش های اضافی قابل حذف شدن می باشد.این محصول می تواند هم به صورت نرم افزاری مستقل مورد استفاده قرار گیرد و هم به صورت یک امکان مجزا برای بهبود کیفیت گفتار و در نتیجه بهبود کارایی و دقت در نرم افزارهای دیگر بکار گرفته شود. این نرم افزار یکی از محصولات گروه SPL دانشگاه صنعیت شریف می باشد.


2.8 اثر گذاری کلمات بر یکدیگر و نحوه تلفظ آنها
اثر گذاری کلمات بر روی همدیگر هنگام ادا شدن توسط گوینده ها وحتی حذف شدن واج های ابتدایی و انتهایی هنگام چسبیدن کلمات به هم کار تشخیص را مشکل می سازد.همچنین نحوه تلفظ کلمات توسط افراد مختلف و وجود لهجه های گوناگون بر دقت سیستم تاثیر می گذارند.در یک محیط کاری ،کاربران اصلی برنامه باید زمان نسبتاً زیادی را صرف صحبت کردن در سیستم کنند تا سیستم را با الگوی تلفظی خود آموزش دهند و آنرا با گفتار خود هماهنگ کنند. همچنین آنها باید سیستم را با واژه ها ،اصطلاحات و کلمات مترادف ویژه ای که در آن محیط استفاده می کنند،آموزش دهند. نسخه های ویژه ایاز برنامه های تشخیص صدا(که معمولاً وابسته به گوینده هستند) برای دفاتر قانونی یا مراکز درمانی وجود دارد که دارای واژه های مصطلح و رایجی که در این محیط ها بکار برده می شوند هستند.


3.8 کلمات متشابه (Homonym ها)
Homonym ها واژه هایی هستند که از نظر تلفظ شبیه هم هستند اما از نظر معنی و ریشه و گاهی املا با هم فرق دارند.there ،their، air ،heir ؛ be و bee مثال هایی از این نوع کلمات هستند. هیچ راهی برای یک برنامه تشخیص صدا وجود ندارد که بتواند بطور دقیق تفاوت بین این واژه ها را بر اساس صدا به تنهای تشخیص دهد.هرچند که  آموزش های بسیار زیاد سیستم ها و مدلهای آماری که امروزه به کار می رود تا حد زیادی کارایی این برنامه ها را افزایش داده است.


4.8 ایجاد سرو صدا
ایجاد سرو صدا یکی از محدودیت های این سیستم ها است. با توجه به لزوم تعامل صوتی انسان با این سیستم در هنگام استفاده این مشکل امری طبیعی است ولیکن برای کاهش مزاحمت و افزایش کارایی بهتر است که از این فناوری در محیط های خاص دربسته و مجزا استفاده شود.محدودیت دیگری که هنگام کار با این سیستم با آن مواجه می شویم خطر فاش شدن اطلاعات شخصی و محرمانه هنگام ورد اطلاعات است .یک راه ابتکاری والبته معقول وجود دارد و آن استفاده از ماسک های مخصوص مجهز به میکروفن حساس است . با استفاده از این ماسک ها  می توان با پایین ترین فرکانس صوتی ممکن صحبت کرد به طوری که دیگران صدای ما را نشنوند ودر عین حال مطمئن باشیم که صدای ما از طریق میکروفن وارد شده است.
 
نتیجه گیری
استفاده از گفتار به عنوان درونداد اطلاعاتی علاوه بر سرعت،در نحوه تعامل انسان بر محیط تاثیر بسزایی داشته است. با وجودیکه در حال حاضر سیستم های زیادی برای تشخیص گفتار وجود دارد ولی همه این دستاوردها به گونه ای، دسته ای از محدودیت های ساده کننده را یدک می کشند که حذف این محدودیت ها می تواند به صورت قابل ملاحظه ای بر پیچیدگی این سیستم ها بیفزاید. هدف نهایی درسیستم های  ”تشخیص گفتار“ ایجاد سیستمهایی است که بتوانند مانند انسان بشنوند و عکس العمل مناسب نشان دهند(سیستم های مستقل از گوینده وگفتار پیوسته). تا کنون گروهها و حوزه های مختلف فراخور نیازهایشان در انجام فعالیت هایشان از این فناروی استفاده کرده اند. امااز این فناوری عملا در کتابخانه ها و مراکز اطلاع رسانی به ندرت استفاده شده است که می تواند نتیجه عدم شناخت قابلیتهای این فناوری توسط کاربران ، مدیران وکارکنان کتابخانه ها باشد. دسترس پذیر کردن منابع اطلاعاتی و گشودن دروازه های اطلاعاتی به روی همه کاربران یکی از اهداف مهم کتابخانه هاست.از اینرو ، این سازمان پویا با توجه به این اصل و حمایت های همه جانبه می تواند همگام با پیشرفت  فناوری به این هدف آرمانی خود نزدیک تر شود. حتی زمانی در آینده دور ممکن است تشخیص گفتار (Speech Recognition) تبدیل به در ک گفتار (Speech Understanding) شود. مدل های آماری که به سیستم ها اجازه می دهند در مورد گفتار یک فرد تصمیم گیری کنند، روزی به آن ها اجازه خواهند داد معنی نهفته در پشت کلمات را نیز درک کنند ،اگر چه قطعاً تنها مدل کاملاً موفق از سیستم تشخیص گفتار سیستم شنوایی انسان است که هنوز اسرار آمیز و ناشناخته جلوه می کند.
  

مرجع: www.irandoc.ac.ir   


+ نوشته شده در ساعت توسط alireza |


Error Description
1
Unknown statement
2
Unknown structure EXIT statement
3
WHILE expected
4
No more space for IRAM BIT
5
No more space for BIT
6 .
expected in filename
7
IF THEN expected
8
BASIC source file not found
9
Maximum 128 aliases allowed
10
Unknown LCD type
11
INPUT, OUTPUT, 0 or 1 expected
12
Unknown CONFIG parameter
13
CONST already specified
14
Only IRAM bytes supported
15
Wrong data type
16
Unknown Definition
17 9
parameters expected
18
BIT only allowed with IRAM or SRAM
19
STRING length expected (DIM S AS STRING * 12 ,for example)
20
Unknown DATA TYPE
21
Out of IRAM space
22
Out of SRAM space
23
Out of XRAM space
24
Out of EPROM space
25
Variable already dimensioned
26
AS expected
27
parameter expected
28
IF THEN expected
29
SELECT CASE expected
30
BIT's are GLOBAL and can not be erased
31
Invalid data type
32
Variable not dimensioned
33
GLOBAL variable can not be ERASED
34
Invalid number of parameters
35 3
parameters expected
36
THEN expected
37
Invalid comparison operator
38
Operation not possible on BITS
39
FOR expected
40
Variable can not be used with RESET
41
Variable can not be used with SET
42
Numeric parameter expected
43
File not found
44 2
variables expected
45
DO expected
46
Assignment error
47
UNTIL expected
50
Value doesn't fit into INTEGER
51
Value doesn't fit into WORD
52
Value doesn't fit into LONG
60
Duplicate label
61
Label not found
62
SUB or FUNCTION expected first
63
Integer or Long expected for ABS()
64 ,
expected
65
device was not OPEN
66
device already OPENED
68
channel expected
70
BAUD rate not possible
71
Different parameter type passed then declared
72
Getclass error. This is an internal error.
73
Printing this FUNCTION not yet supported
74 3
parameters expected
80
Code does not fit into target chip
81
Use HEX(var) instead of PRINTHEX
82
Use HEX(var) instead of LCDHEX
85
Unknown interrupt source
86
Invalid parameter for TIMER configuration
87
ALIAS already used
88 0
or 1 expected
89
Out of range : must be 1-4
90
Address out of bounds
91
INPUT, OUTPUT, BINARY, or RANDOM expected
92
LEFT or RIGHT expected
93
Variable not dimensioned
94
Too many bits specified
95
Falling or rising expected for edge
96
Prescale value must be 1,8,64,256 or 1024
97
SUB or FUNCTION must be DECLARED first
98
SET or RESET expected
99
TYPE expected
100
No array support for IRAM variables
101
Can't find HW-register
102
Error in internal routine
103 =
expected
104
LoadReg error
105
StoreBit error
106
Unknown register
107
LoadnumValue error
108
Unknown directive in device file
109 =
expected in include file for .EQU
110
Include file not found
111
SUB or FUNCTION not DECLARED
112
SUB/FUNCTION name expected
113
SUB/FUNCTION already DECLARED
114
LOCAL only allowed in SUB or FUNCTION
115 #
channel expected
116
Invalid register file
117
Unknown interrupt
200 .
DEF not found
201
Low Pointer register expected
202 .
EQU not found, probably using functions that are not supported by the selected chip
203
Error in LD or LDD statement
204
Error in ST or STD statement
205 }
expected
206
Library file not found
207
Library file already registered
210
Bit definition not found
211
External routine not found
212
LOW LEVEL, RISING or FALLING expected
213
String expected for assignment
214
Size of XRAM string 0
215
Unknown ASM mnemonic
216
CONST not defined
217
No arrays allowed with BIT/BOOLEAN data type
218
Register must be in range from R16-R31
219
INT0-INT3 are always low level triggered in the MEGA
220
Forward jump out of range
221
Backward jump out of range
222
Illegal character
223 *
expected
224
Index out of range
225 ()
may not be used with constants
226
Numeric of string constant expected
227
SRAM start greater than SRAM end
228
DATA line must be placed after the END statement
229
End Sub or End Function expected
230
You can not write to a PIN register
231
TO expected
232
Not supported for the selected micro
233
READ only works for normal DATA lines, not for EPROM data
234 ')
block comment expected first
235 '(
block comment expected first
236
Value does not fit into byte
238
Variable is not dimensioned as an array
239
Invalid code sequence because of AVR hardware bug
240
END FUNCTION expected
241
END SUB expected
242
Source variable does not match the target variable
243
Bit index out of range for supplied data type
244
Do not use the Y pointer
245
No arrays supported with IRAM variable
246
No more room for .DEF definitions
247 .
expected
248
BYVAL should be used in declaration
249
ISR already defined
250
GOSUB expected
251
Label must be named SECTIC
252
Integer or Word expected
253
ERAM variable can not be used
254
Variable expected
255
Z or Z+ expected
256
Single expected
257 ""
expected
258
SRAM string expected
259 -
not allowed for a byte
260
Value larger than string length
261
Array expected
262
ON or OFF expected
263
Array index out of range
264
Use ECHO OFF and ECHO ON instead
265
offset expected in LDD or STD like Z+1
266
TIMER0, TIMER1 or TIMER2 expected
267
Numeric constant expected
268
Param must be in range from 0-3
269
END SELECT expected
270
Address already occupied
322
Data type not supported with statement
323
Label too long
324
Chip not supported by I2C slave library
325
Pre-scale value must be 1,8,32,128,256 or 1024
326 #
ENDIF expected
327
Maximum size is 255
328
Not valid for SW UART
999
DEMO/BETA only supports 2048 bytes of code
Other error codes are internal ones. Please report them when you get them

منبع

 

+ نوشته شده در ساعت توسط alireza |

 مقایسه ما با تمام میکروهای 8 بیتی هست یعنی در مجموع میشه گفت AVR یه رقیب قدرتمند برای بقیه میکروهای قوی است و یه انقلاب بزرگ هم به شمار میره. هنوز هیچ میکرویی به سرعت بالای AVR در محاسبات دست پیدانکرده .در ضمن AVR قادره که محاسبات 16 بیتی رو هم انجام بده. شهار ATMEL هم اینکه شما پول یه میکرو 8 بیتی رو میدید ولی میتونید از قایلیتهای یک میکرو 16 بیتی استفاده کنید.
AVR از معماری RISC با تعداد دستورالعمل بالا بهره میبره که دربین میکروها کم نظیر هست. اکثر دستورالعمل های آن باوجود زیاد بودن تعداد دستورالعملها در یک سیکل انجام میشه.
این میکرو از مدهای کاهش توان به خوبی بهره برده و تایید کننده آن زیاد بودن مدهای کاهش توان آن و استفاده از تقسیم کلاک به صورت نرم افزاری است که در کمتر میکرویی دیده میشه.
AVR حتی برعکس میکروهای دیگه هیچ تقسیم کلاکی انجام نمیده(مثلا 8051 کلاک رو بر 12 و PIC که یه میکرو قدرتمند هست کلاک رو بر 4 تقسیم میکنه). این امر که AVR کلاک رو تقسیم نمیکنه موجب کاهش مصرف انژی و افزایش MIPS شده.

تکنولوژی بکار رفته در
AVR موجب شده که حتی میتوان از آن در محیط های صنعتی و پر نویز براحتی از آن استفاده کرد(به گفته خود ATMEL والا هنوز خودم یه تست دقیق انجام ندادم ولی اون رو با یه فیبر یه رو و با یه کابل LCD تقریبا 20 سانتی و یا استفاده از باتری ماشین در کنار شمع پیکان غیر انژکتوری تست کردم ولی فقط در فاصله تقریبا 5-6 سانتی از اون صفحه LCD قاتی میکرد ولی نمیدونم میکرو هم ریست میشد یا نه .در ضمن قسمت تغذیه فقط از یک 7805 تشکیل شده بود. و این آزمایش هم برای خودم و هم برای چند تا از دوستانم که کارهای صنعتی انجام میدادن شگفت آور بود). اما به دلیل اینکه هنوز هیچ کسی اون رو تابه حال در محیط صنعتی تست نکرده و به دلیل اطمینان بالای PIC هیچ کسی دوست نداره اعتبار خودش رو به خطر بندازه.
یه جا یه مهندسه میگفت توی یه محط صنعتی که حتی کامپیوتر ریست میکرده
PIC به خوبی کار خودشو انجام میداده!!!!!!!!!!

در ضمن
AVR مجهز به آخرین امکانات مثل تایمر واچ داگ و برون اوت دیتکتور و مبدل های ADC و PWM است.
یکی از مهمترین بخشی که کمتر در هر میکرویی دیده میشه مقایسه کننده آنالوگ با گین 1 و 10 و 200 و .. است که بسته به میکرو فرق میکنه.
این مقایسه کننده میتونه تو ورودی مبدل
ADC قرار بگیره . این بخش برای بعضی طراحان خیلی مهمه و اونا رو مجذوب خودش کرده.

forum.persiantools.com

+ نوشته شده در ساعت توسط alireza |

میکروهای AVR دارای انعطاف پذیری غیر قابل مقایسه و بی همتایی هستند.آنها قادر به ترکیب هر نوع کدی با یک معماری کارامد از طریق زبانهای C و Assembly هستند و قادرند از طریق این برنامه ها تمام پارامترهای ممکن در یک سیکل یا چرخه ماشین را با دقت بسیار بالا هماهنگ کنند.

میکرو AVR دارای معماریی است که میتواند در تمام جهات مورد استفاده شما،عمل کند میکرو AVR معماریی دارد که برای شما کارایی 16 بیتی ارائه می دهد که البته قیمتش به اندازه یک 8 بیتی تمام می شود.

بهره های کلیدی AVR :

 

دارای بهترین MCU برای حافظه فلش در جهان ! (MCU: Master Control Unit)

دارای سیستمی با بهترین هماهنگی

دارای بالاترین کارایی و اجرا در CPU (یک دستورالعمل در هر سیکل کلاک)

دارای کدهایی با کوچکترین سایز

دارای حافظه خود برنامه ریز

دارای واسطه JTAG که با IEEE 1149.1 سازگار است

(IEEE: Institute of Electrical and Electronics Engineers.)

دارای سخت افزار ضرب کننده روی خود

دارای بهترین ابزارها برای پیشرفت و ترقی

دارای حالات زیادی برای ترفیع دادن یا Upgrade .

واژگان کلیدی AVR :

 

میکرو کنترلر AVR به منظور اجرای دستورالعملهای قدرتمند در یک سیکل کلاک(ساعت) به اندازه کافی سریع است و می تواند برای شما آزادی عملی را که احتیاج دارید به منظور بهینه سازی توان مصرفی فراهم کند.

میکروکنترلر AVR بر مبنای معماری  RISC(کاهش مجموعه ی دستورالعملهای کامپیوتر) پایه گذاری شده و مجموعه ای از دستورالعملها را که با 32 ثبات کار میکنند ترکیب می کند.

به کارگرفتن حافظه از نوع Flash  که AVR ها به طور یکسان از آن بهره می برند از جمله مزایای آنها است.

یک میکرو AVR می تواند با استفاده از یک منبع تغذیه 2.7 تا 5.5 ولتی از طریق شش پین ساده در عرض چند ثانیه برنامه ریزی شود یا Program شود.

میکروهای AVR در هرجا که باشند با 1.8 ولت تا 5.5 ولت تغذیه می شوند البته با انواع توان پایین (Low Power)که موجودند.

راه حلهایی که AVR پیش پای شما می گذارد، برای یافتن نیازهای شما مناسب است:

با داشتن تنوعی باور نکردنی و اختیارات فراوان در کارایی محصولات AVR، آنها به عنوان محصولاتی که همیشه در رقابت ها پیروز هستند شناخته شدند.در همه محصولات AVR مجموعه ی دستورالعملها و معماری یکسان هستند بنابراین زمانی که حجم کدهای دستورالعمل شما که قرار است در میکرو دانلود شود به دلایلی افزایش یابد یعنی بیشتر از گنجایش میکرویی که شما در نظر گرفته اید شود می توانید از همان کدها استفاده کنید و در عوض آن را در یک میکروی با گنجایش بالاتر دانلود کنید.

 

توان مصرفی پایین:

  • توان مصرفی پایین آنها برای استفاده بهینه از باتری و همچنین کاربرد میکرو در وسایل سیار و سفری طراحی شده که میکروهای جدید AVR با توان مصرفی کم از شش روش اضافی در مقدار توان مصرفی ، برای انجام عملیات بهره می برند.
  • این میکروها تا مقدار 1.8 ولت قابل تغذیه هستند که این امر باعث طولانی تر شدن عمر باتری می شود.
  • در میکروهای با توان پایین ، عملیات شبیه حالت Standby است یعنی میکرو می تواند تمام اعمال داخلی و جنبی را متوقف کند و کریستال خارجی را به همان وضعیت شش کلاک در هر چرخه رها کند!

نکات کلیدی و سودمند حافظه ی فلش خود برنامه ریز:

  • قابلیت دوباره برنامه ریزی کردن بدون احتیاج به اجزای خارجی
  • 128 بایت کوچک که به صورت فلش سکتور بندی شده اند
  • داشتن مقدار متغیر در سایز بلوکه ی بوت (Boot Block)
  • خواندن به هنگام نوشتن
  • بسیار آسان برای استفاده
  • کاهش یافتن زمان برنامه ریزی
  • کنترل کردن برنامه ریزی به صورت سخت افزاری

راههای مختلف برای عمل برنامه ریزی:

موازی یا Parallel :

  • یکی از سریعترین روشهای برنامه ریزی
  • سازگار با برنامه نویس های(programmers) اصلی

 

خود برنامه ریزی توسط هر اتصال فیزیکی:

  • برنامه ریزی توسط هر نوع واسطه ای از قبیل TWI و SPI و غیره
  • دارا بودن امنیت صد درصد در بروزرسانی و کدکردن

 

ISP:

  • واسطه سه سیمی محلی برای بروزرسانی سریع
  • آسان و موثر در استفاده

 

واسطه JTAG :

  • واسطه ای که تسلیم قانون IEEE 1149.1 است و می تواند به صورت NVM برنامه ریزی کند یعنی هنگام قطع جریان برق داده ها از بین نروند.استفاده از فیوزها و بیتهای قفل.
  • بیشتر برای دیباگ کردن آنچیپ و به منظور تست استفاده می شود

 

منبع

 

+ نوشته شده در ساعت توسط alireza |

زبانهای سطح بالا یا همان HHL به سرعت در حال تبدیل شدن به زبان برنامه نویسی استاندارد بای میکروکنترلر ها حتی برای میکروهای 8 بیتی کوچک هستند. زبان برنامه نویسی BASIC و C بیشترین استفاده را در برنامه نویسی میکروها دارند ولی در اکثر کاربردها کدهای بیشتری را نسبت به زبان برنامه نویسی اسمبلی تولید میکنند. ATMEL ایجاد تحولی در معماری، جهت کاهش کد به مقدار مینیمم را درک کرد که نتیجه این تحول میکروهای AVR هستند که علاوه بر کاهش و بهینه سازی مقدار کدها به طور واقع عملیات را تنها در یک کلاک سیکل توسط معماری RISC انجام میدهند و از 32 رجیسر همه منظوره (Accumulator) استفاده میکنند که باعث شده 4 تا 12 بار سریعتر از میکروهای مورد استفاده کنونی باشند.

تکنولوژی حافظه کم مصرف غیر فرار اتمل برای برنامه نویسی
AVR مورد استفاده قرار گرفته است در نتیجه حافظه های فلش و EEPROM در داخل مدار قابل برنامه ریزی هستند(ISP). میکروهای AVR اولیه داری 1 ، 2 ، و 8 کیلوبایت حافظه فلش و به صورت کلمات 16 بیتی سازماندهی شده بودند.

AVR ها به عنوان میکروهای RISC با تعداد دستورات فراوان طراحی شده اند که باعث میشود حجم کد تولید شده کم و سرعت بالاتری به دست آید.

عملیات تک سیکل:
با انجام تک سیکل دستورات، کلاک اسیلاتور با کلاک داخلی سیستم یکی میشود. هیچ تقسیم کننده ای در داخل
AVR قرار ندارد که ایجاد اختلاف فاز کند. اکثر میکروها کلاک اسیلاتور به سیستم را به 4 یا 12 تقسیم میکنند که خود باعث کاهش سرحت میشود. بنابراین AVR ها 4 تا 12 بار سریعتر و مصرف آنها نیز 4-12 بار نسبت به میکروکنترولرهای مصرفی کنونی کمتر است زیرا در تکنولوژی CMOS استفاده شده در میکروهای AVR ، مصرف توان سطح منطقی متناسب با فرکانس است.

طراحی برای زبانهای
BASIC و C :
زبانهای
BASIC و C بیشترین استفاده را در دنیای امروز بعنوان زبانهای HLL دارند. تا امروز معماری بیشتر میکروها برای زبان اسمبلی طراحی شده بود و کمتر از زبانهای HLL حمایت کرده اند.
هدف
ATMEL طراحی معماری بود که هم برای زبان اسمبلی و هم زبانهای HLL مفید باشد. به طور مثال در زبانهای BASIC و C میتوان یک متغییر محلی به جای متغییر سراسری در داخل زیربرنامه تعریف کرد، در این صورت فقط در زمان اجرای زیربرنامه مکانی از حافظه RAM برای متغییر اشغال میشود در صورتی که اگر متغییری به عنوان سراسری تعریف گردد در تمام وقت مکانی از حافظه FLASH ROM را اشغال کرده است.
برای دسترسی سریعتر به متغییرهای محلی و کاهش کد، نیاز به افزایش رجیسترهای همه منظوره است.
AVR ها دارای 32 رجیستر هستند که مستقیما به LOGIC ALU (ARITHMETIC UNIT) متصل شده اند، و تنها در یک کلاک سیکل به این واحد دسترسی پیدا میککند. سه جفت از این رجیسترها میتوانند به عنوان رجیسترهای 16 بیتی استفاده شوند.

منبع

+ نوشته شده در ساعت توسط alireza |

زبانهای سطح بالا یا همان HHL به سرعت در حال تبدیل شدن به زبان برنامه نویسی استاندارد بای میکروکنترلر ها حتی برای میکروهای 8 بیتی کوچک هستند. زبان برنامه نویسی BASIC و C بیشترین استفاده را در برنامه نویسی میکروها دارند ولی در اکثر کاربردها کدهای بیشتری را نسبت به زبان برنامه نویسی اسمبلی تولید میکنند. ATMEL ایجاد تحولی در معماری، جهت کاهش کد به مقدار مینیمم را درک کرد که نتیجه این تحول میکروهای AVR هستند که علاوه بر کاهش و بهینه سازی مقدار کدها به طور واقع عملیات را تنها در یک کلاک سیکل توسط معماری RISC انجام میدهند و از 32 رجیسر همه منظوره (Accumulator) استفاده میکنند که باعث شده 4 تا 12 بار سریعتر از میکروهای مورد استفاده کنونی باشند.

تکنولوژی حافظه کم مصرف غیر فرار اتمل برای برنامه نویسی
AVR مورد استفاده قرار گرفته است در نتیجه حافظه های فلش و EEPROM در داخل مدار قابل برنامه ریزی هستند(ISP). میکروهای AVR اولیه داری 1 ، 2 ، و 8 کیلوبایت حافظه فلش و به صورت کلمات 16 بیتی سازماندهی شده بودند.

AVR ها به عنوان میکروهای RISC با تعداد دستورات فراوان طراحی شده اند که باعث میشود حجم کد تولید شده کم و سرعت بالاتری به دست آید.

عملیات تک سیکل:
با انجام تک سیکل دستورات، کلاک اسیلاتور با کلاک داخلی سیستم یکی میشود. هیچ تقسیم کننده ای در داخل
AVR قرار ندارد که ایجاد اختلاف فاز کند. اکثر میکروها کلاک اسیلاتور به سیستم را به 4 یا 12 تقسیم میکنند که خود باعث کاهش سرحت میشود. بنابراین AVR ها 4 تا 12 بار سریعتر و مصرف آنها نیز 4-12 بار نسبت به میکروکنترولرهای مصرفی کنونی کمتر است زیرا در تکنولوژی CMOS استفاده شده در میکروهای AVR ، مصرف توان سطح منطقی متناسب با فرکانس است.

طراحی برای زبانهای
BASIC و C :
زبانهای
BASIC و C بیشترین استفاده را در دنیای امروز بعنوان زبانهای HLL دارند. تا امروز معماری بیشتر میکروها برای زبان اسمبلی طراحی شده بود و کمتر از زبانهای HLL حمایت کرده اند.
هدف
ATMEL طراحی معماری بود که هم برای زبان اسمبلی و هم زبانهای HLL مفید باشد. به طور مثال در زبانهای BASIC و C میتوان یک متغییر محلی به جای متغییر سراسری در داخل زیربرنامه تعریف کرد، در این صورت فقط در زمان اجرای زیربرنامه مکانی از حافظه RAM برای متغییر اشغال میشود در صورتی که اگر متغییری به عنوان سراسری تعریف گردد در تمام وقت مکانی از حافظه FLASH ROM را اشغال کرده است.
برای دسترسی سریعتر به متغییرهای محلی و کاهش کد، نیاز به افزایش رجیسترهای همه منظوره است.
AVR ها دارای 32 رجیستر هستند که مستقیما به LOGIC ALU (ARITHMETIC UNIT) متصل شده اند، و تنها در یک کلاک سیکل به این واحد دسترسی پیدا میککند. سه جفت از این رجیسترها میتوانند به عنوان رجیسترهای 16 بیتی استفاده شوند

منبع

+ نوشته شده در ساعت توسط alireza |

ساده ترين معماري ميكرو كنترلر، متشكل از يك ريز پردازنده، حافظه و درگاه  ورودي/خروجي است. ريز  پردازنده نيز متشكل از واحد پردازش مركز (CPU) و  واحد كنترل (CU)است.

CPU درواقع مغز يك ريز پردازنده است و محلي است كه در آنجا تمام عمليات رياضي و منطقي ،انجام مي شود. واحد كنترل ، عمليات داخلي ريز پردازنده را كنترل مي كند و سيگنال هاي كنترلي را به ساير بخشهاي ريز پردازنده ارسال مي كند تا دستورالعمل ها ي مورد  نظر انجام شوند.

حافظه بخش خيلي مهم از يك سيستم ميكرو كامپيوتري است. ما مي توانيم بر اساس به كارگيري حافظه، آن را به دو گروه دسته بندي كنيم: حافظه برنامه و حافظه داده . حافظه برنامه ، تمام كد برنامه را ذخيره مي كند. اين حافظه معمولاً از نوع حافظه فقط خواندني (ROM) مي باشد. انواع ديگري از حافظه ها نظير EPROM و حافظه هاي فلش EEPROM براي كاربردهايي كه حجم توليد پاييني دارند و همچنين هنگام پياده سازي برنامه به كار مي روند . حافظه داده از نوع حافظه خواندن / نوشتن (RAM) مي باشد . در كاربردهاي پيچيده كه به حجم بالايي از حافظه RAM نياز داريم ، امكان اضافه كردن تراشه هاي حافظه بيروني به اغلب ميكرو كنترلر ها وجود دارد.

 

درگاهها ورودي / خروجي (I/O )به سيگنال هاي ديجيتال بيروني امكان مي دهند كه با ميكرو كنترلر ارتباط پيدا كند. درگاههاي I/O معمولاً به صورت گروههاي 8 بيتي دسته بندي مي شوند و به هر گروه نيز نام خاصي اطلاق مي شود. به عنوان مثال ، ميكروكنترلر 8051 داراي 4 درگاه ورودي / خروجي 8 بيت مي باشد كه P3, P2, P1, P0 ناميده مي شوند. در تعدادي از ميكرو كنترلر ها ، جهت خطوط درگاه I/O قابل برنامه ريزي مي باشد. لذا بيت هاي مختلف يك درگاه را مي توان به صورت ورودي يا خروجي برنامه ريزي نمود. در برخي ديگر از ميكروكنترلرها (از جمله ميكروكنترلرهاي 8051) درگاههاي I/O به صورت دو طرفه مي باشند. هر خط از درگاه I/O اين گونه ميكرو كنترلرها را مي توان به صورت ورودي و يا خروجي مورد استفاده قرار داد . معمولاً ، اين گونه خطوط خروجي ، به همراه مقاومتهاي بالا كش بيروني به كار برده مي شوند.

 

منبع

 

+ نوشته شده در ساعت توسط alireza |

 

به نام خدا

 

 

ميكروكنترلرهاي خانواده PIC از معماري هاردوارد استفاده ميكنند . اين بدان معنااست كه كل حافظه به دو قسمت تقسيم شده است  . كه عبارتند از : حافظه داده و حافظه برنامه .مزيت اين معماري آن است كه ميتوان به هر دو بخش حافظه در يك دستورالعمل دسترسي داشت  . اغلب PIC  ها داراي سه بلاك حافظه داخلي ميباشند :

 

 

۱_ Data memory  : كه اين حافظه به Bank0 و Bank1 و ... تقسيم ميشوند .هر بانك شامل حافظه  RAM  معمولي (general purpose register) و ريجيستر هاي مخصوص (status,intcon,option,…) مي باشد.

 

2_ Eeprom memory  : يكي از تفاوت هاي اصلي ميكروهاي گذشته مثل سري 8051 با PIC و AVR  ، همين حافظه ميباشد. اين حافظه تقريبا بينابين RAM  و ROM   از نظر كاربرد ميباشد . اين  حاظه به صورتي است كه ميتوان در حين برنامه نويسي ، اطلاعات را در آن ذخيره يا پاك  كرد (RAM) واطلاعات آن در صورت قطعي برق نيز پاك نمي شود (ROM) . نسيت به  RAM  و ROM  داراي سرعت به مراتب پايين تر ميباشد .

 

3_Program memory  : برنامه اي كه توسط كاربر نوشته ميشود . در اين حافظه LOAD ميشود . به عنوان مثال PIC16F877 (40 پين) داراي پروگرام كانتر 13 بيتي براي آدرس دهي كردن Flash program memory به حجم (8k*14bit) ميباشد .

 

 

PIC ها از لحاظ نوع Program memory  به 4 دسته تقسيم ميشوند .

 

1) Flash Program Memory

 

مزيت اين گونه PIC ها سرعت نسبتا بالاي خواندن اطلاعات از ROM و درنتيجه سرعت بالاتر اجراي عمليات ميباشد . حافظه هاي فلش موجب گرديده تا سرعت اجراي برنامه از 12 كلاك در 8051 به 4 كلاك در PIC و 1 كلاك در AVR كاهش يابد .

خانواده هايي كه نام IC داراي F باشد داراي اين گونه حافظه ميباشند (مانند 16F84 , 16F877.....) .

 

2) Eprom program memory

 

خانواده هايي كه نام IC داراي C يا CE باشد.(16C84)

 

3)Rom Program Memory

 

خانواده هايي كه نام IC  داراي CR باشد (16CR84)

 

4) Eeprom Program Memory

 

همچنين بعضي از PIC ها نيز داراي رنج ولتاژي گسترده ميباشند كه داراي مشخصه  L  در نام  IC  مي باشد.(PIC16LF84)

 

منبع

 

+ نوشته شده در ساعت توسط alireza |

قبل از شروع این بحث بهتر است آشنایي مختصري با تئوري موسیقي پیدا کنید.اجزاي یک ملودي نتها هستند.هر نت در واقع يک فرکانس یا يک باند فرکانسي است.مثلا طبق استاندارد جهاني نت لا ازپايينترین اکتاو (Octave)، با فرکانس 440HZ نواخته می شود.نتها در اکتاوها متوالیا تکرار می شوند.اما فرق یک نت در یک اکتاوتا اکتاودیگر چیست؟تفاوت دربمی وزیری صداست.درواقــــع صدای نتهـــــای واقع در اکتــاوهای بالاتر، زیرترمی شود.

فرکانس نتهای موسیقی را می توان طبق رابطه زیر به دست آورد.

fx=fbase * 2 ^(n/12)

در رابطه بالا fbase فرکانس یک نت معلوم است.مثلا نت لا که قبلا گفته شد وn فاصله کلید مجهول از کلید معلوم رو به بالاست.مثلا فرکانس نت سی از همان اکتاو،طبق زیر به دست می آید.

fsi=440*2^(2/12)=494HZ

حال شما می توانید با تولید فرکانسهای متناظر نتها به وسیله یک میکروکنترلر،موسیقی دلخواه خود را اجرا کنید.در واقع میکروکنترلر شما باید برای هر نت یک موج مربعی با فرکانس آن نت و مدت زمان کشش آن نت روی یک پین خود تولید کند.ساختن موج مربعی با میکروکنترلر کار ساده ایست.همچنین می توانید فرکانس یا پرید نتها یا عددی متناسب با آنها را به عنوان اعدادی ثابت در یک آرایه ذخیره کنید تا متناسب با هر نت آنها را از جدول استخراج کنید.

برای شروع کار می توانيد مثال زير را دانلود کنيد.

 

Download : AVR-Music.zip

 

http://www.amnelec.persianblog.com

+ نوشته شده در ساعت توسط alireza |

 


میکرو کنترلر در اصطلاح به ریز پردازنده هایی گفته می شود که بجز
CPU حداقل شامل سیستم های ورودی و خرو جی (I/o) حافظه و مدارات ارتباط با حافظه در داخل تراشه اصلی هستند و نیازی به مدارات واسطه بیرونی جهت ارتباط با سیستم های جانبی را ندارد. البته امکانات همه میکرو کنترلر ها هشابه و یکسان نمی باشد و برخی از میکرو کنترلر ها علاوه بر امکانات فو ق العاده شامل مبدل های دیجیتال به آنالوگ و آنالوگ به دیجیتال و یا حتی امکانات بیشتر و اختصاصی تر می باشند.

میکرو کنترلر MC68HC7058 ساخت شرکت MOTOROLA نمونه ای از میکرو کنترلر های مدرن می باشد که امروزه در ساختمان مانیتور های پارس از آن استفاده شده است. قلب این میکرو کنترلر را ریز پردازنده 6805 تشکیل می دهد و حافظه آن شامل 3.75 کیلو بایت حافظه ROM جهت ذخیره کردن نرم افزار اجرایی و 256 بایت حافظه RAM جهت ذخیره سازی مو قت می باشد.
نرم افزار ذخیره شده در حافظه این میکرو کنترلر تحت امتیاز شرکت هیوندای کره جنوبی بوده و قابل دسترسی یا دخل و تصرف ننی باشد و فقط مختص 15 اینج مدل
HL -5870 می باشد. از و ضایف اصلی میک رو کنترلر می توان به موارد زیر اشاره کرد:
1- کنترل دکمه های جلوی مانیتور در صنعت ساخت
2- ایجاد ولتاژ های
DC جهت کنترل قسمت های مختلف مدار
3-ارتباط با حامظه
none volatile جهت ذخیره سازی و باز خوانی اطلاعات.
4- ارتباط با سیستم تغذیه جهت مدیریت توان مصرمی
5- ارتباط با سیستم مولد
OSD
6- ارتباط با سیستم تنظیم گر خودکار
7- تنظیم اعو جاجات و تصحیح خطاها
8- مضناتیس جدایی
9- پردازش سیگنال های همزمانی
10- کنترل پیچش تصویر

 

 

منبع

 

+ نوشته شده در ساعت توسط alireza |

اول الکتریسیته نبود، یعنی بود ولی آدم نمی دیدش! گاهی وقتا رعد و برق رو تو آسمون می دید ولی نمی دونست چیه! بعد که فهمید کهربا می تونه کاه رو جذب می کنه بازم نمی دونست چرا ولی فلاسفه یونان باستان می گفتند کهربا روح داره که می تونه چیزی رو حرکت بده! خب بیچاره ها حق هم داشتند شاید اگه ماکسول هم اون موقع زندگی می کرد همین حرف رو میزد! بعد که یه دو سه هزار سالی گذشت تا یه بابایی به اسم گیلبرت اومد گفت نه بابا این به خاطر اینه که کهربا در اثر اصطکاک با بعضی از مواد می تونه باردار بشه و خرده کاه رو جذب کنن. تا اینجا هیچ خبری از بار متحرک نبود و فقط بار ساکن مورد توجه بود تا اینکه تو اوائل قرن هجدهم بنجامین فرانکلین گفت الکتریسیته می تونه جاری بشه و در اینجا بود که مدار الکتریکی متولد شد چون ذره ی باردار فقط تو مسیر بسته می تونه دور بزنه. حدود صد سال بعد در سال 1831 مایکل فارادی تئوری تولید جریان الکتریکی بوسیله ی تغییر میدان مغناطیسی رو ارائه کرد و چند سال بعد ژنراتورها ساخته شدند. از همین جا بود که بشر تصمیم گرفت الکترون ها رو به شکلهای مختلف تو مسیرهای مختلف (مدار) به گردش دربیاره و همش تقصیر فارادی بود !!!!

تا اینجا هم تا پنجاه شصت سال همه چیز به خوبی و خوشی! پیش می رفت ولی در اواخر صده ی نوزدهم بود که یک روز آقای ادیسون لامپ خلا رو کشف کردند و دانش الکترونیک متولد شد. این اختراع مفید به سرعت منجر به ساخت تقویت کننده و فرستنده های رادیویی شد. بازهم تا چهل پنجاه سال مهندسان الکترونیک سرشون به لامپ های خلا گرم بود و برای خودشون با این لامپ ها انواع و اقسام مدارات آنالوگ و دیجیتال از آمپلی فایر صوتی گرفته تا ماشین حساب های بزرگ و کامپیوتر رو ساخته بودند. اولین کامپیوترشون انیاک (
ENIAC) بود با 30.000 تا لامپ و به اندازه یک ساختمان چند طبقه که قدرتش از ماشین حساب های جیبی شما هم کمتر بود!

این دفعه یه اتفاقی افتاد که تقصیر آزمایشگاه های بل بود که نیمه هادی ها رو به جون هم انداخت و ترانزیستور و دیود و ترایاک و انواع المان های غیرخطی با تولد اولین المان فیزیک حالت جامد (ترانزیستور) اختراع شدند و دنیا برای مهندسان الکترونیک گلستان شد!! لامپ های داغ، شکننده، گران، پرمصرف، حجیم و کم انعطاف جاشون رو به یک سوگلی سه پایه دادند که نه تنها داغ نمی شد و نمی شکست، خیلی کم مصرف و جمع و جور بود. تولد این جانور سه پا اولین انقلاب الکترونیک لقب گرفت ولی انقلاب اول زیاد دوام نداشت چون 10-15 سال بعد از اون دومین انقلاب که اختراع مدار مجتمع (
IC) بود صورت گرفت. مدارهایی که قبلا یک بار با لامپ طراحی شده بودند و یک بار با ترانزیستور باز طراحی شدند این بار روی یک تراشه ی سیلیکونی به صورت یک بسته بندی وارد بازار شدند.

یک پرانتز برای جمله ی آخر:

همه ی مدارهایی که با عناصر گسسته ساخته شده بودند بعد از اختراع
IC به صورت مجتمع ساخته نشدند چون اولا سیستم های کاربردی انقدر متنوعند که امکان تولید همه ی آن ها به صورت Package وجود ندارد و ثانیا گاهی ما نیاز به مداری داریم که فقط برای خودمان قابل استفاده است و بنابراین تا حد امکان مدارات مجتمع با کاربرد چند منظوره و به عنوان المان های اساسی تولید شدند و از آن ها در طراحی سیستم های مورد نیاز استفاده شد.

پرانتز بسته!

یه روز یه بابایی اومد گفت حالا که من برای طراحی یک سیستم باید از این همه المان استفاده کنم چقدر خوب می شد اگه یه المان داشتم که این سیستم رو توش جا می دادم!
خب با اینکه المان ها خیلی هاشون به صورت مجتمع و بسته تولید شده بودند ولی بازم این بابا حق داشت!! خب یه وقت می خواست یه مدار کنترلی طراحی کنه باید از چند ده جین المان استفاده می کرد. پس یه بابای دیگه حرفشو گوش کرد و یه المان براش ساخت که باهاش هرکاری که می خواست می تونست بکنه. اسم اون المان
میکروکنترلر بود.
ولی میکروکنترلر خام بود باید بهش می گفت که ازش چی می خواد. این کار رو برنامه نویسی برای میکروکنترلر انجام داد و به این ترتیب بود که این المان انقدر محبوب شد که هنوز چیزی جانشین اش نشده و همچنان بعد از حل بسیاری از مسائل به دنبال مسائلی برای حل می گردد ...

منبع

 

+ نوشته شده در ساعت توسط alireza |

به توضیح تک به تک قسمتها میپردازیم :

۱:در قسمت معرفی آی سی از کلمه کلیدی $Regfile برای معرفی استفاده شده است . این دستور به این صورت است که باید بعد ازآن کلمه معرف آی سی مورد استفاده را در جلوی آن وارد کنیم . البته برای هر آی سی کلمه ی مخصوصی وجود دارد که برای ATMEGA32 باید کلمه ی M32def.dat را تایپ کرد . البته باید توجه داشت که این کلمه باید داخل یک جفت کوتیشن ( گ + Shift ) قرار گیرد :
$
Regfile = “M32def.dat

۲: در قسمت بعدی که تعیین فرکانس کاری است کلمه کلیدی $Crystal باید نوشته شود و آنرا باید مساوی با فرکانس کار بر حسب هرتز قرار داد :
$
Crystal = 1000000

۳: حال به بخش معرفی سخت افزار رسیدیم . در این برنامه چون پورت B باید بتواند جریان بیرون دهد و سخت افزار خارجی ای که همان LED است را روشن کند بعنوان خروجی تعریف میشود . همیشه برای معرفی سخت افزار از کلمه کلیدی Config اسفاده میشود . پس برای خروجی کردن پورت B مینویسیم :
Config Portb = output

۴: چون در این برنامه نیازی به تعریف متغیری نبود به بخش برنامه اصلی میرویم و در این قسمت عددی را به پورت B خواهیم فرستاد تا طبق آن LED ها روشن شوند . البته ذکر این نکته لازم است که اگر بخواهیم عددی را در مبنای دودویی بنویسیم ابتدا باید &B را نوشته و بعد ععد مورد نظر را تایپ کنیم و همینطور برای نوشتن در مبنای هگز که &H تایپ میشود و اگر هیچکدام از کلمات ذکر شده را ننویسیم عدد در مبنای دسیمال محسوب میشود .

۵: در آخر برنامه نیز از کلمه کلیدی END برای مشخص نمودن پایان برنامه استفاده شده است .

دانلود برنامه ==> http://www.irankorea.com/microtak/microtak-about27.html

 

+ نوشته شده در ساعت توسط alireza |

 

 

تایمر ها از اجزاء پر کاربرد پروژه های 8051 می باشند.کار اصلی تایمر شمارش تعداد سیکل های کریستال می باشد.چون هر دوره تناوب کریستال در کسری از ثانیه رخ می دهد بنابراین می توان برای شمارش زمان سپری شده ، از آن استفاده کرد .
8051 دارای دو عدد تایمر 16 بیتی می باشد که با نامهای تایمر یک و تایمر صفر شناخته شده اند .هر تایمر در حقیقت از دو ثبات 8 بیتی با نام
TH و TL ساخته شده است .از تایمر ها در 4 مود کاری می توان استفاده کرد:
مود 00 که از تایمر به عنوان یک شمارشگر 13 بیتی استفاده می کند .
مود 01 از تایمر به عنوان شمارشگر 16 بیتی استفاده می کند .
مود 02 به عنوان شمارشگر 8 بیتی با راه اندازی خودکار استفاده می کند.(
AutoReload)
مود 03 تایمر را به دو تایمر 8 بیتی تقسیم می کند که به آن حالت تسخیر شده می گویند.

در 4 مود کاری بالا مود های یک و دو بیشترین کاربرد را در انجام پروژه ها دارند .تایمر 16 بیتی مود 01 می تواند از مقدار 0000 تا
FFFFH بشمارد پس از رسیدن به مقدار FFFF تایمر پرچم خود را (TF) را یک می کند و مجددا از مقدار 0000 شروع به شمارش می کند.

در مود 2 که همان حالت
AutoReload است تایمر به عنوان یک شمارشگر 8 بیتی از مقدار 00 تا FFh می شمارد البته در این مود می توان برای تایمر تعیین کرد که چه مقدار بشمارد فرضا در برنامه ای احتیاج به این پیدا می کنیم تا تایمر یک وظیفه ای را هر 100 میکرو ثانیه انجام دهد در این حالت از مود 2 استفاده می کنیم . مقدار اولیه شمارش را در ثبات TH قرار می دهیم .و سپس پس از راه اندازی تایمر این مقدار در ثبات TL قرار می گیرد و تایمر از مقدار تعیین شده تا FFh می شمارد . پس از رسیدن TL به FFh تایمر پس از یک کردن TF ، مجددا مقدارموجود در TH را در ،م کپی کرده و به همین ترتیب شمارش ادامه می یابد .

تایمر ها دارای دو ثبات با نامهای
TCON وTMOD هستندثبات ،TMOD برای مقدار اولیه دادن به تایمر مورد استفاده قرار می گیرند و ثبات TCON برای کنترل تایمر مورد استفاده قرار می گیرد ثبات TMOD همیشه باید قبل از راه اندازی تایمر مقدار دهی شود.شکل ثبات TMOD به صورت زیر است:


TMODیک ثبات 8 بیتی است که به دو قسمت 4 بیتی (nible) تقسیم می شود نیبل بالا برای تایمر 1 و نیبل پایین برای تایمر 0 مورداستفاده قرار می گیرد .اختلاف دو نیبل در همین است و غیر از این کاملا با هم مشابهند .
بیت
Gate ، می توان گفت که یک نوع راه انداز تایمر است . این بیت مشابه کلید روشن و خاموش عمل می کند در صورتی که مقدار این بیت را یک قرار دهیم کنترل تایمر از طریق پالس ورودی به پایه ی INT1 صورت می گیرد یکی از کاربرد های این بیت اندازه گیری پالس خارجی اعمال شده به پایه ی INT1 می باشد.
بیت
C/T نوع کارکرد تایمر را تعیین می کند که آیا تایمر برای شمارش تعداد پالس کریستال خارجی متصل به پایه T1 یا T0 مورداستفاده قرار گیرد یا برای شمارش تعداد پالس های کریستال مدار میکرو که آن هم به پایه های 18 و 19 متصل است .در حالت اول می گویند که تایمر به عنوان کانتر (شمارنده اتفاقات) عمل می کند و در حالت دوم می گویند که تایمر در حالت شمارش گر زمان کار می کند .در صورتی که بیتc/T را یک کنیم تایمر به عنوان کانتر و در صورتی که این بیت را صفر کنیم تایمر به عنوان شمارشگر واحد زمان به کار گرفته می شود.

بیتهای
M1و M0 هم مود کاری را که قبلا بررسی کردیم تعیین می کند .ابتدا مود مورد نظر را تعیین می کنیم سپس مقدار معادل آن در مبنای دو را در بیتهای M1, M2 قرار می دهیم .

یک مثال برای اینکه تایمر 1در حالت
AutoReload و به عنوان تایمر (شمارش گر زمان) مورد استفاده قرار گیرد :


معدل این کار دستور زیر است:

Mov Tmod,#00100000b


مرحله بعدی استفاده از تایمر تعیین چگونگی روشن و خاموش کردن تایمر است.
ثبات دیگری که در مورد تایمر مورد استفاده قرار می گیردثبات
TCON است بیتهای این ثبات در شکل زیر مشخص می باشند.


بیت
TF:قبلا هم در مورداین بیت صحبت کردیم هنگامی که تایمر شروع به شمارش کرد بسته به مودی که برای کار در آن تنظیم شده است پس از رسیدن به مقدار نهایی (FFh یا FFFFh یا1FFFh ) قبل از اینکه مجددا از صفر شروع به شمارش کند بیتTF را یک می کند تا نشان دهد که مقدار فعلی در دور دوم شمارش است و قبلا یک بار شمارش کامل شده است .
این بیت به صورت سخت افزاری یک می شود و ما باید به صورت نرم افزاری قبل از پایان دور دوم شمارش آن را صفر کنیم .
TF1 برای تایمر یک و TF0 پرچم شمارش برای تایمر صفر است.

بیت
TR: بیت کنترل راه اندازی نامیده شده است .در صورتی که این بیت را یک کنیم تایمر شروع به شمارش می کند و در صورتی که این بیت صفر شود تایمر متوقف می شود. مانند TF، ،TR1 برای کنترل تایمر 1 و TR0 برای کنترل راه اندازی تایمر 0 مورد استفاده قرار می گیرد.

4 بیت بعدی این ثبات برای عملیات وقفه کاربرد دارد که انشاالله در مبحث وقفه ها به صورت کامل توضیح خواهیم داد .
اکنون روش کار با تایمر را به صورت الگوریتم در می آوریم تا بهخاطر سپردن آن آسانتر شود.

1.از کدام تایمر استفاده خواهیمکرد؟
2.مود کاری تایمر را تعیین کنید.
3.تایمر مورد نظر شماست یا شمارنده
3.ثبات
TMOD را با معادل دودوئی آن بار گذاری کنید.
4.در صورتی که از
AutoReload استفاده می کنید TH را با مقدار اولیه مناسب بار کنید.
5.تایمر را راه اندازی کنید .
7.منتظر یک شدن
TF بمانید .


مثال:
برنامه ای بنویسید که یک پالس با دوره تناوب 200 میکرو ثانیه بر روی پایه ی
P1.0 تولید کند.


حل:
دوره تناوب پالس 200 میکرو ثانیه عنوان شده است یک پالس در نصف دوره تناوب در حالت
high و در نصف دیگر در حالت low قرار دارد . نصف دوره تناوب 100 میکرو ثانیه است و چون پالس متقارن است ما فقط به نصف دوره تناوب احتیاج داریم بنابراین مود تایمر را 2 یعنی حالت autoReload و مقدار اولیه را -100 در نظر می گیریم.
برای اینکه بفهمید چرا -100 ،توجه کنید که ما می خواهیم که تایمر 100 واحد بشمارد در حالت
AutoReload چون تایمر 8 بیتی است حداکثر مقدار شمارش FFh است بنابراین :
TH=FFh-100d=9Bh
اما -100 هم دقیقا مشابه مقدار بالا است .بنابراین اگر ما به جای -100 مقدار 9
Bh را در TH قرار می دادیم نیز نتیجه فرقی نمی کرد.

در این مثال فرقی نمی کند که از کدام تایمر استفاده کنیم .در حقیقت تایمر ها هیچ تفاوتی با هم ندارند .

Mov TMOD,#00100000b

Mov TH1,#-100
Setb TR1
Wait :jnb Tf1,wait
ClR TF1
CPL p1.0
Sjmp wait


همانطور که مشاهده می کنید قبل از پایان دور دوم شمارش مقدار
TF باید صفر شود.

منبع:دانشگاه کردستان

+ نوشته شده در ساعت توسط alireza |

 

از اوايل دهه هشتاد كارخانجات ساخت مدارهاي مجتمع به طراحي و توليد پردازنده هائي با كاربرد هاي خاص نمودند. يكي از اين محصولا‌ت كه در سالهاي اخير مصرف بسيار زيادي پيدا كرده است ميكروكنترلر ها مي باشند.
با ساخت ميكرو كنترلرها تحول شگرفي در ساخت تجهيزات الكترونيكي نظير لوازم خانگي، صنعتي، پزشكي ، تجاري و ... به وجود آمده است كه بدون آن تصورتجهيزات و وسايل پيشرفته امروز غير ممكن است. به عنوان مثال مي توان از ربات ها ، تلفن همراه و انواع سيستم هاي اتوماسيون نظير وانواع وسايل ديجيتالي مدرن ديگر نام برد.
علل پيدايش :
از آنجايي كه در مصارف صنعتي و ... جهت كنترل ماشينهاي صنعتي و... كنترل فرآيند معمولا‌ً با ارسال فرمانهاي مختلف و دريافت اطلا‌عات از قسمتهاي مختلف، اندازه گيري زمان ، شمارنده ، مبدل آنالوگ به ديجيتال(3) و بالعكس ، ارسال و دريافت اطلا‌عات به صورت سريال و موازي و ... نياز مي باشد
CPU ، شركتهاي ساخت قطعات الكترونيكي درصدد آن برآمدند تا با ساخت سيستمي يكپارچه همراه با يك قدرتمند تمامي امكانات فوق را دربر داشته باشد.
شركتهاي توليد كننده :
ازجمله شركتهايي كه در اين زمينه فعاليت داشته اند : شركت اينتل با سري چيپهاي
AT8050,8051,8052,...، شركت زايلوگ باسري چيپهاي Z8601,8602,8603,...و شركت موتورولا‌ با سري چيپهاي 6811A1,A2,...را مي توان نام برد. شركتهاي ديگري مانند هيتاچي و ... در اين زمينه توليداتي داشته اند ولي عمده ترين توليدكنندگان ميكروكنترلر كه به صورت حرفه اي عمل نموده اند سه شركت فوق مي باشند

 

 

+ نوشته شده در ساعت توسط alireza |

تا حالا فکر کردین AVR رو به مانیتور وصل کنین؟ چه قدر خوب می شه نه؟ اگه دیگه خروجی ویدیو هم داشته باشه که دیگه حرف نداره نه؟ ولی نمی ارزه حتما خیلی پیچیده می شه ولی تعجب نکنین اگه بگم چند تا مقاومت می خواد ادامه رو ببینین

این یه کارت گرافیک که می تونه متن رو از طریق پورت سریالش در یافت کنه و به خروجی
VGA یا ویدئو ارسال کنه برنامش رو هم می تونید روی ATMega16 ، 32 یا میکرو های مشابه اجرا کنید.
خود برنامه به زبان
C نوشته شده و باید با GCC اجراش کنید (مقاله AVR GCC رو ببینین http://www.iranled.com/modules.php?name=News&file=article&sid=41 )
نقشه خیلی ساده ای هم داره توی فایل می تونید کل سورس نقشه و ... رو پیدا کنید

Download File

 

+ نوشته شده در ساعت توسط alireza |

این یه PDF آموزشی برای AVRStudio
AVR Studio یک نرم افزار رایگان برای دیباگ کردن نوشتن برنامه اسمبلی برای AVR های شرکت Atmel است که می توانید آنرا از سایت این شرکت (www.atmel.com) در یافت کنید

آخرین ورژن
AVR Studio در هنگام نوشتن این مقاله 4 است از این نرم افزار به غیر از دیباگ کردن برنامه های اسمبلی می توانید برای دیباگ کردن کد های کمپایل شده را نیز استفاده کنید و به عنوان دیباگ برای نرم افزار های که فرمتهای COFF را مانند Codevision پشتیبانی می کنند استفاده کنید(از ورژن 4.06 به بعد) با این روش می توانید برنامه نوشته شده به زبان مثلا C را داخل AVRStudio دیباگ کنید.

Download File

 

http://www.iranled.com/article33.html

+ نوشته شده در ساعت توسط alireza |

آیا تا کنون درگیر پروژه ای شده اید که به حافظه غیرفرارخیلی بالا(چند ده یا صد مگا بایت)احتیاج داشته باشید!؟ اگر این طورباشد،حتما در ابتدا ناامید شده اید.چون این چنین حافظه ای به صورت چیپ وجود ندارد.اما برای من خیلی وقتها یک محدودیت بزرگ،باعث یک جهش بزرگ شده است.همین محدودیت باعث شدکه کارتهای مالتی مدیا(MMC) را شکار کنم.گرچه حتی خود شرکتهای سازنده این کارتها هم اطلاعات فنی آنها را به راحتی در اختیار دیگران قرارنمی دهند.اما چیزی به دست آوردم که ارزش زحمتش را داشت.

بگذریم! شما میتوانید یک MMC را با ظرفیت 128مگا بایت به قیمت حدود 10000تومان بخرید.چیزی که گفتم برای یک مهندس برق و سخت افزار خیلی وسوسه کننده است.با این حجم حافظه شما می توانید با فرکانس نمونه گیری 20کیلو نمونه در ثانیه(20ksps) و با یک A/DوD/A هشت بیتی حداقل یک ساعت و چهل و پنج دقیقه صدا ضبط کنید!و اما این کارتها مزایایی دارند که روز به روز بر کاربردشان افزوده می شود.

1-اندزه کوچکی دارند.

2-حجم حافظه بالایی دارند.

3-سرعت بالایی دارند(با ارتباط دهی SPI تا 20 مگا بیت در ثانیه)

4-سیم کشی کمی لازم دارند.

5-قیمت خیلی کمی دارند.

6-همه جا یافت می شوند.در شهرستان ما(لارستان) ، شاید برای پیدا کردن یک میکروکنترلر8051دچار مشکل شوید.ولی MMCفقط در دکه های نوشابه فروشی یافت نمی شود.

در کنار همه مزایای ذکر شده اکثر آنها فقط یک عیب دارند که به صورت سکتوری برنامه زیری می شوند.یعنی برای خواندن و نوشتن یک بایت باید کل سکتور در بر گیرنده آن بایت را خواند یا نوشت(البته مشکل بزرگی نسیت.).

MMCها به دو روش برنامه ریزی می شوند:MMCوSPI

کسانی که با میکروکنترلرهای جدید مثل AVR کار می کنندباید خیلی خوشحال باشند.چون می توانند به روش SPI با سرعت 8Mbps با MMC کار کنند.البته اولش کمی سخت است.

شما می توانید کارت خود را به AVR وصل کنید.

تغذیه MMC ها می تواند بین 2.9 تا 3.6 ولت باشد.اگر بخواهید Datasheet کامل یک MMC را داشته باشید،در سایت www.alldatasheet.com کارت HB288032MM1 را جستجو کنید.این کارت 32مگابایتی است.

من خودم برای ارتباط دهی MMCبا AVR یک کتابخانه نوشته ام وبه کتابخانه های CodeVision خود اضافه کرده ام.کسانی که این کتابخانه را بخواهند،می توانند به Emailمن درخواست بفرستند تا با هزینه ای مناسب برای آنها فرستاده شود.البته با این تعهد اخلاقی که به فکر تکثیر آن مخصوصا در اینترنت نباشند.

datasheet اين کتابخانه را در زير دانلود کنيد .

Download : MMC_Lib_Help.pdf

+ نوشته شده در ساعت توسط alireza |

اين پروگرامر قابليت برنامه ريزي ميکروهاي سري 8051 را دارا مي باشد.
از قابليتهاي اين پروگرامر مي توان به موارد زير اشاره کرد:
-
قابليت اتصال از طريق پورت سريال
-
شناسايي ميکروکنترلر بصورت خودکار
-
بازبيني اطلاعات
-
شناسايي سخت افزار بصورت خودکار

ميکروکنترلري که روي چيپ نياز است را بايد با برنامه EZ52.hex برنامه ريزي کرد .
بقيه قطعات را طبق شماتيک تهيه و از آن لذت ببريد. برگرفته از سایت IC4IR.com 

http://electronic.persiangig.com/Software/EZDownloader8051.zip

 

+ نوشته شده در ساعت توسط alireza |

آی سی PIC  به زبان های مختلفی قابل برنامه ریزی است مثل C#,C,Basic و... حال برای پروگرم کردن این آی سی به یک مدار نیاز داریم تا اتصال آی سی به کامپیوتر رو برقرار کنه.
این مدار قابلیت پروگرم کردن آی سی های(
PIC18F442و PIC18F458و PIC18F452و PIC18F252و PIC18F6620و PIC18F8720و PIC18F2620و PIC16C66و PIC16C72و PIC16C745و PIC16F84و PIC18F876) را دارد.
این مدار رو می تونید با روشهای مختلفی تهیه کنید مثلا می تونید از برد سوراخ دار یا برد برد استفاده کنید یا استفاده از
PCB آماده که من لینکشو در پایین گذاشتم یا آماده اون رو از بازار بخرید(به احتمال زیاد تو تهران پیدا میشه خصوصا تو پاساژ امجد!). برای ساخت این مدار من پیشنهاد میکنم از PCB استفاده کنید چون هم راحتتره و هم تمیزتر! برای ساخت این مدار به وسایل تقریبا زیادی احتیاج داریم که همه آنها در شمای کلی مدار نوشته شده است. در ضمن این مدار ورودی رو از پورت پرینتر میگیره.
نوعی دیگر از آی سی های میکرو نیز وجود دارد به نام
AVR که معمولا روی خود مدار اصلی پروگرم میشوند.
 در ضمن اگر مشکلی  داشتید حتما در قسمت نظرات مطرح کنید.

شمای کلی مدار
PCB آماده مدار

 

منبع : www.electronic.shahkey.com

+ نوشته شده در ساعت توسط alireza |

نرم افزار ارائه شده توسط شرکت ATMELبه نام  AVR Studio 4

این نرم افزار به صورت رایگان در سایت شرکت ATMEL قرار دارد می توانید با رجوع به آدرس http://www.atmel.com آن را دانلود کنید.

این نرم افزار در حقیقت یک اسمبلر برای محصولات AVR اتمل است و به صورت کاملا ویژوالی است.

می تواند با انواع دستگاههای برنامه نویس میکرو ارتباط برقرار کند و کدها را در میکرو دانلود کند.

و قابلیت ترجمه کدها به زبانهای C و Assembly را دارد و ...

انواع برنامه نویسها که AVR Studio 4 با آنها سازگار است:

در این قسمت خصوصیات پروگرامر ها را به زبان انگلیسی ارائه کردم چون به زبان فارسی اصلا قابل فهم نمی بود و باید یکی پیدا می شد تا ترجمه فارسی آن را دوباره ترجمه کند...

 

Emulators Platforms

In System Programmers

Starter Kits

ICE 40/50

AVRISP

STK500

JTAGICE

JTAGICE

STK501

 

 

STK502

STK500/STK501/STK502

STK500

Supports All AVR Devices

Interfaces with AVR Studio

Early Support for NewDevices Push Buttons, LEDs & RS232

 

STK501

STK500 Expansion Module for ATmega64/128

ZIF Socket & PCB Footprint

Onboard 32 kHz Oscillator

Additional RS232 Port

 

STK502

STK500 Expansion Module for ATmega169

ZIF Socket & PCB Footprint

Onboard 32 kHz Oscillator

Demo Application with Temperature Sensor

JTAGICE / JTAGICE mkII

Interfaced using AVR Studio

Real-Time Emulation in Actual Silicon

Debug the Real Device at the Target Level

Communicates Directly to the Device through 4-Pin JTAG Interface

One-wire Debug Interface (JTAGICE mkII only)

Supports

Program Breakpoints

Data Breakpoints

Full I/O View and Watches

Full Execution Control

ICE40/50 Emulator

ICE50

Emulates all Peripherals (Both Digital and Analog)

Supports all Instructions And Peripherals Real-Time

All Configurations Done from AVR Studio

Unlimited Number of Breakpoints

Source Level Debugging

Supports the Newest Members of AT mega

And AT tiny Product Families

 

ICE40

Same Features as ICE50

End Low Cost ICE for ATtiny13, ATtiny26, ATmega8, ATmega8515,ATmega853

ICE50 Upgrade Available

 

منبع

 

+ نوشته شده در ساعت توسط alireza |

 

یکی از انواع میکروکنترلرهای جدید که در بازار الکترونیک ارائه شده است، میکروکنترلر های شرکت ATMEL با نام میکروکنترلرهای خانوادهAVR  می باشد. این میکروکنترلر های هشت بیتی به دلیل قابلیت برنامه نویسی  توسط کامپایلر زبان های سطح بالا (HLL ) بسیار مورد توجه قرار می گیرند. این میکروکنترلر ها از معماری RISC برخوردارند و شرکت ATMEL سعی نموده است با استفاده از معماری پیشرفته و دستورات بهینه، حجم کد تولید شده را کم و سرعت اجرای برنامه را بالا ببرد. یکی از مشخصات این نوع میکروکنترلر ها دارا بودن 32 رجیستر همه منظوره می باشد. همچنین در این میکروکنترلر ها از حافظه های کم مصرف و غیر فرار FLASH و EEPROM استفاده می شود.

کامپایلر هایی به زبان BASIC  و C که زبانهای پرکاربرد در دنیا هستند برای این نوع میکرو ها طراحی شده است و علاوه برآن از زبان اسمبلی نیز همچنان می توان برای برنامه نویسی استفاده کرد.

به عنوان مثال کامپایلر BASCOM با زبان BASIC برای برنامه نویسی این نوع از میکروکنترلر ها می تواند مورد استفاده قرار گیرد.

 

میکروکنترلر های AVR به سه دسته اصلی تقسیم می شوند:

·        سری AT90S یا  AVR

·        سری TINYAVR

·        سری MEGAAVR

 

میکروکنترلر های نوع MEGAAVR  دارای قابلیت های بیشتری نسبت به دو سری دیگر هستند. در اینجا به بررسی مشخصات و پایه های یکی از میکروکنترلرهای پرکاربرد سری MEGA به نام ATMega32 می پردازیم:

 

ATMega32

 

 

مهمترین مشخضات این میکروکنترلر 40 پایه عبارت است از:

 

·        کارایی بالا و توان مصرفی کم

·        32 رجیستر (ثبات) 8 بیتی

·        سرعت با سقف 16 میلیون دستور در ثانیه در فرکانس 16 Mhz

·        32 کیلو بایت حافظه FLASH داخلی قابل برنامه ریزی با قابلیت ده هزار بار نوشتن و پاک کردن

·        2 کیلو بایت حافظه داخلی SRAM

·        1024 بایت حافظه EEPROM داخلی قابل برنامه ریزی با قابلیت صد هزار بار نوشتن و خواندن

·        قابلیت ارتباط JTAG

·        دو تایمر/شمارنده  هشت بیتی

·        یک تایمر/شمارنده  شانزده بیتی

·        چهار کانال PWM

·        هشت کانال مبدل A/D  ده بیتی

·        یک مقایسه کننده آنالوگ داخلی

·        WATCHDOG قابل برنامه ریزی با اسیلاتور داخلی

·        ارتباط سریال برای برنامه ریزی: ISP

·        USART سریال قابل برنامه ریزی

·        دارای شش حالت SLEEP

·        منابع وقفه داخلی و خارجی

·        اسیلاتور داخلی RC

·        کار با ولتاژ 4.5  تا 5.5

·        فرکانس کاری 0 تا 16 مگاهرتز

·        32 خط داده ورودی و خروجی قابل برنامه ریزی

·        ...

 

پایه های میکروکنترلرATMega32:

 

منبع :http://www.nurc.ir

 

+ نوشته شده در ساعت توسط alireza |

یک هنرمند پرتغالی اولین باغ وحش روبات های حیوان نمای دنیا را در کشور پرتغال راه اندازی کرده است.

این باغ وحش روبات های حیوان نما که "Robotarium X" نام دارد، در ویلای فرانک دو خیرا واقع شده است. این باغ وحش را یک هنرمند پرتغالی به نام "لئونل موئورا" طراحی و ساخته است.

در این باغ وحش که ساختاری زرد از جنس فلز و شیشه دارد، 45 گونه روبات حیوان نما زندگی می کنند.

در این باغ وحش قانون جنگل حکمفرما است. بنابراین هر روبات برای بقا مجبور است مبارزه کند. بطوری که روبات های بزرگتر به روبات های کوچکتر حمله می کنند.

براساس گزارش روبات نت، اغلب روبات های این باغ وحش، کوچک و بی دفاع هستند و روی چرخ یا پاهای کوچک راه می روند. در بین این روبات ها، نه گونه روبات بزرگ هم دیده می شوند.

+ نوشته شده در ساعت توسط alireza |

مخالفت آمریکا با صدور روادید برای برخی تیم های ایرانی مانع از حضور قدرتمند تمامی تیم های ایران در مسابقات جهانی روبوکاپ آتلانتا شد.

به گزارش خبرنگار مهر، در دوازدهمین دوره مسابقات جهانی روبوکاپ که در آمریکا برگزار می شود، چندین تیم کشور ما از مسابقات محروم شدند.

ایده اصلی برگزاری چنین مسابقاتی در قالب برگزاری رقابت های روبات های فوتبالیست برای اولین بار در سال 1993 ارایه شد.

به دنبال انجام مطالعاتی که دو سال به طول کشید، مشخص شد که برگزاری چنین رقابت هایی امکانپذیر است. در آگوست سال 1995، اعلام غیررسمی صورت درخصوص معرفی نخستین کنفرانس و بازی های فوتبال روبوکاپ صورت گرفت.

در جولای سال 1997، نخستین کنفرانس رسمی و بازی های مرتبط با آن در ناگویای ژاپن برگزارشد. به دنبال آن، این هم آوردها در پاریس، استکهلم، ملبورن، سیاتل، فوکوآکا/بوسان، پاودا، لیسبون، اوزاکا و برمن آلمان ادامه یافت.

این مسابقات که هرسال برگزار می شود، شمار قابل توجهی از مشتاقان علوم روباتیکی را به خود جلب می کند. در مسابقات امسال که یازدهمین سال برگزاری آن است، رقابت ها و سمپوزیوم هایی آن در آتلانتا واقع در ایالت جورجیا برگزار می شود.

منبع:خبرگزاری مهر
+ نوشته شده در ساعت توسط alireza |

رئیس گروه مکاترونیک دانشگاه خواجه نصیر با بیان اینکه بحث حقوق روباتیکی بی معناست، گفت : گرچه امروزه تحولات بی سابقه ای در عرصه روباتیک جهان شکل گرفته اما این به معنای آن نیست که با هوشمندتر شدن تجهیزات و لوازم داخل منزل و محیط اطراف، نظریه ای تحت عنوان امکان کنترل روبات ها بر سازندگانشان شکل گیرد.

دکتر موسویان رئیس گروه مکاترونیک این دانشگاه در گفتگو با خبرنگار مهر گفت: من به عنوان محققی که با دنیای روبات ها در ارتباطم معتقدم که دنیای ما خیلی سریع تر از آنچه که پیش بینی می کنیم در حال تغییر است و در این میان تجهیزات روباتیکی نیز به نوبه خود خیلی سریعتر از تصورات قبلی در حال رشد و روتق هستند.

وی افزود : به عنوان نمونه و همزمان با گسترش تحقیقات و اکتشافات فضایی، طراحی و ساخت سازه های فضایی و پرتاب ماهواره ها نیز گسترش خواهند یافت. گسترش و ارتقای حیات چنین سیستم هایی و در عین حال کاهش هزینه های مرتبط با آنها به بررسی های دقیق و حساس، مهارت در مونتاژ و حفظ قابلیت های آنها در فضا نیاز دارد. در این میان قابل پیش بینی است که سازه های روباتیک نقش کلیدی را در آینده ماموریت های فضایی ایفا کنند که البته این فرآیند را می توان در سایر زمینه های روباتیک نیز مشاهده کرد.

عضو هیئت علمی دانشگاه خواجه نصیر الدین طوسی در خصوص مطرح شدن ایده هایی مبنی بر گردآوری روبات های مختلف در محدوده ای به نام دهکده روباتیک و بررسی تعاملات رفتاری آنها و همچنین بحث حقوق روباتیکی گفت: چنین پروژه ای بیشتر از آنکه نگرشی واقع بینانه باشد، نگاهی افسانه ای و قصه وار است. از سوی دیگر نمی توان تصور کرد که جامعه ای به نام جامعه روباتیک با امتیاز برخورداری از حقوق ویژه موجودیت یابد.

وی معتقد است : گرچه امروزه تحولات بی سابقه ای در عرصه روباتیک جهان شکل گرفته اما این به معنای آن نیست که با هوشمندتر شدن تجهیزات و لوازم داخل منزل و محیط اطراف، نظریه ای تحت عنوان امکان کنترل روبات ها بر سازندگانشان شکل گیرد.

رئیس گروه مکاترونیک دانشگاه خواجه نصیرالدین طوسی افزود : اما بحثی نظیر برخورداری روبات ها از طیف وسیعی از احساسات، ارتقای سطح قابل توجهی در عرصه ساخت تجهیزات روباتیک و تجهیزات و لوازم داخلی در منازل همچون مراقبان کودک محسوب می شود. این پروژه چند سالی است که جدیت یافته و ساخت چشم مصنوعی با قابلیت انعکاس شادی از جمله آنهاست.

منبع:خبرگزاری مهر
+ نوشته شده در ساعت توسط alireza |

Robocup ابتکار عمل بین المللی آموزشی و تحقیقاتی است که هدف عمده آن تعمیق و گسترش تحقیقات روباتیک و هوش مصنوعی به واسطه طرح سوال استاندارد و استفاده از فناوری های نوین روباتیکی و الکترونیکی در بررسی و ارایه راه حل آنهاست.

به گزارش خبرگزاری مهر، ایده اصلی برگزاری چنین مسابقاتی در قالب برگزاری رقابت های روبات های فوتبالیست برای اولین بار در سال 1993 ارایه شد.

به دنبال انجام مطالعاتی که دو سال به طول کشید، مشخص شد که برگزاری چنین رقابت هایی امکانپذیر است. در آگوست سال 1995، اعلام غیررسمی صورت درخصوص معرفی نخستین کنفرانس و بازی های فوتبال روبوکاپ صورت گرفت.

در جولای سال 1997، نخستین کنفرانس رسمی و بازی های مرتبط با آن در ناگویای ژاپن برگزارشد. به دنبال آن، این هم آوردها در پاریس، استکهلم، ملبورن، سیاتل، فوکوآکا/بوسان، پاودا، لیسبون، اوزاکا و برمن آلمان ادامه یافت.

این مسابقات که هرسال برگزار می شود، شمار قابل توجهی از مشتاقان علوم روباتیکی را به خود جلب می کند. در مسابقات امسال که یازدهمین سال برگزاری آن است، رقابت ها و سمپوزیوم هایی آن در آتلانتا واقع در ایالت جورجیا برگزار می شود.

منبع:خبرگزاری مهر
+ نوشته شده در ساعت توسط alireza |

اقدام آمریکا در عدم صدور ویزا برای تیمهای ایرانی مضحک است
رئیس و برگزار کننده اصلی مسابقات روبوکاپ 2007 آتلانتا گفت: اقدام دولت آمریکا درخصوص عدم صدور ویزا برای برخی از تیمهای شرکت کننده ایرانی، مضحک و سوال برانگیز است.

پروفسور تاکر بالچ - برگزار کننده اصلی مسابقات روبوکاپ 2007 آتلانتا در گفتگو با خبرنگار مهر گفت : من نسبت به اقدام آمریکا برای عدم صدور ویزا به تیم های ایرانی ناامید شده ام و این حرکت را کاملا سیاسی می دانم.

استاد برجسته محاسبات هوشمندانه انستیتوفناوری جورجیا در ادامه گفت : به نظر من اقدام دولت آمریکا برای عدم صدور ویزا برای برخی تیم های ایرانی که خواستار حضور در آتلانتا بودند، اقدامی عمدی و اشتباه بوده است.

وی در خصوص شمار تیم های ایرانی شرکت کننده در رقابت های امسال گفت: من دقیقا نمی دانم چه تعداد تیم های ایرانی حضور دارند چون مسابقات در بخش های مختلفی برگزار می شود اما تیم های ایرانی و آنچه که با خود به این مسابقات می آورند بسیار ارزشمند و منحصربفرد است.

پروفسور تاکر بالچ در پایان نسبت به موفقیت تیم های ایرانی ابراز خشنودی کرده و خاطرنشان کرد: تیم های ایرانی همواره جزء بهترین ها بوده اند.

خبرگزاری مهر
+ نوشته شده در ساعت توسط alireza |

آغاز نبرد روباتهای 39 کشور دنیا در آمریکا / شانس بالای روباتهای ایران
یازدهمین دوره مسابقات جهانی روبوکاپ تا ساعاتی دیگر و به میزبانی انستیتو فناوری جورجیا در آتلانتا برگزار می شود.

به گزارش خبرگزاری مهر، در مسابقات امسال بالغ بر 1700 محقق و 300 تیم روباتیک شرکت کننده از 39 کشور جهان حضور خواهند بود.

مسابقات 2007 در چهار بخش نانوروبات ها، روبات های امدادگر، روبات های انسان نما و روبات های فوتبالیست برگزار می شود و به جهت حضور همه جانبه تیم های ایرانی که کارشکنی دولت آمریکا در خصوص عدم صدور ویزا برای برخی از آنها مانع از حضور پر رنگشان نشده، از اهمیت بالایی برخوردار شده است. همین بس که پروفسور تاکر بالچ، رئیس مسابقات امسال از تیم های ایرانی به عنوان تیم های با شانس بالا یاد می کند.

البته در رسانه های خبری عنوان شده است که 33 کشور جهان تیمهای خود را روانه این