پيروزي انقلاب اسلامي و استقرار نظام جمهوري اسلامي كه زمينه استقلال و آزادي ملت مسلمان ايران را بهمراه داشت پس از مدت كوتاهي با انبوهي از توطئه هاي داخلي و خارجي عليه اين نظام نوپا مواجه گرديد . رژيم بعثي عراق در شرايطي كه جمهوري اسلامي ايران مقدمات اجراي خواسته هاي ملت انقلابي را فراهم كرده بود و نيروهاي نظامي درگير باسازي و سازماندهي بودند و احتمال اجراي تهديد خارجي متصور نبود با هدف تامين خواسته هاي مستكبران و به منظور مقابله با خواسته بحق مردم ايران با حمله نظامي بخش عمده اي از سرزمين مقدس جمهوري اسلامي ايران را در 5 استان مرزي تصرف نمود
مردم مسلمان ايران با حمايت از نيروهاي مسلح در طي مدت 8 سال ( از سال 1988 تا 1980 ) براي رفع تجاوز و سركوب نيروهای متجاوزاقدام كردند و آنان را از سرزمين اسلامي بيرون راندند
آلودگي به مين و مواد منفجره در مرزهاي غربي و جنوب غربي جمهوري اسلامي ايران بر اثر جنگ تحميلي رژيم بعثي عراق عليه ايران در مقاطع زماني 1988-1980 مي باشد . پس از پايان جنگ تحميلي در سال 1367 تجاوز رژيم بعثي عراق با مقاومت ملت مقاوم ايران و از خود گذشتگي جوانان رزمنده و ايثار گر و تقديم شهيدان گرانقدر پايان يافت وليكن مناطق اشغالي توسط رژيم بعثي عراق و مناطق مرزي كشورمان آلوده به مين و مهمات منفجر نشده ؛ باقي مانده و ميزان وسعت آلودگي در گستره اي معادل 2/4 ميليون هكتار و با تراكم مين فراوان كه به ميزان 16 ميليون مين بالغ مي شود ؛ باقي ماند .
در جنگهاي برون مرزي و داخلي امروزي كشورها هميشه از ابزار آلات و مواد منفجره و مهمات استفاده ميگردد . يكي از اين تجهيزات كه در جنگها مورد استفاده فراوان دارد ، مين است . اين ابزار به منظور حفاظت از نقاط استراتژيك جنگي ، قطع ارتباط جادههاي لجستيكي و جلوگيري يا كند كردن حركت دشمن به سوي جلو ، از بين بردن يا صدمه زدن به نفرات و تجهيزات دشمن مورد استفاده قرار ميگيرد و قابليتهاي خود را در اين زمينه نيز به اثبات رسانده است .
اما مسئلهاي كه در رابطه با مين نسبت به ساير ابزار و مهمات جنگي وجود دارد، نحوه به كارگيري آن است . براي به كارگيري اكثر مينها ميبايست آنها را در زير خاك پنهان نمود ، بدان منظور كه تنها به وسيله قرباني خود منفجر گردد .
پس از پايان هر جنگ تمامي تجهيزات و مهمات مورد استفاده طرفين درگير در جنگ ، كه باقيمانده است قابل رؤيت بوده و بر روي زمين قرار دارد و ميتوان با شرايطي براي جابجايي ، انهدام ، به كارگيري مجدد و انبار كردن و … آنها تصميمات مناسبي را اتخاذ نمود .ولي متأسفانه در مورد مين چنين امري بسادگي امكانپذير نيست زيرا :
- محل دفن از نظرها پنهان ميباشد .
- عموما" نقشههاي مناطق مينگذاري شده موجود نيست يا داراي دقت كافي نميباشد .
- نحوه كاشت آنها در خيلي از مواقع در يك ميدان ، نامنظم است .
- پاكسازي ميادين مين بسيار مخاطره آميز است .
- پاكسازي ميادين مين مستلزم وقت زيادي ميباشد .
- وسعت زمينهاي مين گذاري شده بسيار زياد است .
به همين دليل پس از هر جنگ كه در آن از مين استفاده گرديده است ، شمار زيادي از افراد نظامي و غير نظامي بيگناه قرباني مينها ميشوند و خسارات زيادي به افراد محلي از نظر مالي و جاني وارد ميگردد .
بنابراين امروزه از انواع وسايل و روشهاي مختلف براي پاكسازي ميادين مين مورد استفاده مي شود كه به طور كلي به دو روش پاكسازي دستي (استفاده از نفرات) يا پاكسازي مكانيزه (استفاده از تجهيزات) تقسيم ميشود .
امروزه در گستره جهاني زمينهاي بسياري آلوده به مين ميباشند و در ايران نيز پس از اتمام جنگ تحميلي برغم تلاشهاي صورت گرفته در سالهاي قبل ؛ بسياري از زمينهاي آلوده به مين پاكسازي نگرديدهاند كه در روند بازسازي مناطق اشكال ايجاد كرده است .
جنگ تحميلي عراق عليه ايران باعث شد كه پس از جنگ در بخش وسيعي از مناطق كشور ما انواع مين و مواد منفجره عمل نكرده باقي بماند . طبق نظر كارشناسان پس از جنگ در بيش از 2/4 هكتار بالغ بر 000/000/16 مين هاي گذاشته شده توسط عراق باقي مانده بود كه همچنان در منطقه موجود است. با بازگشت اهالي و شروع زندگي روزمره در منطقه ، آلودگي آنجا مشكلات فراواني براي آنها ايجاد كرده است بگونهاي كه بر اساس آمارهاي قبلي، روزانه بطور متوسط 3 نفر با مين برخورد ميكنند . در اين رابطه جهت حل هر چه سريعتر اين معضل اجتماعي مسئولان و دست اندركاران ، تصميم گرفتند كه با همت كارشناسان ، متخصصان و صنايع مرتبط و با برنامهريزي توليد داخلي روش مكانيزه پاكسازي را جهت سرعت بخشيدن به عمليات پاكسازي مناطق آلوده بكارگيرند .
http://min1.blogfa.com/
|
الف)مین ضد نفر((AP 1- مین خوشه ای مرگبارترین مین – تا فاصله یکصد متری هر کسی را می کشد. POMZ تولید کننده چین روسیه M16 تولید کننده آمریکا Valmera 59 – 69 تولید کننده ایتالیا – آفریقای جنوبی - سنگاپور Porm-1 تولید کننده یوگسلاوی سابق مین های نارنجکی تولید کننده تمامی کشورهای تولید کننده نارنجکهای دستی Blu72 تولید کننده آمریکا 2- مین های انفجاری مین های انفجاری سبک: (gr 50-30 مواد منفجره ) Type72 تولید کننده چین و آفریقای جنوبی M14 تولید کننده آمریکا Sb33 تولید کننده ایتالیا مین های انفجاری سنگین : (150 – 200 gr مواد منفجره ) PMN تولید کننده روسیه و بسیاری کشور های جهان VS50 تولید کننده ایتالیا و بسیاری از کشورهای جهان NO4 تولید کننده اسرائیل ب) مین های ضد تانک ضد تانک سبک : V52 – 3 تولید کننده ایتالیا Tc2- 4 تولید کننده ایتالیا ضد تانک سنگین: Type72 تولید کننده ژاپن TMN46 تولید کننده اکثر کشورها | |
http://min1.blogfa.com/
|
سردار مرتضی حبیبی اعلام کرد: یک میلیون و 28 هزار هکتار آلوده به مین و مواد منفجره عمل نشده در برخی مناطق مرزی کشورمان وجود دارد و طبق برنامه قرار است تا پنج سال آینده کاملا پاکسازی شود. |
|
به گزارش خبرنگار مهر، سردارسرتیپ دوم پاسدار مرتضی حبیبی رئیس مرکز پاکسازی میادین مین کشور پیش از ظهر امروز در جمع خبرنگاران با بیان این مطلب ادامه داد: ستاد پاکسازی میادین مین وزارت دفاع از سال 84 کار پاکسازی میادین مین را تحت نظر شورای عالی مین زدایی کشور به ریاست وزیر دفاع آغاز کرده است. وی ادامه داد: بالاترین حجم آلودگی مین در استان ایلام در شهرستان دهلران است و در سال جاری 16 هزار و 121 هکتار از مناطق آلوده را پاکسازی شده است . سردار حبیبی با بیان اینکه در سال جاری 38 کشته و زخمی از مردم غیرنظامی و 33 کشته و زخمی ازنیروهای پاکسازی کننده در مناطق آلوده به مین داشتهایم، اظهار داشت: در طول سالهای پاکسازی 170 شهید و حدود 730 نفر زخمی شده اند و قرار است 18 یگان از ارتش و 12 یگان از سپاه متشکل از سه هزار نیرودر امر پاکسازی فعال شوند. وی افزود: بر اساس آمار و اطلاعات حجم مناطق آلوده به مین چهار ملیون و سیصد هزارهکتار بوده است که از این مقدار تنها یک میلیون و 28 هزار هکتار باقیمانده است. رئیس مرکز پاکسازی میادین مین کشور درباره این که آیا دولت عراق نقشههای میادین مین را در اختیارایران قرار داده است یا خیر، گفت: تا وقتی صدام در عراق قدرت داشت، مبنای دولت عراق برهمکاری نبود، اما امروز هم آمریکا اجازه همکاری نمیدهد و اطلاعات این میادین در بمبارانهای پادگانهای عراق در جنگ آمریکا با این کشور از بین رفته است و چنین اطلاعاتی هم اکنون در پادگانها وجود ندارد و در برخی قسمتها هم عراق در جنگ مینها را به صورت نامنظم و با هلیکوپتر در مناطق ریخته است که اصولا در این مواقع نقشهای وجود ندارد. وی در ادامه با بیان اینکه از ابتدای سال جاری حدود 10 ملیون قطعه مین از مناطق آلوده جمع آوری شده است ، گفت: طبق برآورد ما هنوز16 میلیون مین هم باقیمانده است اما از ابتدای سال جاری 16 ملیون 121 هکتار از اراضی پاکسازی شده تحویل استانداری ها شده که ایلام 516 هزار و 343 هکتار، خوزستان 435 هزار هکتار، کرمانشاه 56 هزار هکتار، آذربایجان غربی 11 هزار هکتار و کردستان 8هزار هکتار در اختیار استانداری ها قرار گرفته است. سردار حبیبی در پاسخ به این سوال که تا چه میزان از تکنولوژی های روز در مین زدایی استفاه میکنید؟ گفت: با توجه به محدودیتهایی که در ارائه تکنولوژی به ایران داریم تلاش کردهایم با استفاده از بخشهای فنی مهندسی معکوس به فناوریهای روز در مین زدایی برسیم. وی ادامه داد: از آنجایی که بیشتر تلفات جانی ما در جابهجایی و خنثی سازی مین است، طراحیهایی در وزارت دفاع در حال انجام است که مین کشف شده در محل خنثی و یا منهدم شود و حدالمقدور از جابهجایی جلوگیری شود. رئیس مرکز پاکسازی میادین مین کشور گفت: میزان اعتبار لازم برای پاکسازی پنج ساله را 400 میلیارد تومان برآورد شده است که در سال جاری سازمان مدیریت و برنامهریزی 15 میلیارد تومان به این کار اختصاص داده اما در دیداری که با رئیسجمهور داشتیم و برنامهی خود را ارائه دادیم قولهایی برای تامین بودجه گرفتهایم |
نسلی از جوانان امروزی، کودکی خود را در پناهگاهها و زیرزمینهای تاریک گذراندهاند، آنها زیر نور شمع مشق نوشتهاند و از معلمهای تلویزیونی الفبا را یاد گرفتهاند. این نسل گرچه امروز سرشار از خاطرات تلخ جنگ است، اما به زندگی عادی خود بازگشته است. جنگ ولی هنوز پایان نیافته است. مینها، این سربازان همیشه بیدار، همچنان دارند قربانی میگیرند.
براساس آمارهای رسمی دولت، هماکنون 16 میلیون مین خنثی نشده در ایران وجود دارد که بنا بر اعلام دبیر ستاد پاکسازی اراضی آلوده به مین بیش از دو میلیون هکتار از مساحت کشور را غیرقابل استفاده و خطرناک کردهاند. بر اثر انفجار گاه و بیگاه این مینها در طول هر شبانهروز 2/2 نفر دچار مرگ یا معلولیتهای دائمی میشوند. بنا بر یک پژوهش دانشگاهی در طول 6 سال گذشته به صورت میانگین هر ساله 7 هزار حادثه انفجار مین در نقاط مختلف مرزی ایران رخ داده که 95 درصد قربانیان آن غیرنظامی و بین 13 تا 25 درصد کودک بودهاند.
مناطق آلوده به مین به صورت عمده در شهرها و روستاهای پنج استان خوزستان، ایلام، آذربایجان غربی، کردستان و کرمانشاه واقع شده است که در فاصله سالهای 59 تا 67 خطوط مقدم جنگ را تشکیل میدادند. اختصاص داشتن مسأله مین به این استانها که اکثرا جزو استانهای محروم نیز محسوب میشوند باعث شده تا کمتر کسی به فکر حل مشکلات آنها باشد. شیرین عبادی، برنده جایزه صلح نوبل در این باره گفته است: «در پایتخت ایران، 14 میلیون انسان، فارغ از معضلات مردم مرزنشین زندگی میکنند که از یاد بردهاند روزی سه نفر بر اثر مین کشته یا مجروح میشوند. در کل دنیا 192 کشور وجود دارد که بر اثر انفجار مین 15 الی 20 هزار نفر در سال کشته میشوند. این در حالی است که از این تعدد تنها سالی هزار نفر در ایران کشته میشوند.»
او درباره تلفات انفجار مین نیز گفته بود: «از هر خانوادهای در سمت مرزهای غربی ایران یک نفر روی مین رفته که کشته یا زخمی شده است و این در حالی است که بیشترین تلفات از صدمات مین در بین کودکان است. زیرا آنها نه تنها به مخاطرات مین آشنا نیستند بلکه به صرف اینکه مین یک اسباب بازی است به آن دست میزنند و دچار حادثه میشوند.»
عبدالله رمضانزاده نیز که در کارنامه خود تجربه استانداری کردستان را دارد، میگوید: «در جنگ ایران و عراق در تمام هشت سال دزفول روزی 200 موشک میخورد یا کرمانشاه و ایلام در سه روز بیش از 200 بار بمباران شدند اما تا تهران 10 روز موشک باران شد، جنگ وارد مرحله دیگری شد. این طبیعت در کل جهان است. تا مسألهای مسأله تهران نشود، انتظار اینکه راه حل قانونی برایش پیدا شود یا راه حلی از طرف حاکمیت، انتظاری به دور از واقعبینی است.
برای بسیاری از کودکان 10 -12 ساله کرد یا خوزستانی جنگ جزئی از شنیدههاست. آنها به چشم جنگ را ندیدهاند، اما به چشم میبینید که چگونه ممکن است جنگی که پایان پذیرفته، آنها را معلول کند. «علی حق» یکی از هزاران کودکی است که در مردادماه 1381 و به هنگام بازی در نزدیکی خانهاش در روستای فیروزآباد استان ایلام بر اثر انفجار مین یک پا و چشم چپ خود را به صورت کامل از دست داد. علی یازده ساله ماهها تمرین کرد تا یاد بگیرد چگونه با عصای آلومینیومی خود راه برود، هر چند آن قدر خوش شانس بود تا به جمع دهها هزار مقتول حادثه انفجار مین در سالهای گذشته نپیوندد. سال گذشته نیز سجاد 12 ساله از عشایر دهلران در حالی که دامهایش را میچراند، در اثر انفجار و شدت جراحات وارده در دم جان سپرد.
چه کسی مسؤول است؟
مرکز مینزدایی ایران مسؤول پاکسازی تقریبا 16 هزار کیلومتر مربع از اراضی آلوده باقیمانده و اجرای عملیات مینزدایی است. مرکز مینزدایی کشور بازوی اجرایی شورای ملی هماهنگی مینزدایی است که در سطح کابینه به عنوان مقام مختارملی با مسئولیت اخذ سیاستها و استراتژیها، پروتکلها، بسیج منابع و نظارت کلی بر اجرای کلی عملیات مینزدایی تشکیل شده است.
اما وظیفه مین زدایی نیز بین دستگاههای مختلف چرخیده است. مهدی افروزمنش، عضو هیأت مدیره کانون مشارکت در پاکسازی مین به خبرنگار سپید در این باره میگوید: «پس از جنگ وظیفه مینزدایی به عهده وزارت دفاع بود که بعد به وزارت کشور منتقل شد. وزارت کشور هم با نیروی زمینی و... قرارداد میبست تا این کار را انجام دهند. اما از سال 83 دوباره این وظیفه به وزارت دفاع محول شد که 6 شرکت خصوصی زیر نظر این وزارتخانه وظیفه مین زدایی را برعهده دارند.»
گرچه در سایت مرکز مینزدایی ایران تعداد این شرکتها 8 و از آنها به عنوان NGO نام برده میشود، افروزمنش میگوید که از نظر آنها، این شرکتها به علت دریافت مبالغ از وزارت دفاع و نداشتن کار داوطلبانه NGO محسوب نمیشوند. هر چند، پاکسازی مینها توسط این شرکتها یا NGOها نیاز به بودجهای کلان دارد. وزیر سابق کشور گفته بود که برای خنثی سازی تمام مینها، 300 میلیارد تومان بودجه مورد نیاز است او همچنین اعلام کرده بود که در صورت اضافه شدن بودجههای مربوط به خنثی سازی مین، پاکسازی ایران از مینهای زمان جنگ 50 سال به طول خواهد انجامید. گفته میشود که ارزش ساخت مین بین یک تا 10 دلار است اما برای پاکسازی آن به هزار دلار بودجه نیاز است.
اما بودجه تنها بخشی از قضیه است. تجهیزات و امکاناتی که ایران در حال حاضر با کمک آنها مناطق آلوده به مین را پاک میکند، شامل ویزور، سیخک و لباس و پوتین ضد مین است که به همراه مینکوب تفتان همگی ساخت داخل محسوب میشوند. تحریمهای اعمال شده علیه ایران باعث شده که ما نه تنها در آسمانها قربانی بدهیم بلکه زمین زیر پایمان نیز هر لحظه احتمال انفجار داشته باشد.
بودجه و تجهیزات گرچه موانع بزرگی هستند اما بیشتر از آن بیاطلاعی مردم از وجود مینها و شکل و شمایلشان قربانی میگیرد. هر چند به علت وجود مینها در مناطق مرتفع و از باد و باران و سیل، مینها حرکت کرده و در مسیر چوپانها، در جادههای روستایی و حتی در حاشیه جادهها قرار گرفتهاند.
برای پر کردن خلاء آموزشی حسین وزیری، معاونت مهندسی وزارت دفاع و مجری طرح پاکسازی میدانهای مین نیز از کلاسهای آموزشی صلیب سرخ ایران با عنوان «مقابله با مین» در محلهای مختلف برای آشنایی کودکان و بزرگسالان با مین خبر داده بود. در کنار همه این اقدامات، معلولین ناشی از انفجار مین نیاز به دست و پای مصنوعی دارند. چیزی که هم گران و هم خیلی غیرقابل دسترس است. در صحنهای از فیلم سفر قندهار، محسن مخملباف و هواپیمایی را نشان میدهد که از آن دست و پای مصنوعی برای جمعیت افغانی مسلول به پایین ریخته میشود. فیلمهای سینمایی در مورد مین کم نیستند اما شاید فقط بهمن قبادی، در لاکپشتها هم پرواز میکنند، کودکان قربانی خشونت بزرگسالان را نشان داد. بچههایی بدون دست و پا و چشم، بچههایی که مین و آهن قراضه، خوراک روزانه سفرهشان را میآورد هر چند که مین عضوی از اعضای بدنشان را با خود میبرد.
به پیمان اوتاوا بپیوندیم
پیمان اوتاوا در سال 1997 برای ماده منفجرهای معتقد شده است که تاثیر طولانی مدت دارد و با پایان جنگ تمام نمیشود. کشورهای عضو این پیمان به یکدیگر کمک میکنند تا زمینهای آلوده را پاکسازی کنند و در امر آموزش و خدمات پزشکی نیز به هم یاری میرسانند.
ایران اگرچه دومین کشور دنیا از لحاظ حجم مناطق آلوده به مین است اما همچون کشور اول این لیست، یعنی مصر به پیمان اوتاوا نپیوسته است. هرچند مصر از طرف آمریکا با ارائه ماشین آلات سنگین حمایت نسبی میشود اما ایران به دلیل تحریم آمریکا، همچنان درگیر مشکلات خنثیسازی است.
موفقترین مورد پاکسازی در آسیا، کویت بوده است که علیرغم آنکه تراکم در بعضی مناطق بسیار زیاد گزارش شده بود. به علت دخالت بلافاصله وزارت دفاع آمریکا نیاز به پاکسازی مناطق نفتی پیشرفت بسیار خوبی داشته است. موفقترین مورد جهانی نیز کورزو بوده است که به علت حمایت مالی کشورهای غربی توانست در مدت کوتاهی عملیات پاکسازی را انجام دهد.
در ایران، سالها مسأله مین زدایی امنیتی تلقی میشده و هر چند هماکنون اعلام میشود که درهای پاکسازی به روی NGOها باز است، اما هیچکس به سمت این مینها نرفته است. شاید هم افراد صحنههای نفسگیری را به یاد آوردهاند که عرق از پیشانی فرد خنثی کننده مین میچکد و مین منفجر میشود. کمتر کسی حاضر است قدم جلو بگذارد و برای توقف انفجارها، حتی وارد کار آموزشی شود. فقط میشود حساب کرد که همین الان از فاصله، نوشتن این کلمات تا خوانده شدن آنها توسط شما 11 نفر دیگر بر اثر مین معلول یا کشته شدهاند.
http://min1.blogfa.com/
علیرغم وعده هایی که درباره تکنولوژی پیشرفته در پاکسازی سرزمین های آلوده به مین داده می شود، تکنولوژی پاکسازی مین از زمان جنگ دوم جهانی تاکنون تغییری چندانی نداشته است. در سراسر جهان فلزیاب های الکترو مغناطیسی و نیروی انسانی ماهر با یک ابزار دستی ساده (سیخک) همچنان بیشترین سهم را در پاکسازی بشردوستانه به عهده دارند.در عین حال این تلاش کند و خطرناک فقط به کمک تن پوش های محافظ و ویزور برای حفاظت از سر و صورت امنیت بیشتری می یابد.
در طی سالهای اخیر، ایده های جدید فراوانی برای پاکسازی ابداع شده اند. از سگ ، موش ،زنبور عسل ، رادار و اشعه مادون قرمز برای شناسایی مین، تا استفاده از لیزر و ربات برای خنثی سازی آن مطرح شده اند. اما نکته اصلی آن است که ابزارهای ممکن تا از نظریه صرف به استفاده عملی برسند، مستلزم زمان و هزینه ای فراتر از امکانات برنامه های مین زدایی بشردوستانه است. نوئل مالینر[1][1] مسئول بخش تکنولوژی خدمات مین زدایی سازمان ملل می گوید: «تکنولوژی جدید هرگز با سرعت کافی به میدان های پاکسازی نمی رسد. ما باید تعداد بیشتری از ابزار ساده داشته باشیم.»
عملی ترین پیشرفتی که ممکن است به میدان برسد، تحول در فلز یاب های معمولی است. کارایی فلزیاب های موجود که برای مین یابی استفاده می شوند، تحت تأثیر دو عامل اصلی کاهش می یابد: وجود ضایعات فلزی فراوان در مناطق جنگزده؛ و استفاده هرچه بیشتر از پلاستیک و ناچیز بودن میزان فلز در ساختمان مین های زمینی. علاوه برآن مین یاب های موجود در بازار نیز در همه شرایط جوی و جغرافیایی و خاکی مؤثر نیستند. علاوه بر آن ویژگیهایی نظیر صحت تشخیص، راحتی و سهولت استفاده، دوام، قابلیت اصلاح و ترمیم در محل نیز در کارایی درازمدت مین یاب ها مؤثرند.
به طور کلی همه امکانات پاکسازی شامل مین یاب ها باید چنان مقاوم باشند که مدتها در شرایط جغرافیایی و آب وهوایی نامناسب و استفاده های خشن و درازمدت دوام داشته باشند
اما بیشتر کشورهای جنگزده با هزینه های سنگین بازسازی پس از جنگ، امکان مالی خرید ابزار پرهزینه پیشرفته را به تعداد فراوانی که ضروری است، ندارند. بنابراین شرکت های تولید کننده نیز ترجیح می دهند که تحقیق و توسعه و تولید را به نفع مقاصد نظامی جهت دهی نمایند، و در نتیجه تحقیقات آنها به تولید ابزاری می انجامد که به سهولت در اختیار مقاصد غیرنظامی قرار نمی گیرند.
به گفته دنیس بارلو رئیس مرکز اطلاعات مین زدایی در دانشگاه جیمز مدیسون، تنها امید مین زدایی به آن است که راهی برای پاکسازی کم هزینه و با تکنولوژی ساده یافته شود و این نکته چندان مطلوب شرکت های سازنده تکنولوژی تسلیحاتی نیست.
جدیدترین تحول امیدبخشی که در تکنولوژی مین زدایی شناخته شده است، مین یاب هایی است که در آنها رادار نافذ در زمین با سیستم های مالتی سنسور ترکیب شده است (HSTAMIDS). ارتش امریکا در طی دو سال گذشته در افغانستان و عراق از آن استفاده نظامی نموده است و در عین حال گفته می شود که نوعی از آن برای استفاده غیر نظامی، به میزان محدود در دست آزمایش است.
این مین یاب جدید[2][2] مین را از فلزهای بی خطر تفکیک می نماید، و همین ویژگی سرعت و دقت کار پاکسازی را چند برابرمی کند.
مین یاب HSTAMIDS با یک حسگر دوگانه کار می کند. ابتدا فلزیاب الکترومغناطیسی انعکاس صوت ناشی از فلز موجود در مین را در می یابد وسپس به کمک تکنولوژی رادار نافذ در زمین[3][3] شکل مین مدفون شده را شناسایی می کند. نرم افزار مین یاب در این زمینه به کمک می آید و سختی های زمین را که ممکن است مانع تشخیص شکل دقیق مین شوند، جبران می کند.
به عبارت دیگر اپراتور ابتدا به صدا گوش فرا می دهد و بعد آنرا با شکلی که رادار ارسال می کند تطبیق می دهد.
نمونه غیر نظامی مین یاب فوق در کامبوج ، افغانستان و تایلند در حال آزمایش است. در کامبوج علیرغم دشواری های جغرافیایی و پوشش گیاهی که مانع اصلی پاکسازی در این کشور است، سرعت کار با مین یاب جدید 6 برابر پاکسازی با فلزیاب معمولی برآورد شده است، که علت اصلی آن تشخیص پارازیت توسط رادار و عدم اتلاف وقت است.
اما این مین یاب ارزان نیست، در حالیکه یک فلزیاب معمولی بین 2 تا 5 هزار دلار ارزش دارد، هر واحد از نوع نظامی این مین ياب جدید تقریبا 17000 دلار خرج بر می دارد. اما نوع نظامی ویژگی هایی نظیر کارکرد زیر آب در شب و یا مقاومت برای سقوط از هواپیما دارد که در مین زدایی بشردوستانه نیازی به آنها نیست. بنابراین ممکن است که نوع غیرنظامی را بتوان با هزینه کمتری تولید و توزیع نمود.
فلزیابی که در مین یاب HSTAMIDS استفاده می شود، از نوع Minelab Model F3 است که بدوا برای شناسایی معادن طلا ساخته شده است و نسل جدید ابزار جبرانگر زمین[4][4] است که می تواند تأثیر میدان های الکترومغناطیسی موجود در زمین را خنثی نماید. و سیستم رادار انواع مین های ضدنفر و ضدتانک اعم از نوع پلاستیکی و فلزی را شناسایی می کند.
یک سیستم خود گردان رادار «نافذ در زمین» برای یافتن مین های کم فلز (پلاستیک) ضدتانک به نام مین استاکر MineStalker نیز توسط از کمپانی نایتک (Niitek) ساخته شده است که . توانایی کشف هر مین مخفی شده در اعماق خاک را که برای فلزیاب معمولی قابل تشخیص نیست را دارد. این رادار ها در آنگولا و نامی بیا آزمایش شده اند.
اندی اسمیت مشاور مین زدایی معتقد است که مهمترین نکته در مورد تبدیل فلزیاب اف – 3 به مین یاب در تسهیل استفاده از آن توسط اپراتورهای خشن و ناوارد و استفاده زیاد و مداوم در شرایط نامناسب است.
اما اسمیت یک هشدار در مورد مین یاب HSTAMIDS می دهد: «وقتی که مین های کوچک ضد نفر در زمین های صخره ای با ریشه های درخت و مناطق خیلی خیس و یا خیلی خشک مدفون باشند، رادار خیلی هم قابل اعتماد نیست. کسی که به آن اعتماد می کند به ريسك بزرگی دست می زند. این سیستم می تواند مین زدایی را برای سربازی که زیر آتش دشمن کار می کند تسریع کند و این بسیار مهم است- اما ریسک آنکه چیزی را به جای بگذارند افزایش می دهد.»
http://min1.blogfa.com/
عناوين متن
زبانهاي برنامهنويسي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
چکیده:
در حال حاظر تحقیقات زیادی در گرایش های پردازش تصویر و پردازش صوت در سطح دنیا در حال انجام است که عموما از روشهای هوش مصنوعی و الگوریتم های مختلف پردازش، نظیر 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
چکیده:
کنترل رباتهای سیار(موبایل ربات) جهت عدم برخورد با موانع بر اساس آموزش و پیشگویی مختصات موانع در لحظات بعدی از موسوم ترین روش های کنترل سینماتیک و دینامیک روباتهای سیار می باشد.اما آنچه که ما ارائه می دهیم، براساس آموزش شبکه عصبی از دست فرمان اپراتور ربات درمقایسه با موانع پیش آمده درحین آموزش ربات است.این ایده برای کنترل اتوموبیل ها نیز قابل تعمیم است.بعبارتی ربات ما نیازی به داشتن یک حافظه برای بخاطر سپردن موقعیت موانع در حین آموزش، برای پبشگویی مکان های موانع بعدی ندارد.در نمونه های رایج دنیا ربات با اسکن نامحدود صفحه مورد آزمایش میخواهد نحوه چینش موانع را بر اساس 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
چکیده:
يكي از مشکلات ارسال سیگنال وجود نویز و خطای بین سمبلها واعوجاج ميباشد. يكي از كاربردهاي شبكههاي عصبي در پردازش سيگنالها طراحي فيلتر است بطوريكه از آن براي:
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
چکيده :
در اين نوشتار به معرفي شبکه هاي عصبي مصنوعي[1] و ساختارهاي آنها به صورت خلاصه ميپردازيم. در ابتدا نرونهاي شبکه هاي عصبي طبيعي معرفي شده و طرز کار آنها نشان داده شده است. سپس مدل مصنوعي اين نرونها و ساختار آنها ، مدل رياضي آنها ، شبکه هاي عصبي مصنوعي و نحوه آموزش و بکار گيري اين شبکه ها به همراه روش يادگيري گراديان کاهنده نشان داده شده است. تمرکز بيشتر بر نوعي از اين شبکه ها بنام شبکه هاي عصبي مصنوعي پرسپترون چند لايه ميباشد. ابزاهايي نيز براي پياده سازي اين شبکه ها نام برده شده است.
كليدواژهها: شبکه هاي عصبي مصنوعي ، شبکه هاي عصبي، Artificial Neural networks Multi layered Perceptron, Gradient descent
مقدمه :
در ساليان اخير شاهد حرکتي مستمر از تحقيقات صرفا تئوري به تحقيقات کاربردي بخصوص در زمينه پردازش اطلاعات ، براي مسائلي که براي آنها راه حلي موجود نيست و يا براحتي قابل حل نيستند بوده ايم. با عنايت به اين امر ، علاقه اي فزاينده اي در توسعه تئوريکي سيستمهاي ديناميکي هوشمند مدل آزاد[2] -که مبتني بر داده هاي تجربي ميباشند – ايجاد شده است. ANN ها جزء اين دسته از سيستمهاي مکانيکي قرار دارند که با پردازش روي داده هاي تجربي ، دانش يا قانون نهفته در وراي داده ها را به ساختار شبکه منتقل ميکنند.به همين خاطر به اين سيستمها هوشمند گفته ميشود ، زيرا بر اساس محاسبات روي داده هاي عددي يا مثالها ، قوانين کلي را فرا ميگيرند.اين سيستمها در مدلسازي ساختار نرو-سيناپتيکي[3] مغز بشر ميکوشند.
البته اين سخن که" ANN ها در مدلسازي مغز بشر ميکوشند" اغراق آميز ميباشد.دانشمندان هرچه بيشتر در مورد مغز بشر تحقيق ميکنند و مي آموزند ، بيشتر در مي يابند که مغز بشر دست نيافتني است.در حقيقت در مورد مغز و ساختار سيستم عصبي انسان اطلاعات زيادي بدست آمده است. ولي پياده سازي ساختاري با پيچيدگي مغز انسان بر اساس اطلاعاتي و تکنولوژي که امروزه وجود دارد غير ممکن ميباشد.
ما ميتوانيم يک نرون عصبي انسان و عملکرد آنرا را توسط مدل هاي رياضي ، مدلسازي کنيم.شکل1 ساختار يک نرون طبيعي را نشان ميدهد.
شکل1 - ساختار نرون طبيعي انسان
هر نرون طبيعي از سه قسمت اصلي تشکيل شده است :
1. بدنه سلول (Soma)
2. دندريت(Dendrite)
3. اکسون (Axon)
دندريتها به عنوان مناطق دريافت سيگنالهاي الکتريکي ، شبکه هايي تشکيل يافته از فيبرهاي سلولي هستند که داراي سطح نامنظم و شاخه هاي انشعابي بيشمار ميباشند .دندريتها سيگنالهاي الکتريکي را به هسته سلول منتقل ميکنند. بدنه سلول انرژي لازم را براي فعاليت نرون فراهم کرده و برروي سيگنالهاي دريافتي عمل ميکند ، که با يک عمل ساده جمع و مقايسه با يک سطح آستانه مدل ميگردد. اکسون بر خلاف دندريتها از سطحي هموارتر و تعداد شاخه هاي کمتري برخوردار ميباشد. اکسون طول بيشتري دارد و سيگنالهاي الکتروشيميايي دريافتي از هسته سلول را به نرونهاي ديگر منتقل ميکند.محل تلاقي يک اکسون از يک سلول به دندريتهاي سلولهاي ديگر را سيناپس ميگويند.توسط سيناپسها ارتباطات مابين نرونها برقرار ميشود.به فضاي مابين اکسون و دندريتها فضاي سيناپسي گويند.
در حقيقت دندريتها به عنوان ورودي نرون و اکسون به عنوان خروجي و فضاي سيناپسي محل اتصال ايندو ميباشد. زمانيکه سيگنال عصبي از اکسون به نرونها و يا عناصر ديگر بدن مثل ماهيچه ها ميرسد ، باعث تحريک آنها ميشود.
نرونها از هريک از اتصالات ورودي خود يک ولتاژ کم دريافت ميکند ( توسط سيگنال عصبي ورودي ) و آنها را با هم جمع ميزند. اگر اين حاصل جمع به يک مقدار آستانه رسيد اصطلاحا نرون آتش ميکند و روي اکسون خود يک ولتاژ خروجي ارسال ميکند که اين ولتاژ به دندريتهايي که به اين اکسون متصلند رسيده و باعث يکسري فعل و انفعالهاي شيميايي در اتصالات سيناپسي ميشود و ميتواند باعث آتش کردن نرونهاي ديگر شود. تمامي فعاليتهاي مغزي انسان توسط همين اتش کردنها انجام ميشود.
حافظه کوتاه مدت انسان جرقه هاي لحظه اي الکتريکي ميباشند و حافظه بلند مدت به صورت تغييرات الکتروشيميايي در اتصالات سيناپسي ذخيره ميشود که عمدتا منجر به تغيير يونها ميشود.
همانگونه که گفته شد ما ميتوانيم توسط مفاهيم رياضي يک نرون طبيعي را مدل کنيم.شکل 2 يک نرون عصبي مصنوعي را نشان ميدهد.
شکل 2 ساختار يک نرون مصنوعي
سيگنالهاي ورودي
تابع جمع کننده
خروجي نرون توسط تابع زير مشخص ميشود:
به خصوصيات زير در مورد مغز انسان توجه کنيد :
محاسبات کاملا به صورت توزيع شده وموازي انجام ميشود.
"يادگيري" جايگزين برنامه ريزي از قبل ميشود.
در مغز انسان يک ساختار ALU مشخص وجود ندارد. ALU ، حافظه و کنترل همگي در يک ساختار درهم تنيده شبکه اي از تعداد بسيار زيادي نرون توزيع و پخش شده است.
مغز انسان توسط يک پروسه يادگيري مي آموزد که در پاسخ به يک ورودي ، چه خروجي را توليد کرده و ارسال کند. اين فرآيند يادگيري در حقيقت توسط تنظيم اتصالات سيناپسي در نرونهاي طبيعي و معادل آنها در ANN ها ،يعني تنظيم وزنهاي
حال بر اساس مطالب گفته شده ميتوان به تعريف ANN ها پرداخت.
يک ساختار شبکه اي از تعدادي عناصر مرتبط به هم به نام نرون که هر نرون داراي وروديها و خروجيهايي است و يک عمل نسبتا ساده و محلي[6] را انجام ميدهد.شبکه هاي عصبي عموما عملکرد خود را طي يک پروسه يادگيري[7] فرا ميگيرد.
شبکه هاي عصبي کاربردهاي عمده اي در تشخيص الگو ، گروه بندي ، پيش بيني يا برون يابي و ... دارا ميباشد.
در سال 1949 مدل MP شبکه هاي عصبي مصنوعي توسط مک کالوخ و پيت مطرح شد که يک مدل خطي ساده بود . سپس پرسپترون الگوريتمهاي يادگيري را ارائه نمود. سال 1969 آغاز افول موقت شبکه هاي عصبي شد. زيرا عدم توانايي شبکه هاي عصبي در حل مسائل غير خطي آشکار شد. ANN هاي آن زمان فقط قادر به حل مسائلي بودند که ميتوانستيم پاسخهاي آن مسئله را توسط يک خط در محور مختصات از هم جدا کنيم. در 1982 هاپفيلد با معرفي شبکه هاي چند لايه و الگوريتمهاي يادگيري داراي feedback ، راه حلي براي حل موارد غير خطي ارائه کرد.در اين زمان بود که شبکه هاي بازگشتي ، خودسازمانده ، Autoregressive ، RBF و روش يادگيري هيبيان مطرح شد.از نيمه دهه نود ، نسل سوم ANN ها مطرح شدند که عبارت بودند از :
· تعيين محدوديتهاي تئوري و عملي شبکه
· عموميت و حدود آن
· ترکيب ANN و الگوريتمهاي ژنتيکي و منطق فازي
در نهايت امروزه استفاده عملي و پياده سازي تجاري و سخت افزاري ANN ها ممکن شده است .
معرفي مدل نرون ساده خطي
بر اساس ايده گرفته شده از نرونهاي طبيعي ، ميتوان مدل نرون مصنوعي را رائه کرد که بتواند وروديها را باهم ترکيب کرده و يک خروجي از آنها به وجود آورد. در ساده ترين حالت نرون وروديهاي وزن دار را با هم جمع ميکند. شکل 3 يک نرون ساده خطي را نشان ميدهد.
(bias) + ∑
![]()
شکل3 : نرون ساده خطي
ميتوان شبکه عصبي را به صورت يک سيستم محرک / پاسخ در نظر گرفت. مهم اينست که بدانيم تعليم شبکه يعني تنظيم پارامترهاي آن به نحويکه رفتار محرک / پاسخ طبق خواسته باشد. در حين تعليم در واقع مجهولات ما وزنها(w) ميباشند. وزنها در غالب حافظه ها عمل ميکنند و نحوه توليد پاسخ را مشخص ميکنند. درصورتيکه وروديهاي و خروجيهاي متناظر موجود باشد ( به اين زوج ورودي و خروجي مجموعه تعليم[8]گفته ميشود
ميتوانيم براي اينکه خروجي خاصي توليد شود از يک تابع به نام تابع فشرده سازي[9]استفاده کنيم.اين مسئله در شکل4 نشان داده شده است.
تابع فشرده سازی Squashing (bias) + ∑
![]()
شکل 4 : مدل نرون خطي به همراه تابع فشرده سازي
تابع فشرده سازي(فعال سازي) رنج وسيعي از مقادير ورودي را به مقدار خاصي نگاشت ميکند.به عنوان مثال ميتوانيم هرمقدار خروجي را به مقادير باينري 0 و 1 نگاشت کنيم. انواع مختلفي از توابع فشرده سازي در ANNها استفاده ميشود. ولي بيشترين استفاده را تابع فشرده سازي سيگمويد[10] دارد.
ادعا ميشود که فرکانس آتش نرون طبيعي به صورت تابعي شبيه سيگمويد ميباشد. البته دلايل ديگري براي استفاده از سيگمويد وجود دارد. از جمله :
1. فشرده سازي ميکند. ( رنج ورودي (-∞,+∞) و خروجي [0,1] ميباشد )
2. تقريبا خطي ، افزايشي و مشتق پذير است.
3. در فرم بسته قابل نمايش است.
4. مشتق گيري از آن ساده است.
تکنيکهاي تعيين پارامترهاي نرون خطي
بطور کلي دو روش براي تعيين پارامترهاي نرون خطي يا به عبارت ديگر مشخص کردن مقادير وزنها وجود دارد:
1. تعيين مستقيم
2. روالهاي تکرار شونده
1 - تعيين مستقيم
فرض کنيم
بنابر اين :
بدين صورت ميتوان مقادير wرا بدست آورد.
2 – روالهاي تکرار شونده
نام ديگر اين روش "گراديان کاهنده[11]" ميباشد در ادامه به توضيح اين روش مي پردازيم :
قبل از هر چيز بردار گراديان را تعريف ميکنيم:
بردار گراديان در واقع جهت تغييرات ماکزيمم در تابع f را نشان ميدهد.
در روش کاهش گراديان ، ابتدا مقادير تصادفي براي وزنها انتخاب ميشود و بر اساس اين اوزان خروجيهايي از شبکه بدست مي آيد.در يک روال تکرار شونده
خطاي شبکه به ازاء وزنهاي
خطاي خروجي برابر است با اختلاف مابين خورجي شبکه (0) و خروجي مطلوب (t).خطاي يک ورودي برابر است با :
و خطاي کلي برابر است با :
خطاي ميانگين مربع[12] برابر با :
قاعده کلي ،بدست آوردن مشتق خطا نسبت به w ميباشد تا بتوانيم تغييرات خطا نسبت به w را به صفر نزديک کنيم.يعني ما بدنبال پيدا کردن
در نتيجه تصحيح وزن jام در مرحله kام از تکرار الگوريتم تعليم به صورت زير ميباشد:
که
شبکه هاي پرسپترون[13] چند لايه
شبکه هايي که از يک نرون ساخته شده اند داراي محدوديتهايي ميباشند. اين شبکه ها توانايي پياده سازي توابع غير خطي را ندارند. به عنوان مثال توسط اين شبکه ها نميتوان تابع XOR را پياده سازي نمود. براي حل اين مشکل شبکه هاي ديگري پيشنهاد شد که ما به يکي از آنان که بيشترين استفاده را دارد مي پردازيم. دليل ديگر معرفي اين نوع شبکه ، استفاده از آن در ابن تحقيق مي باشد.
مدل عمومي شبکه هاي پرسپترون ، شبکه جلو رونده[14] با روال تعليم انتشار به عقب[15] است. شبکه هاي جلو رونده شبکه هايي هستند که وروديهاي لايه اول نرونهاي آن به لايه هاي بعدي متصل بوده و در هر سطح اين مسئله صادق بوده تا به لايه خروجي برسد. روال انتشار به عقب بدين معني است که پس از مشخص شدن خروجي شبکه ، ابتدا وزنهاي لايه آخر تصحيح شده و بعد به ترتيب اوزان لايه هاي قبلي تصحيح ميشوند.در اين موارد بيشتر توضيح داده ميشود.
شبکه هاي پرسپترون از يک لايه ورودي ، تعدادي لايه پنهان و يک لايه خروجي تشکيل شده است.در شکل 5 يک شبکه پرسپترون با يک لايه پنهان نشان داده شده است.
شکل 5 : نمونه اي از يک شبکه پرسپترون
در اين شکل لايه X لايه ورودي ، لايه Z لايه پنهان و لايه Y نيز لايه خروجي ميباشد.
در اين شبکه ها شرايط زير وجود دارد :
1. نرونهاي هر لايه تنها به نرونهاي لايه بعدي متصل ميباشند.
2. هر نرون به تمامي نرونهاي لايه بعد متصل است.
3. نرونهاي لايه ورودي عملي را انجام نميدهند و اوزان آنها ثابت و برابر يک ميباشد. اين نرونها فاقد تابع فشرده سازي ميباشند.
4. انتشار عملگر رو به جلو است. تمامي نرونها به غير از لايه ورودي جمع کننده بوده و هر نرون ميتواند تابع فشرده سازي مستقلي داشته باشد.
5. هر نرون ميتواند داراي باياس مستقل باشد.
6. تعداد لايه هاي پنهان مشخص نميباشد.
الگوريتم يادگيري شبکه هاي پرسپترون ( انتشار به عقب )
در اين بخش به نحوه يادگيري شبکه پرسپترون چند لايه که در شکل 5 نشان داده شده است مي پردازيم.
در الگوريتم يادگيري از علائم زير استفاده ميکنم:
x : بردار ورودي که براي يادگيري شبکه از آن استفاده ميشود.
t : بردار خروجيهاي مطلوب
α: نرخ يادگيري.
ورودي شبکه به
سيگنال خروجي
ورودي
سيگنال خروجي
براي آموزش شبکه توسط انتشار به عقب ، سه مرحله بايد انجام شود : انتشار به جلو الگوهاي يادگيري ورودي ، انتشار به عقب خطاي بدست آمده و تنظيم اوزان.
در حين انتشار به جلو ، هر واحد ورودي
درمرحله يادگيري ،در هرکدام از واحدهاي خروجي ،
در نهايت زمانيکه تمامي δ مشخص شدند ، تمامي اوزان به صورت هم زمان تصحيح خواهند شد. تصحيح وزن
حال بر اساس مطالب گفته شده الگوريتم يادگيري را شرح ميدهيم :
مرحله 0 : مقدار دهي اوليه اوزان بر اساس مقادير تصادفي کوچک
مرحله 1 : تازمانيکه شرط پايان برقرار نيست مراحل 2 تا 9 را تکرار کنيد.( در مورد شرط پايان صحبت خواهد شد)
مرحله 2 : به ازاء هر زوج تعليم ( ورودي و خروجي متناظر در مجموعه تعليم ) مراحل 3 تا 8 را تکرار کنيد :
مرحله 3 : هر واحد ورودي
سيگنال ورودي
مرحله 4 : هر واحد پنهان
حاصل جمع سيگنالهاي ورودي وزن دار خويش را محاسبه ميکند :
سپس تابع فشرده سازي مربوطه را بر حاصل اعمال ميکند :
و سيگنال حاصل را به تمامي واحدهاي لايه بعدي ارسال ميکند.
مرحله 5 : هر واحد خروجي
حاصل جمع سيگنالهاي ورودي وزن دار خويش را بدست مي آورد:
و تابع فشرده سازي مربوط به خود را براي محاسبه خروجي به حاصل اعمال ميکند:
انتشار به عقب خطا :
مرحله 6 : هر واحد خروجي
و مقداري را که بعدا براي تصحيح وزن
و
مرحله 7 : هر کدام از واحدهاي پنهان
حاصل جمع دلتاي ورودي خود را که از واحدهاي لايه بعد از خود به آن رسيده است ، محاسبه ميکند:
و حاصل را در مشتق تابع فشرده سازي ضرب کرده تا ترم اطلاعات خطاي
سپس مقداري را که بعدا براي تصحيح وزن
تصحيح اوزان و باياسها :
مرحله 8 : هر کدام از واحدهاي خروجي وزنها ( j=0,…,p ) و باياس خودرا به صورت زير تصحيح ميکنند :
هر کدام از لايه هاي پنهان نيز وزنها ( i=0,…,n ) و باياس مربوطه را به صورت زير تصحيح ميکند :
مرحله 9 : شرط پايان برقرار است. پايان الگوريتم يادگيري.
البته در زمان پياده سازي بايد آرايه هاي مجزايي براي دلتاهاي واحدهاي خروجي ( مرحله 6 ،
يک دوره[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
چكيده:
سيستم تشخیص گفتار نوعی فناوری است که به یک رايانه این امکان را می دهد که گفتار و کلمات گوینده را بازشناسی و خروجي آنرا به قالب مورد نظر، مانند "متن"، ارائه كند. در این مقاله پس از معرفی و ذكر تاريخچهاي ازفناوري سیستم ها تشخيص گفتار، دو نوع تقسیم بندی از سيستمها ارائه می شود، و سپس به برخی ضعف ها و نهایتاً کاربرد این فناوری اشاره می شود.
كليد واژه ها: سيستمهاي تشخیص گفتار، فناوري اطلاعات، بازشناسي گفتار
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
مقایسه ما با تمام میکروهای 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
میکروهای AVR دارای انعطاف پذیری غیر قابل مقایسه و بی همتایی هستند.آنها قادر به ترکیب هر نوع کدی با یک معماری کارامد از طریق زبانهای C و Assembly هستند و قادرند از طریق این برنامه ها تمام پارامترهای ممکن در یک سیکل یا چرخه ماشین را با دقت بسیار بالا هماهنگ کنند.
میکرو AVR دارای معماریی است که میتواند در تمام جهات مورد استفاده شما،عمل کند میکرو AVR معماریی دارد که برای شما کارایی 16 بیتی ارائه می دهد که البته قیمتش به اندازه یک 8 بیتی تمام می شود.
دارای بهترین MCU برای حافظه فلش در جهان ! (MCU: Master Control Unit)
دارای سیستمی با بهترین هماهنگی
دارای بالاترین کارایی و اجرا در CPU (یک دستورالعمل در هر سیکل کلاک)
دارای کدهایی با کوچکترین سایز
دارای حافظه خود برنامه ریز
دارای واسطه JTAG که با IEEE 1149.1 سازگار است
(IEEE: Institute of Electrical and Electronics Engineers.)
دارای سخت افزار ضرب کننده روی خود
دارای بهترین ابزارها برای پیشرفت و ترقی
دارای حالات زیادی برای ترفیع دادن یا Upgrade .
میکرو کنترلر AVR به منظور اجرای دستورالعملهای قدرتمند در یک سیکل کلاک(ساعت) به اندازه کافی سریع است و می تواند برای شما آزادی عملی را که احتیاج دارید به منظور بهینه سازی توان مصرفی فراهم کند.
میکروکنترلر AVR بر مبنای معماری RISC(کاهش مجموعه ی دستورالعملهای کامپیوتر) پایه گذاری شده و مجموعه ای از دستورالعملها را که با 32 ثبات کار میکنند ترکیب می کند.
به کارگرفتن حافظه از نوع Flash که AVR ها به طور یکسان از آن بهره می برند از جمله مزایای آنها است.
یک میکرو AVR می تواند با استفاده از یک منبع تغذیه 2.7 تا 5.5 ولتی از طریق شش پین ساده در عرض چند ثانیه برنامه ریزی شود یا Program شود.
میکروهای AVR در هرجا که باشند با 1.8 ولت تا 5.5 ولت تغذیه می شوند البته با انواع توان پایین (Low Power)که موجودند.
راه حلهایی که AVR پیش پای شما می گذارد، برای یافتن نیازهای شما مناسب است:
با داشتن تنوعی باور نکردنی و اختیارات فراوان در کارایی محصولات AVR، آنها به عنوان محصولاتی که همیشه در رقابت ها پیروز هستند شناخته شدند.در همه محصولات AVR مجموعه ی دستورالعملها و معماری یکسان هستند بنابراین زمانی که حجم کدهای دستورالعمل شما که قرار است در میکرو دانلود شود به دلایلی افزایش یابد یعنی بیشتر از گنجایش میکرویی که شما در نظر گرفته اید شود می توانید از همان کدها استفاده کنید و در عوض آن را در یک میکروی با گنجایش بالاتر دانلود کنید.
توان مصرفی پایین:
موازی یا Parallel :
خود برنامه ریزی توسط هر اتصال فیزیکی:
ISP:
واسطه JTAG :
زبانهای سطح بالا یا همان 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 بیتی استفاده شوند.
زبانهای سطح بالا یا همان 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 بیتی استفاده شوند
ساده ترين معماري ميكرو كنترلر، متشكل از يك ريز پردازنده، حافظه و درگاه ورودي/خروجي است. ريز پردازنده نيز متشكل از واحد پردازش مركز (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 اين گونه ميكرو كنترلرها را مي توان به صورت ورودي و يا خروجي مورد استفاده قرار داد . معمولاً ، اين گونه خطوط خروجي ، به همراه مقاومتهاي بالا كش بيروني به كار برده مي شوند.
به نام خدا
ميكروكنترلرهاي خانواده 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)
قبل از شروع این بحث بهتر است آشنایي مختصري با تئوري موسیقي پیدا کنید.اجزاي یک ملودي نتها هستند.هر نت در واقع يک فرکانس یا يک باند فرکانسي است.مثلا طبق استاندارد جهاني نت لا ازپايينترین اکتاو (Octave)، با فرکانس 440HZ نواخته می شود.نتها در اکتاوها متوالیا تکرار می شوند.اما فرق یک نت در یک اکتاوتا اکتاودیگر چیست؟تفاوت دربمی وزیری صداست.درواقــــع صدای نتهـــــای واقع در اکتــاوهای بالاتر، زیرترمی شود.
فرکانس نتهای موسیقی را می توان طبق رابطه زیر به دست آورد.
fx=fbase * 2 ^(n/12)
در رابطه بالا fbase فرکانس یک نت معلوم است.مثلا نت لا که قبلا گفته شد وn فاصله کلید مجهول از کلید معلوم رو به بالاست.مثلا فرکانس نت سی از همان اکتاو،طبق زیر به دست می آید.
fsi=440*2^(2/12)=494HZ
حال شما می توانید با تولید فرکانسهای متناظر نتها به وسیله یک میکروکنترلر،موسیقی دلخواه خود را اجرا کنید.در واقع میکروکنترلر شما باید برای هر نت یک موج مربعی با فرکانس آن نت و مدت زمان کشش آن نت روی یک پین خود تولید کند.ساختن موج مربعی با میکروکنترلر کار ساده ایست.همچنین می توانید فرکانس یا پرید نتها یا عددی متناسب با آنها را به عنوان اعدادی ثابت در یک آرایه ذخیره کنید تا متناسب با هر نت آنها را از جدول استخراج کنید.
برای شروع کار می توانيد مثال زير را دانلود کنيد.
Download : AVR-Music.zip
میکرو کنترلر در اصطلاح به ریز پردازنده هایی گفته می شود که بجز 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- کنترل پیچش تصویر
اول الکتریسیته نبود، یعنی بود ولی آدم نمی دیدش! گاهی وقتا رعد و برق رو تو آسمون می دید ولی نمی دونست چیه! بعد که فهمید کهربا می تونه کاه رو جذب می کنه بازم نمی دونست چرا ولی فلاسفه یونان باستان می گفتند کهربا روح داره که می تونه چیزی رو حرکت بده! خب بیچاره ها حق هم داشتند شاید اگه ماکسول هم اون موقع زندگی می کرد همین حرف رو میزد! بعد که یه دو سه هزار سالی گذشت تا یه بابایی به اسم گیلبرت اومد گفت نه بابا این به خاطر اینه که کهربا در اثر اصطکاک با بعضی از مواد می تونه باردار بشه و خرده کاه رو جذب کنن. تا اینجا هیچ خبری از بار متحرک نبود و فقط بار ساکن مورد توجه بود تا اینکه تو اوائل قرن هجدهم بنجامین فرانکلین گفت الکتریسیته می تونه جاری بشه و در اینجا بود که مدار الکتریکی متولد شد چون ذره ی باردار فقط تو مسیر بسته می تونه دور بزنه. حدود صد سال بعد در سال 1831 مایکل فارادی تئوری تولید جریان الکتریکی بوسیله ی تغییر میدان مغناطیسی رو ارائه کرد و چند سال بعد ژنراتورها ساخته شدند. از همین جا بود که بشر تصمیم گرفت الکترون ها رو به شکلهای مختلف تو مسیرهای مختلف (مدار) به گردش دربیاره و همش تقصیر فارادی بود !!!!
تا اینجا هم تا پنجاه شصت سال همه چیز به خوبی و خوشی! پیش می رفت ولی در اواخر صده ی نوزدهم بود که یک روز آقای ادیسون لامپ خلا رو کشف کردند و دانش الکترونیک متولد شد. این اختراع مفید به سرعت منجر به ساخت تقویت کننده و فرستنده های رادیویی شد. بازهم تا چهل پنجاه سال مهندسان الکترونیک سرشون به لامپ های خلا گرم بود و برای خودشون با این لامپ ها انواع و اقسام مدارات آنالوگ و دیجیتال از آمپلی فایر صوتی گرفته تا ماشین حساب های بزرگ و کامپیوتر رو ساخته بودند. اولین کامپیوترشون انیاک (ENIAC) بود با 30.000 تا لامپ و به اندازه یک ساختمان چند طبقه که قدرتش از ماشین حساب های جیبی شما هم کمتر بود!
این دفعه یه اتفاقی افتاد که تقصیر آزمایشگاه های بل بود که نیمه هادی ها رو به جون هم انداخت و ترانزیستور و دیود و ترایاک و انواع المان های غیرخطی با تولد اولین المان فیزیک حالت جامد (ترانزیستور) اختراع شدند و دنیا برای مهندسان الکترونیک گلستان شد!! لامپ های داغ، شکننده، گران، پرمصرف، حجیم و کم انعطاف جاشون رو به یک سوگلی سه پایه دادند که نه تنها داغ نمی شد و نمی شکست، خیلی کم مصرف و جمع و جور بود. تولد این جانور سه پا اولین انقلاب الکترونیک لقب گرفت ولی انقلاب اول زیاد دوام نداشت چون 10-15 سال بعد از اون دومین انقلاب که اختراع مدار مجتمع (IC) بود صورت گرفت. مدارهایی که قبلا یک بار با لامپ طراحی شده بودند و یک بار با ترانزیستور باز طراحی شدند این بار روی یک تراشه ی سیلیکونی به صورت یک بسته بندی وارد بازار شدند.
یک پرانتز برای جمله ی آخر:
همه ی مدارهایی که با عناصر گسسته ساخته شده بودند بعد از اختراع IC به صورت مجتمع ساخته نشدند چون اولا سیستم های کاربردی انقدر متنوعند که امکان تولید همه ی آن ها به صورت Package وجود ندارد و ثانیا گاهی ما نیاز به مداری داریم که فقط برای خودمان قابل استفاده است و بنابراین تا حد امکان مدارات مجتمع با کاربرد چند منظوره و به عنوان المان های اساسی تولید شدند و از آن ها در طراحی سیستم های مورد نیاز استفاده شد.
پرانتز بسته!
یه روز یه بابایی اومد گفت حالا که من برای طراحی یک سیستم باید از این همه المان استفاده کنم چقدر خوب می شد اگه یه المان داشتم که این سیستم رو توش جا می دادم!
خب با اینکه المان ها خیلی هاشون به صورت مجتمع و بسته تولید شده بودند ولی بازم این بابا حق داشت!! خب یه وقت می خواست یه مدار کنترلی طراحی کنه باید از چند ده جین المان استفاده می کرد. پس یه بابای دیگه حرفشو گوش کرد و یه المان براش ساخت که باهاش هرکاری که می خواست می تونست بکنه. اسم اون المان میکروکنترلر بود.
ولی میکروکنترلر خام بود باید بهش می گفت که ازش چی می خواد. این کار رو برنامه نویسی برای میکروکنترلر انجام داد و به این ترتیب بود که این المان انقدر محبوب شد که هنوز چیزی جانشین اش نشده و همچنان بعد از حل بسیاری از مسائل به دنبال مسائلی برای حل می گردد ...
به توضیح تک به تک قسمتها میپردازیم :
۱:در قسمت معرفی آی سی از کلمه کلیدی $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
تایمر ها از اجزاء پر کاربرد پروژه های 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 مقدار 9Bh را در TH قرار می دادیم نیز نتیجه فرقی نمی کرد.
در این مثال فرقی نمی کند که از کدام تایمر استفاده کنیم .در حقیقت تایمر ها هیچ تفاوتی با هم ندارند .
|
Mov TMOD,#00100000b |
همانطور که مشاهده می کنید قبل از پایان دور دوم شمارش مقدار TF باید صفر شود.
منبع:دانشگاه کردستان
از اوايل دهه هشتاد كارخانجات ساخت مدارهاي مجتمع به طراحي و توليد پردازنده هائي با كاربرد هاي خاص نمودند. يكي از اين محصولات كه در سالهاي اخير مصرف بسيار زيادي پيدا كرده است ميكروكنترلر ها مي باشند.
با ساخت ميكرو كنترلرها تحول شگرفي در ساخت تجهيزات الكترونيكي نظير لوازم خانگي، صنعتي، پزشكي ، تجاري و ... به وجود آمده است كه بدون آن تصورتجهيزات و وسايل پيشرفته امروز غير ممكن است. به عنوان مثال مي توان از ربات ها ، تلفن همراه و انواع سيستم هاي اتوماسيون نظير وانواع وسايل ديجيتالي مدرن ديگر نام برد.
علل پيدايش :
از آنجايي كه در مصارف صنعتي و ... جهت كنترل ماشينهاي صنعتي و... كنترل فرآيند معمولاً با ارسال فرمانهاي مختلف و دريافت اطلاعات از قسمتهاي مختلف، اندازه گيري زمان ، شمارنده ، مبدل آنالوگ به ديجيتال(3) و بالعكس ، ارسال و دريافت اطلاعات به صورت سريال و موازي و ... نياز مي باشدCPU ، شركتهاي ساخت قطعات الكترونيكي درصدد آن برآمدند تا با ساخت سيستمي يكپارچه همراه با يك قدرتمند تمامي امكانات فوق را دربر داشته باشد.
شركتهاي توليد كننده :
ازجمله شركتهايي كه در اين زمينه فعاليت داشته اند : شركت اينتل با سري چيپهاي AT8050,8051,8052,...، شركت زايلوگ باسري چيپهاي Z8601,8602,8603,...و شركت موتورولا با سري چيپهاي 6811A1,A2,...را مي توان نام برد. شركتهاي ديگري مانند هيتاچي و ... در اين زمينه توليداتي داشته اند ولي عمده ترين توليدكنندگان ميكروكنترلر كه به صورت حرفه اي عمل نموده اند سه شركت فوق مي باشند
تا حالا فکر کردین AVR رو به مانیتور وصل کنین؟ چه قدر خوب می شه نه؟ اگه دیگه خروجی ویدیو هم داشته باشه که دیگه حرف نداره نه؟ ولی نمی ارزه حتما خیلی پیچیده می شه ولی تعجب نکنین اگه بگم چند تا مقاومت می خواد ادامه رو ببینین
این یه کارت گرافیک که می تونه متن رو از طریق پورت سریالش در یافت کنه و به خروجی VGA یا ویدئو ارسال کنه برنامش رو هم می تونید روی ATMega16 ، 32 یا میکرو های مشابه اجرا کنید.
خود برنامه به زبان C نوشته شده و باید با GCC اجراش کنید (مقاله AVR GCC رو ببینین http://www.iranled.com/modules.php?name=News&file=article&sid=41 )
نقشه خیلی ساده ای هم داره توی فایل می تونید کل سورس نقشه و ... رو پیدا کنید
این یه PDF آموزشی برای AVRStudio
AVR Studio یک نرم افزار رایگان برای دیباگ کردن نوشتن برنامه اسمبلی برای AVR های شرکت Atmel است که می توانید آنرا از سایت این شرکت (www.atmel.com) در یافت کنید
آخرین ورژن AVR Studio در هنگام نوشتن این مقاله 4 است از این نرم افزار به غیر از دیباگ کردن برنامه های اسمبلی می توانید برای دیباگ کردن کد های کمپایل شده را نیز استفاده کنید و به عنوان دیباگ برای نرم افزار های که فرمتهای COFF را مانند Codevision پشتیبانی می کنند استفاده کنید(از ورژن 4.06 به بعد) با این روش می توانید برنامه نوشته شده ب