بایگانی برچسب برای: پردازش تصویر

مقدمه

فراتفکیک پذیری (Super resolution)- سیستم‌های تصویربرداری دیجیتال به دلیل راحتی کاربرد و هزینه مناسب بطور چشمگیری گسترش یافته‌اند، اما هنوز به دلیل پائین بودن رزولوشن (تفکیک پذیری یا وضوح تصویری) نسبت به سیستم‌های تصویر برداری پیشین (سیستم‌های نوری)، دچار ضعف می‌باشند. تلاش‌های بسیاری جهت افزایش رزولوشن تصاویر دیجیتالی صورت گرفته که به دو بخش کلی نرم‌افزاری و سخت‌افزاری قابل تقسیم بندی می‌باشند.

در بخش سخت‌افزاری با هرچه غنی تر نمودن تعداد پیکسل‌های موجود بر روی حسگرهای دوربین‌های دیجیتالی در واحد سطح، می‌توان درجه تفکیک تصویر را افزایش داد. بعلاوه، با هرچه کوچکتر نمودن سلول‌های حسگرهای دوربین‌های دیجیتالی، مقدار نور مؤثر دریافت شده توسط هر سلول، کاهش می‌یابد؛ البته می‌توان با ایجاد شبکه‌ای از عدسی‌های محدب بر روی لایه فوقانی سلول‌های حسگر، مقدار نور مؤثر دریافتی توسط هر سلول حسگر را افرایش داد. لیکن به دلیل وجود تعداد بسیار زیاد سلول‌های حسگر، نویز ضربه ای ناشی از قطع و وصل جریان در درون این شبکه سلولی، همچنان وجود داشته و عامل مؤثری جهت کاهش کیفیت تصویر نهایی می‌گردد.

بنابراین روش سخت‌افزاری جهت رسیدن به تصاویری با کیفیت و رزولوشن بالاتر، بسیار پرهزینه و عملاً تا حدی غیر ممکن می‌باشد و معمولاً نمی‌توان از حد معینی، بدلیل محدودیت‌های تکنیکی موجود در تکنولوژی ساخت مدارات مجتمع، فراتر رفت.

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

 

فراتفکیک پذیری

این تکنیک از لحاظ نامگذاری بدلیل آنکه قادر خواهیم بود از محدوده توانایی سیستم تصویر برداری فراتر رویم، فرا تفکیک پذیری نامیده می‌شود؛ در این تکنیک تلفیق چندین تصویر با رزولوشن پائین تر باعث تولید تصویر نهایی با رزولوشن بالاتر می‌گردد. نکته کلیدی در این تکنیک، استفاده از در هم آمیختگی می‌باشد زیرا که هر تصویر برداشت شده از صحنه مورد نظر تنها بخشی از اطلاعات فرکانس بالای صحنه را دریافت نموده‌است و این اطلاعات فرکانس بالا در تمام تصاویر پخش شده‌است، بنابراین می‌توان از این اطلاعات توزیع شده استفاده نمود و تصویری با رزولوشن و کیفیت بالاتر ایجاد نمود. مطالعات انجام شده نشان می‌دهد که پدیده در هم آمیختگی به دلیل محدود بودن تعداد پیکسل هایِ حسگر هایِ دوربین هایِ دیجیتالی می‌باشد.
فراتفکیک پذیری، چرا و چه وقت ممکن می‌باشد؟ [ویرایش]

سوال بنیادی این می‌باشد که چه عاملی فراتفکیک پذیری را ممکن می‌سازد. این پرسش را توسط مثالی که در ادامه بدان خواهیم پرداخت، توضیح خواهیم داد؛ چنانچه حسگر دوربینی با ابعاد ۴*۴ از صحنه خاصی تصویر برداری نماید، با افزایش تعداد سلول‌های حسگر دوربین به تعداد ۱۶*۱۶، تصویر برداشت شده دارای رزولوشن بیشتری خواهد بود. حال اگر توسط همان حسگر چهار تصویر از یک صحنه یکسان برداشت نمائیم که اختلاف آنها در حد مقداری صحیح از واحد پیکسل باشد، فراتفکیک پذیری ممکن نخواهد بود، ولی چنانچه چهار تصویر دریافتی اختلافی در حد کسری از واحد پیکسل داشته باشند، فراتفکیک پذیری ممکن می‌گردد؛ زیرا که اختلاف چهار تصویر فوق در حد کسری از واحد پیکسل، اطلاعات اضافه‌ای را از صحنه برداشت شده ایجاب می‌کند که پتانسیل افزایش رزولوشن را تقویت می‌نماید.

 

پیکربندی تکنیک فراتفکیک پذیری

اکثر روش‌های فراتفکیک پذیری را می‌توان به دو بخش تقسیم نمود: بخش ثبت تصویر Image Registration و بخش بازسازی تصویر Image Reconstruction. دقت بسیار بالایی در بخش ثبت تصویر لازم است (در حد کسری از واحد پیکسل) تا بتوان در بخش بازسازی، تصویری با رزولوشن بالا را بطور صحیح ایجاد نمود. اگر پارامترهای ثبت تصویر بطور غلط تخمین زده شده باشند، معمولاً بهتر است که یکی از تصاویر را توسط روش‌های درونیابی به اندازه مطلوب تغییر دهیم، تا اینکه اطلاعات چندین تصویر را بطور غلط، با یکدیگر تلفیق نمائیم.

پس از آنکه تصاویر ثبت شدند، جهت بدست آوردن تصویری با رزولوشن بالا از نمونه‌های نمونه برداری شده بصورت غیریکنواخت، یک روش بازسازی تاثیر ناپذیر از نویز (Robust)، لازم می‌باشد. بخش اصلی تر، بخش ثبت تصویر می‌باشد که در تکنیک فراتفکیک پذیری از اهمیت بالایی برخوردار می‌باشد، زیرا که در این بخش تفاوت اصلی میان درونیابی و تکنیک فراتفکیک پذیری بطور آشکار مشخص می‌شود.

[عکس: Super-resolution_example_closeup.png]ت
تصویر سمت چپ تصویر اصلی و تصویر سمت راست تصویر بعد از فراتفکیک‌پذیری است

 

چرا دوربین‌ها 29.97 فریم بر ثانیه فیلم‌برداری می‌کنند و نه 30 فریم؟

چرا در جزییات فنی فیلم‌برداری در بخش فریم ریت به جای عدد ۳۰ فریم، عدد29.97 فریم بر ثانیه فیلم‌برداری ذکر می‌شود؟ احتمالاً اگر در بررسی مشخصات ویدیویی خیلی از دوربین‌ها از دوربین‌های موبایل گرفته تا دوربین‌های فیلم‌برداری، نکته‌سنج بوده باشید این سؤال در ذهن شما هم شکل گرفته باشد. هر چند که می‌توان این مطلب را به صورت فنی تشریح کرد ولی در ادامه سعی شده است تا با بیانی ساده آن را موردبررسی قرار دهیم.در ابتدا بهتر است ، کمی راجع به فریم ریت توضیح بدهیم. فریم ریت یا در اصل همان فریم در ثانیه به نرخ تصویری اشاره دارد که به صورت متوالی و پشت سر هم توسط یک دستگاه تولید می‌شود.

واحد اندازه‌گیری فریم،FPS یا همان فریم در ثانیه است. برای همین وقتی در مشخصات فیلم‌برداری دوربین عدد ۲۹٫۹۷ درج می‌شود این عدد معادل تعداد فریم هایی است که آن دوربین در عرض یک ثانیه ثبت می‌کند. حتی در دوربین‌های پیشرفته‌تر که به ادعای شرکت سازنده می‌توانند تصاویر را با فریم ریت 60 fps رکورد کنند در ۹۹ درصد مواقع در هر دو حالت DF و NDF به صورت دقیق با فریم ریت ۵۹.۹۴ فریم بر ثانیه تصاویر را ضبط می‌کند. با این تفاسیر چرا این عدد دقیقاً ۳۰ یا ۶۰ فریم در ثانیه نیست؟

مروری بر گذشته

در زمان معرفی اولین تلویزیون‌های سیاه و سفید NTSC فریم ریت دقیقاً معادل ۳۰ فریم در ثانیه بود؛ اما رد پای عدد عجیب ۲۹٫۹۷ و (بعدها ۵۹.۹۴) فریم در ثانیه برای اولین بار با معرفی تلویزیون‌های رنگی پیدا شد. در زمان تولید این تلویزیون‌ها، مهندسان سازنده باید اطلاعات رنگ را نیز به سیگنال‌های تلویزیونی اضافه می‌کردند؛ اما به خاطر محدودیت پهنای باند تصمیم گرفتند که تا حد ناچیزی از فریم ریت تلویزیون بکاهند تا اطلاعات رنگ نیز بدون اینکه سیگنال‌های تلویزیونی دچار معایبی شوند در آن گنجانده شود.

 

 

این تصمیم از این جهت گرفته شد که عملاً چاره دیگری نبود، از نظر فنی امکان افزایش پهنای باند وجود نداشت؛ و افزایش تفکیک‌پذیری (بالا بردن تعداد خط‌های افقی) بدون افزایش پهنای باند درنهایت باعث افت تفکیک‌پذیری و کاهش کیفیت تصویر می‌شد. برای همین 29.97 فریم در ثانیه به فریم ریت استاندارد تلویزیون‌های رنگی NTSC تبدیل شد. دوربین‌های فیلم‌برداری امروزی هم به همان ترتیب به جای 30 فریم در واقع قابلیت ثبت 29.97 فریم در ثانیه را دارند. البته این تفاوت آن‌قدر ناچیز هست که در اصطلاح رایج به ذکر عدد 30 و 60 فریم در ثانیه اکتفا می‌شود.

 

 

از طرفی دیگر استاندارد تلویزیونی PAL کاملاً برای سازگاری با تلویزیون‌های رنگی در نظر گرفته شده است. در نتیجه بدون لطمه خوردن به تفکیک‌پذیری، از فریم ریتی مناسبی برخوردار است؛ بنابراین بستگی دارد که دوربین با چه استانداردی (PAL و NTSC) تصاویر را رکورد می‌کند.

 

 

Interpolation يا درون یابی

Interpolation يا درون یابی (كه گاهي resampling نيز ناميده ‌مي‌شود) يك روش گرافيكي براي افزايش يا كاهش تعداد پيكسل‌هاي يك تصوير ديجيتالي است. دوربين‌هاي ديجيتالي از اين روش براي زوم ديجيتال و يا افزايش مصنوعي ابعاد تصوير، نسبت به تصوير اصلي ثبت شده توسط حسگر خود استفاده مي‌كنند. كيفيت تصوير نهايي حاصل از درون‌يابي به پيچيدگي الگوريتم ساخت تصوير بستگي دارد. حالت‌هاي متفاوت درون‌يابي عبارتند است از:

Nearest Neighbor Interpolation

اين روش ساده‌ترين عمليات درون‌يابي محسوب مي‌شود كه اساساً پيكسل‌هاي بزرگ‌تري را ايجاد مي‌كند و رنگ هر پيكسل در تصوير جديد، با رنگ نزديك‌ترين پيكسل در تصوير اصلي مطابقت دارد. به عنوان مثال اگر شما يك تصوير را 200 درصد بزرگ كنيد، يك پيكسل تصوير به يك فضاي چهار پيكسلي (دو پيكسل در دو پيكسل) با رنگ پيكسل اوليه تبديل مي‌شود. بسياري از دوربين‌هاي ديجيتالي براي زوم‌كردن روي يك سوژه از اين روش استفاده مي‌كنند. زيرا اين روش هيچ تأثيري بر اطلاعات رنگي تصوير نمي‌گذارد. اصولاً بهتر است از اين روش براي افزايش ابعاد تصوير استفاده نشود. چرا كه موجب ايجاد حالت شطرنجي در تصوير مي‌گردد.

Bilinear Interpolation

اين روش ارزش يك پيكسل رنگي را براساس چهار پيكسل در جهت‌هاي عمودي و افقي پيكسل در تصوير اصلي معين‌مي‌كند. تصوير جديد داراي خاصيت Anti-aliasing است و تقريباً هيچ اثري از پيكسل‌هاي شطرنجي در آن ديده نمي‌شود.

Bicubic Interpolation

اين روش داراي پيچيده‌ترين الگوريتم درون‌يابي است و تصويري كه با اين روش به دست مي‌آيد، لبه‌هاي بسيارنرم‌تري پيدا مي‌كند. در اين حالت پيكسل جديد براساس ارزش تخميني 16 پيكسل (چهار پيكسل در چهار پيكسل) برآورد‌مي‌شود.

شايان ذكر است كه اغلب دوربين‌ها، چاپگرها و نرم‌افزارهاي گرافيكي براي تغيير تعداد پيكسل‌هاي يك تصوير از اين روش استفاده مي‌كنند.
نرم‌افزار Photoshop CS دو نوع Sharper و Smoother اين درون‌يابي را نيز ارائه مي‌دهد.

Fractal Interpolation

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

جزوه پردازش تصویر با متلب (Matlab)_ دانشگاه پیام نور

پردازش تصاویر امروزه بیشتر به موضوع پردازش تصویر دیجیتال گفته می‌شود که شاخه‌ای از دانش رایانه است که با پردازش سیگنال دیجیتال که نماینده تصاویر برداشته شده با دوربین دیجیتال یا پویش شده توسط پویشگر هستند سر و کار دارد.

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

‫این جزوه گه توسط گروه رباتیک دانشگاه پیام نور قم به صورت تایپ شده گردآوری شده است شامل آموزش پردازش تصویر با متلب است.

لینک دانلود: جزوه پردازش تصویر با متلب_ دانشگاه پیام نور

پسورد فایل: behsanandish.com

تعداد صفحات : 51

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

امیدوارم که مفید باشد

 

لگچرهای کتاب آقای گنزالس

تعداد فایل : 17 عدد

فرمت: pdf

زبان : انگلیسی

نویسنده: گنزالس

پسورد فایل: behsanandish.com

دانلود

 

______________________________________

 

مفاهیم پایه پردازش تصویر دانشگاه شهید بهشتی

تعداد صفحه: 109 صفحه

فرمت: pdf

زبان : فارسی

نویسنده: ‫احمد محمودی ازناوه‬

پسورد فایل: behsanandish.com

دانلود

فهرست مطالب:
‫• مقدمه اي بر پردازش تصوير‬
‫– كاربردهاي پردازش تصوير‬
‫• ساختار تصوير ديجيتال‬
‫• تصاوير رنگي‬
‫• حساسيت چشم‬
‫– تباين‬
‫• حسگرهاي تصوير‬
‫• آشنايي با ‪Matlab‬‬
‫• آشنايي با فضارنگها‬

 

______________________________________

 

 

بررسی سامانه های تشخیص خودکار پلاک خودرو

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

 

نویسنده: آقایان علی اوحدی و محسن امیدوار

تعداد صفحات : 42

کلیمه عبور فایل : behsanandish.com

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

شناسایی حروف توسط شبکه های عصبی

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

سوال : به نظر میرسه باید توی مثال هامون به کامپیوتر بگیم مثلا این A هست و این B هست!
جواب : اون هم نوعی یادگیری هست که بهش اصطلاحا Supervised می گن. اما توی این مثال حالت جالب تر یعنی Unsupervised رو می خوایم بررسی کنیم. به این صورت که فقط به کامپیوتر می گیم ۳ دسته وجود داره و براش چندین مثال می زنیم و خودش مثال ها رو توی ۳ دسته قرار می ده! در نهایت ما مثلا می تونیم بگیم همه ی مثال هایی که در دسته ی دوم قرار گرفتن A هستند.
شاید جالب باشه بدونید گوگل هم برای دسته بندی اطلاعات از همچین روشی استفاده می کنه! البته کمی پیشرفته تر. مثلا ۱۰۰ متن اقتصادی و ۱۰۰ متن ورزشی به کامپیوتر میده و از کامپیوتر می خواد اونها رو به ۲ بخش تقسیم بندی بکنه! ورودی لغت های اون متن ها هستند. “

ابزار مورد نیاز
برای این که شروع کنیم به چند مورد نیاز داریم:

  1. در مورد هوش مصنوعی و شبکه های عصبی یکم اطلاعات داشته باشید.
  2. برنامه ای برای تولید الگو که ورودی شبکه ی عصبی ما خواهد بود. این برنامه رو میتونید از اینجا تهیه کنید.
  3. نرم افزار JOONE Editor. عبارت JOONE مخفف Java Object Oriented Neural Engine هست. که یک ابزار قدرت مند برای بوجود آوردن و آموزش انواع شبکه های عصبی در Java هست. توی این آموزش ما از ویرایشگر این ابزار استفاده می کنیم که محیطی گرافیکی برای تولید شبکه های عصبی داره و کار با اون بسیار ساده هست. این ابزار از اینجا قابل دریافت هست. بدیهیه که برای نصب این ابزار ابتدا باید جاوا روی کامپیوتر شما نصب باشه.
  4. کمی پشتکار و حوصله.

لینک جایگزین برای دانلود JOONE Editor:
https://sourceforge.net/projects/joone/files/

حالا می خوایم یک سری الگو تولید کنیم. الگو همون مثال هایی هست که گفتیم برای کامپیوتر می زنیم تا بتونه یاد بگیره.
برای این کار از برنامه ای که در شماره ی ۲ ابزارها معرفی کردم استفاده می کنیم. این برنامه خیلی ساده کار می کنه و فقط الگو ها رو از حالت تصویری به ۰ و ۱ تبدیل می کنه.
روش کار به این صورت هست که اول تصویر رو به یک ماتریس ۸ در ۸ تقسیم می کنه. یعنی ۶۴ قسمت. وقتی دکمه ی سمت چپ ماوس پایینه در صورتی که ماوس از هر کدوم از اون ۶۴ بخش رد بشه اون بخش رو داخل ماتریس علامت گذاری می کنه (مقدار اون قسمت رو True می کنه). وقتی دکمه ی Learn زده می شه برنامه مقدار تمام قسمت ها رو از بالا به پایین داخل یک فایل ذخیره می کنه. مقدار هر قسمت می تونه ۰ یا False و ۱ یا True باشه. ”
در صورتی که سورس این برنامرو خواستید کافیه توی بخش نظرات بگید تا براتون میل کنم.
کار با این برنامه خیلی آسون هست همونطور که توی شکل مشخصه.

کافیه الگویی که دوست دارید رو داخل فضای سفید بکشید و دکمه ی Learn رو بزنید. Textbox پایینی برای تغییر دادن آدرس فایلی هست که اطلاعات توی اون ذخیره میشه. و Textbox بالایی برای اینه که بگید این الگو چه حرفی هست که توی این مطلب نیازی به پر کردن اون نیست چون ما بحثمون یادگیری Unsupervised هست. توی مطالب بعدی برای یادگیری Supervised به این فیلد نیاز خواهیم داشت.
خوب من برای اینکه مثال پیچیده نشه ۳ حرف رو می خوام به کامپیوتر یاد بدم. A و C و Z!
برای این کار برای هر کدوم از حروف چهار مثال وارد می کنم و دکمه ی Learn رو می زنم. توی شکل زیر می تونید هر ۱۲ الگو رو ببینید.

فایل خروجی مربوط به این الگوهای مثال از اینجا قابل دریافت هست.همونطور که می بینید هر ردیف به نظر من و شما عین هم هستند. اما اگر کمی بیشتر دقت کنیم می بینیم جای مربع های مشکی با هم فرق دارن. به نظر شما کامپیوتر هم خواهد فهمید هر ردیف نشاندهنده ی یک حرف مجزا هست؟
تشکیل شبکه ی عصبیخوب! حالا می خواهیم ساختار شبکه ی عصبی رو طراحی کنیم. برای این کار از JOONE Editor کمک می گیریم.
صفحه ی اول این نرم افزار به این شکل هست:

توی این مثال ما از یک لایه ی ورودی خطی ۶۴ نورونی استفاده می کنیم که هر نورون یک قسمت از ماتریسی که در بخش قبل گفتیم رو به عنوان ورودی می گیره. به عنوان خروجی هم از یک لایه ی ۳ نورونی WinnerTakeAll استفاده می کنیم. در این نوع خروجی یکی از نورون ها ۱ و بقیه ۰ خواهند بود که برای تقسیم بندی بسیار مناسب هست.

برای شروع ابتدا یک لایه ی FileInput ایجاد می کنیم. توسط این ابزار می تونیم یک فایل رو به عنوان ورودی به شبکه بدیم.
روی FileInput کلیک راست کرده و در Properties اون فایل درست شده در مرحله ی قبلی رو به عنوان fileName انتخاب می کنیم و به عنوان Advanced Column Selector مقدار 1-64 رو وارد می کنیم تا برنامه متوجه بشه باید از ستون های ۱ تا ۶۴ به عنوان ورودی استفاده کنه.

ایجاد یک لایه ی خطی:

مرحله ی بعدی ایجاد یک Linear Layer یا لایه ی خطی هست. بعد از ایجاد این لایه Properties اون باید به شکل زیر باشه:

همونطور که می بینید تعداد ردیف ها ۶۴ مقداردهی شده که دلیلش این هست که ۶۴ ورودی داریم.
حالا با انتخاب FileInput و کشیدن نقطه ی آبی رنگ سمت راست اون روی Linear Layer خروجی FileInput یعنی اطلاعات فایل رو به عنوان ورودی Linear Layer انتخاب می کنیم.
تا این لحظه ما یک لایه ی ۶۴ نورونه داریم که ورودی اون مقادیر مثال های تولید شده در مرحله ی قبل هست.

ایجاد لایه ی WinnerTakeAll :

خوب توی این مرحله لایه ی خروجی که یک لایه ی WinnerTakeAll هست رو تولید می کنیم. Properties این لایه باید به شکل زیر تغییر پیدا کنه تا اطمینان پیدا کنیم الگوها به سه دسته تقسیم میشن:

حالا باید بین لایه ی خطی و لایه ی WinnerTakeAll ارتباط برقرار کنیم. برای این کار باید از Kohonen Synapse استفاده کنیم و Full Synapse جواب نخواهد داد. پس روی دکمه ی Kohonen Synapse کلیک کرده و بین لایه ی خطی و لایه ی WinnerTakeAll ارتباط ایجاد می کنیم.
در آموزش های بعدی فرق انواع سیناپس ها رو بررسی خواهیم کرد.آموزش شبکه

تا این لحظه شبکه باید به این شکل باشه. حالا می تونیم آموزش شبکرو شروع کنیم. برای این کار در منوی Tools بخش Control Panel رو انتخاب می کنیم. و در صفحه ی جدید learningRating و epochs و training pattern و learning رو به شکل زیر تغییر می دیم.

epochs تعداد دفعاتی که مرحله ی آموزش تکرار میشرو تعیین می کنه.
learningRate ضریبی هست که در یادگیری از اون استفاده می شه. بزرگ بودن اون باعث میشه میزان تغییر وزن نورون ها در هر مرحله بیشتر بشه و سرعت رسیدن به حالت مطلوب رو زیاد می کنه اما اگر مقدار اون خیلی زیاد شه شبکه واگرا خواهد شد.
training patterns هم تعداد الگو هایی که برای آموزش استفاده می شن رو نشون می ده که در این مثال ۱۲ عدد بود.
بعد از اینکه تمام تغییرات رو ایجاد کردیم دکمه ی Run رو می زنیم و منتظر می شیم تا ۱۰۰۰۰ بار عملیات یادگیری انجام بشه.

تبریک می گم! شما الان به کامپیوتر سه حرف A و C و Z رو یاد دادید!
اما خوب حالا باید ببینید کامپیوتر واقعا یاد گرفته یا نه.
برای این کار از یک لایه ی FileOutput استفاده می کنیم تا خروجی شبکرو داخل یک فایل ذخیره کنیم.
Properties لایه ی FileOutput باید بصورت زیر باشه:

همونطور که می بینید به عنوان fileName مقدار c:\output.txt رو دادیم. یعنی خروجی شبکه در این فایل ذخیره میشه.
حالا کافیه لایه ی WinnerTakeAll رو به لایه ی FileOutput متصل کنیم.
بعد از متصل کردن این دو لایه شکل کلی باید بصورت زیر باشه:

برای اینکه فایل خروجی ساخته بشه باید یک بار این شبکرو اجرا کنیم. برای این کار مجددا در منوی Tools بخش Control Panel رو انتخاب می کنیم و در اون learning رو False و epochs رو ۱ می کنیم تا شبکه فقط یک بار اجرا شه. پس از تغییرات این صفحه باید به شکل زیر باشه:

حالا با توجه به اینکه من اول چهار مثال A رو وارد کردم و بعد به ترتیب چهار مثال C و چهار مثال Z رو ببینیم خروجی این شبکه به چه شکل شده.
باور کردنی نیست! خروجی به این شکل در اومده:

1.0;0.0;0.0
1.0;0.0;0.0
1.0;0.0;0.0
1.0;0.0;0.0
0.0;1.0;0.0
0.0;1.0;0.0
0.0;1.0;0.0
0.0;1.0;0.0
0.0;0.0;1.0
0.0;0.0;1.0
0.0;0.0;1.0
0.0;0.0;1.0

همونطور که می بینید ۴ خط اول که مربوط به A هستن ستون اولشون ۱ هست و در چهار خط دوم ستون دوم و در چهار خط سوم ستون سوم!
این یعنی کامپیوتر بدون اینکه کسی به اون بگه کدوم مثال ها کدوم حرف هست خودش فهمیده و اون ها رو دسته بندی کرده.
سوال :  ممکنه چون پشت هم دادید مثال هر حرف رو اینطوری نشده؟
جواب : نه! کامپیوتر که نمی دونسته من می خوام مثال های هر حرف رو پشت سر هم بدم! من برای راحتی خودم این کار رو کردم. شما می تونی ورودی هاتو غیر مرتب بدی!
سوال : دلیل خاصی داره که در A ستون اول ۱ هست و …
جواب : نه! ممکن بود برای A ستون دوم ۱ بشه و یا هر حالت دیگه. شما اگر امتحان کنید ممکنه تفاوت پیدا کنه. اما مهم اینه در تمام A ها یک ستون خاص مقدارش ۱ و بقیه ی ستون ها مقدارشون صفر می شه. پس یعنی کامپیوتر تونسته به خوبی تقسیم بندی کنه.

حالا می خوایم شبکرو با سه مثال جدید تست کنیم که در مثال های آموزشی نبوده! برای این کار من با استفاده از برنامه ی تولید الگو ۳ مثال جدید درست می کنم و به عنوان فایل ورودی در شبکه فایل جدید رو انتخاب می کنم.
توی شکل زیر سه مثال جدید رو می تونید ببینید:

برای جذابیت علاوه بر این سه مثال ۲ مثال دیگه هم که حروف خاصی نیستند گذاشتم!

فایل خروجی این مثال ها از اینجا قابل دریافت هست.

خوب حالا بگذارید ببینیم کامپیوتر چه جوابی می ده. با توجه به اینکه اول مثال C بعد مثال Z و بعد مثال A رو وارد کردم. دو مثال بعدی هم به ترتیب مثال بد خط سمت چپ و مثال بد خط سمت راست هستند. و اما جواب:

0.0;1.0;0.0
0.0;0.0;1.0
1.0;0.0;0.0
0.0;0.0;1.0
0.0;1.0;0.0

کامپیوتر سه مورد اول رو به خوبی C و Z و A تشخیص داده. و دو مورد بد خط هم به ترتیب از چپ به راست Z و C تشخیص داده!
حتی برای انسان هم سخته فهمیدن اینکه مورد های چهارم و پنجم چی هستند اما اگر خوب دقت کنید می بینید به مواردی که کامپیوتر خروجی داده نزدیک تر هستند.
کامپیوتر شعور نداره! اما ما سعی کردیم طریقه ی عملکرد مغز رو به صورت خیلی ابتدایی و به ساده ترین نحو توش شبیه سازی کنیم! ”
تو  این مطلب دیدیم که کامپیوتر تونست بدون اینکه ما براش مثال هایی بزنیم و بگیم هر کدوم چه حرفی هستند و فقط با دادن تعداد دسته ها، مثال ها رو به سه دسته همونطوری که انسان ها تقسیم می کنند تقسیم کنه. همونطور که گفتیم به این نوع دسته بندی، دسته بندی Unsupervised میگن.
منبع

ویژگی‌های جدید در سی شارپ  ۳٫۰

این ورژن از سی شارپ در تاریخ ۱۹ نوامبر سال ۲۰۰۷ به عنوان بخشی از چارچوب دات‌نت ۳٫۵ عرضه شد؛ که شامل ویژگی‌های جدید الهام شده از زبان‌های برنامه‌نویسی اصلی (Functional) مانند Haskell و ML، و الگوی LINQ برای CLR است. در حال حاضر توسط هیچ موسسه استانداردسازی تأیید نشده‌است.

معرفی لینک

لینک (به انگلیسی: Language Integrated Query)(مخفف انگلیسی: LINQ) یک زبان پرس و جوی قابل انعطاف و همه منظوره برای بسیاری از انواع منبع داده‌ها است (مثل انتخاب اشیاء شناور، سندهای XML، بانک‌های اطلاعاتی و…) که در ویژگی‌های سی شارپ ۳ جمع شده‌اند. سینتکس زبان به زحمت از SQL گرفته شده‌است، برای مثال:

int[] array = { 1, 5, 2, 10, 7 };

// Select squares of all odd numbers in the array sorted in descending order
IEnumerable<int> query = from x in array
                         where x % 2 == 1
                         orderby x descending
                         select x * x;

مقدار دهی به اشیاء

Customer c = new Customer(); c.Name = "James";

عبارت بالا می‌تواند به صورت زیر نوشته شود:

Customer c = new Customer { Name="James" };

مقدار دهی Collection

MyList list = new MyList();
list.Add(1);
list.Add(2);

عبارت بالا می‌تواند به صورت زیر نوشته شود:

MyList list = new MyList { 1, 2 };

فرض کنید که اجزای MyList و System.Collections.IEnumerable دارای متد عمومی Add هستند.

انواع داده‌ای بی نام

var x = new { FirstName="James", LastName="Frank" };

سی شارپ ۲٫۰ توابع بی نام را معرفی کرد. سی شارپ ۳٫۰ هم انواع بی نام را معرفی می‌کند. با استفاده از این ویژگی برنامه نویسان قادر خواهند بود به صورت Inline انواع دلخواه خود را ایجاد کنند. به نمونه زیر توجه کنید:

static void Main(string[] args)
{
    var anonymousType = new { Name = string.Empty, Age = 0 };
}

کد ارائه شده، یک نوع بی نام را تعریف می‌کند که از طریق متغیر ضمنی محلی به نام anonymousType در اختیار قرار می‌گیرد.

چرا Anonymous types؟ انواع بی نام بهترین گزینه برای تولید Entity Typeها می‌باشند. همان‌طور که گفته شد Entity Typeها فقط حاوی داده‌ها هستند؛ بنابراین به بهترین نحو می‌توان داده‌های دریافت شده از کاربر را در انواع بی نام بسته‌بندی کرد.

نتیجه نوع متغیر محلی

var x = new Dictionary < string, List < float >> ();

کد بالا با کد زیر قابل تعویض می‌باشد:

Dictionary < string, List < float >> x = new Dictionary < string, List < float >> ();

این ویژگی تنها یک ntactic sugarراحت برای کوتاه‌تر بیان کردن متغیرهای محلی نمی‌باشد، بلکه برای تعریف متغیرهای بی نام لازم نیز است.

عبارات لامبدا

عبارات لامبدا یک راه کوتاه برای نوشتن مقادیر توابع بی نام کلاس اول را فراهم می‌کنند. دو مثال زیر را در نظر بگیرید:

listOfFoo.Where(delegate(Foo x) { return x.Size > 10; })
listOfFoo.Where(x = > x.Size > 10);

در مثال‌های فوق، عبارات لامبدا صرفاً یک نوع سینتکس برای delegateهای بی نام با مقادیر دارای بازگشت هستند. هر چند با توجه به نوع متن استفاده می‌شوند، کامپایلر سی شارپ می‌تواند لامبداها را به ASTها نیز تبدیل کند تا بعداً در زمان اجرا نیز بتوانند پردازش شوند. در مثال فوق، اگر listOfFoo یک مجموعه ساده داخل حافظه نباشد، ولی یک پوشه در اطراف جدول بانک اطلاعاتیمی‌باشد. این تکنیک می‌تواند برای بهینه کردن اجرا، برای ترجمه بدنه لامبدا به عبارت معادل آن در SQL استفاده شود. در هر یک از دو راه فوق، خود عبارت لامبدا دقیقاً شبیه کد به نظر می‌رسد، بنابراین روش استفاده در زمان اجرا، برای کاربر ناپیدا می‌باشد.

یکی از ویژگی‌هایی که سی شارپ ۲٫۰ ارائه کرد، توانایی تعریف توابع به صورت Inline بود که این ویژگی با عنوان توابع بی نام (anonymous methods) شناخته می‌شود. توابع بی نام در پاره‌ای مواقع بسیار مفیدند. اما نحو(syntax) به‌کارگیری آن‌ها دشوار می‌باشد. عبارات لامبدا ویژگی توابع بی نام را دارند اما با نحو ساده‌تری در سی شارپ ۳٫۰ معرفی شده‌اند. به نمونه زیر توجه کنید:

static void Main(string[] args)
{
   (int x) = > x + 1;// explicitly typed parameter
   (y, z) = > y * z;// implicitly typed parameter
}

تعریف عبارات لامبدا از نحو (syntax) خاصی پیرو می‌کند. همان‌طور که در کد بالا مشاهده می‌کنید، پارامترهای تابع هم به صورت صریح و هم به صورت ضمنی قابل بیان‌اند. کلمه return به صورت ضمنی حذف شده‌است. تابع معادل عبارت لامبدای اول به صورت زیر است:

int Fn(int x)
{
    return x+1;
}

لیست پارامترها و بدنه عبارت لامبدا توسط => از هم جدا می‌شوند. در صورتی که تعریف عبارت لامبدا بیشتر از یک خط کد باشد می‌توان بدنه آن را با استفاده از {} نشان داد.

static void Main(string[] args)
{
    (int x) = > { x + 1; return x * x; };
}

خواص خودکار

کامپایلر به‌طور خودکار یک متغیر نمونه خصوصی و قرار دهنده و قرار گیرنده مناسب تولید می‌کند، مانند:

public string Name { get; private set; }

توابع بسط داده شده

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

public static class StringExtensions
{
    public static string Left(this string s, int n)
    {
        return s.Substring(0, n);
    }
}

string s = "foo";
s.Left(3);// same as StringExtensions.Left(s, 3);

زبان سی شارپ کلمه کلیدی sealed را برای این منظور ارائه کرد که امکان ارث بری از یک کلاس را صلب کند. یعنی با اضافه شدن این کلمه کلیدی به ابتدای تعریف کلاس، امکان ارث بری از آن غیرممکن می‌شود. سی شارپ ۳٫۰ ویژگی جدیدی را در اختیار برنامه نویسان قرار می‌دهد به این صورت که می‌توان هر نوع کلاسی حتی کلاس‌های مهر شده با Sealed را با استفاده از Extension methodsبسط داد.

توابع جزئی

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

آرایه‌های نوع ضمنی

آرایه‌ها را نیز می‌توان با استفاده از کلمه کلیدی var تعریف کرد.

static void Main(string[] args)
{
    var a = new[] { 1, 10, 100, 1000 };// int[]
    var b = new[] { 1, "one", 2 };// Error
}

پیش پردازنده

ویژگی «دستورها پیش پردازنده» سی شارپ (اگرچه آن‌ها به واقع یک پیش پردازنده نیستند) مبنی بر دستورها پیش پردازنده C است که به برنامه‌نویس اجازه تعریف سمبلهایی را می‌دهند. برخی از این دستورها عبارتند از: #if، #region، #define. راهنماهایی نظیر #region تذکراتی به ویرایش‌گرها برای code folding می‌دهند.

توضیحات کد

توضیحات تک خط با استفاده از دو اسلش تعریف می‌شوند(//) و توضیحات چند خطی با /* شروع و به */ تمام می‌شوند.

public class Foo
{
// a comment
    public static void Bar(int firstParam) {}//Also a comment
}

public class FooBar
{
    /* a comment */
    public static void BarFoo(int firstParam) {}  /* Also a comment */

توضیحات چند خطی هم چنین می‌توانند با /* شروع و با */ تمام شوند.

public class Foo
{
    /* A Multi-Line
       comment  */
    public static void Bar(int firstParam) {}
}

سامانه مستندسازی XML

سامانه مستندسازی #C بسیار شبیه به جاوا است، اما مبنی بر XML. دو شیوه مستندسازی در حال حاضر به وسیله کامپایلر #C پشتیبانی می‌شود.

توضیحات تک خطی، که معمولاً در تولیدکننده کد Visual Studioپیدا می‌شوند، با استفاده از/// شروع می‌شوند.

public class Foo
{
/// < summary > A summary of the method. < /summary >
/// < param name="firstParam" > A description of the parameter. < /param >
/// < remarks > Remarks about the method. < /remarks >
    public static void Bar(int firstParam) {}
}

توضیحات چند خطی، که در نسخه ۱٫۰ تعریف شدند، اما در نسخه ۱٫۱ پشتیبانی از آن‌ها وجود نداشت با /* شروع و به */ ختم می‌شوند:

public class Foo
{
    /** < summary > A summary of the method. < /summary >
     *  < param name="firstParam" > A description of the parameter. < /param >
     *  < remarks>Remarks about the method. < /remarks > */
    public static void Bar(int firstParam) {}
}

نکته:در اینجا یک ملاک سخت در مورد استفاده از فضاهای خالی در سندهای XML هنگام استفاده از /**وجود دارد:

/**
 * < summary >
 * A summary of the method. < /summary > */

نوع دیگری از کد بالا ارائه خواهد شد:

/**
 * < summary >
   A summary of the method. < /summary > */

سینتکس سندسازی توضیحات XML در یک ضمیمه بی قاعده از استاندارد ECMA از سی شارپ وجود دارد. یک استاندارد مشابه قوانینی برای پردازش توضیحات و تبدیل آن‌ها به متون Plain در XML را با کمک قوانین CLI فراهم می‌کند. این به هر IDE در سی شارپ و دیگر ابزار گسترش دهنده امکان پیدا کردن هر نمادی را در کدها می‌دهد.

(CLR(Common Language Runtime

بخش مرکزی چارچوب دات‌نت، محیط اجرایی Runtime می‌باشد که اصطلاحاً به آن CLR یا .NET Runtime می‌گویند. کدهایی که تحت کنترل CLR اجرا می‌شوند اغلب به عنوان کدهای مدیریت شده نامیده می‌شوند.

اگر چه، پیش از این که کدها (همه زبان‌های چارچوب دات‌نت) به وسیله CLR اجرا شوند، بایستی مورد کامپایل قرار گیرند. در چارچوب دات‌نت عمل کامپایل در دو مرحله صورت می‌گیرد:

  1. کامپایل سورس کد به MSIL.
  2. کامپایل MSIL به کد مختص پلتفرم به وسیله CLR

یک نکته قابل توجه، اشتراک زبان میانی مایکروسافت با کد بایت جاوا(Bytecode)است. ایده این اشتراک از آنجا سرچشمه گرفت که چون Bytecode یک زیان سطح پایین با یک دستور زبان ساده می‌باشد (که به جای متن مبتنی بر کدهای عددی است)، می‌تواند به سرعت به کدهای بومی(Native) ترجمه شود.

برخی ویژگی‌های MSIL

  • شیءگرایی و بکارگیری واسط‌ها
  • تمایز فراوان بین انواع مقداری و ارجاعی
  • تعیین Strong Type (این نوع داده دیگر معتبر نیست)
  • مدیریت خطا از طریق به‌کارگیری Exception
  • بکارگیری صفات

 

منبع

 

آشنایی با #C قسمت 1
آشنایی با #C قسمت 2
آشنایی با #C قسمت 3

منبع


منابع:

fa.wikipedia.org

http://mediasoft.ir

 

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

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

الگوریتم‌های DSP مدت زیادی است که در کامپیوترهای استاندارد همه منظوره، یا بر روی پردازش‌گرهای معروف به پردازشگرهای سیگنال دیجیتال (DSP) یا با استفاده از سخت‌افزارهای خاص مثلمدارهای مجتمع با کاربرد خاص (ASIC) اجرا می‌شوند. امروزه تکنولوژی‌های دیگری نیز برای پردازش سیگنال دیجیتال مورد استفاده قرار می‌گیرند که شامل میکروپروسسورهای چندمنظوره قدرتمند،اف‌پی‌جی‌ای (FPGA)، کنترل‌کننده سیگنال دیجیتال (بیشتر برای کاربردهای صنعتی مثل کنترل موتور) هستند.

حوزه‌های DSP

در DSP، مهندسین معمولاً به مطالعه سیگنال دیجیتال در یکی از حوزه ها زیر می‌پردازند: حوزه زمان (سیگنال‌های یک بعدی)، حوزه فضایی (سیگنال‌های چندبعدی)، حوزه فرکانس، حوزهخودهمبستگی، و حوزه موجک. برای پردازش این سیگنال ها، حوزه‌ای انتخاب میشود که در آن بتوان خصوصیات اصلی سیگنال را به بهترین شکل نمایش داد و با استفاده از اطلاعات حاضر، به بهترین صورت، سیگنال را پردازش کرد. توالی نمونه‌هایی که از اندازه‌گیری خروجی یک وسیله به دست می‌آید یک نمایش در حوزه زمان یا حوزه فضا را تشکیل می‌دهد، در حالی که تبدیل فوریه گسسته‌زمان، اطلاعات را در حوزه فرکانس تولید می‌کند (همان طیف فرکانسی). همبستگی خودکار را همبستگی متقابل سیگنال با خودش بر روی فاصله‌های متغیر زمان یا فضا تعریف می‌کنند.

نمونه‌برداری از سیگنال

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

نمونه‌برداری معمولاً در دو مرحله انجام می‌شود : گسسته‌سازی و مدرج کردن. در مرحله گسسته‌سازی، فضای سیگنال (فضایی که سیگنال در آن وجود دارد) به کلاس‌هاس هم‌ارز افراز می‌شود و مدرج کردن نیز با جایگزینی سیگنال اصلی با سیگنال متناظر در کلاس‌های هم‌ارز انجام می‌پذیرد.

در مرحله مدرج کردن، مقادیر سیگنال نماینده (به انگلیسی: Representative Signal) توسط مقادیر زیر مجموعه یک مجموعه متناهی تقریب زده می‌شوند.

قضیه نمونه‌برداری نایکوئیست-شنون بیان می‌کند که سیگنال را می‌توان از روی سیگنال نمونه‌برداری شده به طور دقیق بازسازی کرد، اگر فرکانس نمونه‌برداری بزرگتر از دو برابر بالاترین مؤلفه فرکانسی سیگنال باشد. در عمل، غالباً فرکانس نمونه‌برداری را بزرگتر از دو برابر پهنای باند لازم در نظر می‌گیرند.

یک مبدل دیجیتال به آنالوگ به منظور تبدیل معکوس سیگنال به حالت آنالوگ مورد استفاده قرار می‌گیرد. استفاده از یک کامپیوتر دیجیتال مقوله کلیدی در سیستم‌های کنترل دیجیتال است.

مفهوم حوزه‌ی زمان و فرکانس

متداول ترین تکنیک پردازش سیگنال در حوزه ی زمان و فضا (مکان)، بهسازی (بهبود) سیگنال از طریق فیلترینگ است. فیلترینگ دیجیتال عبارت از اعمال تبدیل های خطی بر نمونه هایی از سیگنال است که در همسایگی نمونه ی فعلی در سیگنال ورودی یا خروجی واقع شده اند. به روش های مختلفی میتوان این فیلترها را دسته بندی نمود:

  • “فیلتر خطی”: یک تبدیل خطی است که بر روی نمونه های ورودی اعمال میشود؛ سایر فیلترها “غیرخطی” هستند. فیلترهای خطی از قاعده ی جمع آثار پیروی میکنند؛ به این معنی که اگر یک سیگنال ورودی، ترکیب وزنداری از سیگنال های مختلف باشد، سیگنال خروجی از ترکیب خطی خروجی های همان سیگنال ها، با وزنهای مشابه ورودی، حاصل میشود.
  • “فیلتر علی”: فیلتر علی فقط از نمونه های قبلی در سیگنال های ورودی و خروجی استفاده میکند. اما، در فیلترهای “غیرعلی”، نمونه های آینده ی ورودی نیز به کار گرفته می شوند. با اضافه کردن تأخیر به یک فیلتر غیرعلی میتوان آنرا به یک فیلتر علی تبدیل نمود.
  • “فیلتر غیر متغیر با زمان”: ویژگی های این فیلتر با زمان تغییر نمیکند. اما، فیلترهایی مانند فیلتر تطبیقی، با زمان تغییر میکنند.
  • “فیلتر پایدار”: خروجی یک فیلتر پایدار با گذشت زمان به یک مقدار ثابت همگرا میشود یا در محدوده ی متناهی باقی می ماند. اما، یک فیلتر “ناپایدار” در پاسخ به یک ورودی محدود (متناهی) یا حتی صفر، ممکن است منجر به تولید خروجی هایی نامتنهای شود.
  • “فیلتر با پاسخ ضربه ی محدود (FIR)”: این فیلتر فقط از نمونه های سیگنال ورودی استفاده میکند، اما، فیلتر با پاسخ ضربه ی نامحدود (IIR) علاوه بر نمونه های ورودی، از نمونه های گذشته ی خروجی نیز استفاده میکند. فیلترهای FIR همواره پایدار هستند، اما، فیلترهای IIR ممکن است ناپایدار شوند.

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

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

با استفاده از تبدیل فوریه میتوان سیگنال ها را از حوزه ی زمان (مکان) به حوزه ی فرکانس منتقل نمود. تبدیل فوریه، اطلاعات سیگنال را به دامنه (اندازه) و فاز مؤلفه های فرکانسی موجود در سیگنال، تبدیل میکند. در عمل، اغلب، از تبدیل برای فوریه برای محاسبه ی طیف توان سیگنال استفاده میشود که مربع دامنه ی (اندازه) هر مؤلفه ی فرکانسی است.

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

فیلترینگ سیگنال، به ویژه در کابردهای غیر زمان واقعی (non- real time)،میتواند با انتقال سیگنال به حوزه ی فرکانس و اعمال یک فیلتر مناسب بر آن و سپس برگرداندن سیگنال حاصل به حوزه ی زمان انجام شود. این عملیات، سریع بوده (زمان اجرا متناسب است با (n log n) ) و می توان فیلتر را با تقریب خوبی به شکلهای مختلف طراحی نمود.

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

تحلیل حوزه ی فرکانس با عنوان تحلیل طیف نیز شناخته میشود.

بسط فوریه و مفهوم حوزه زمان (منحنی قرمز) و فرکانس (منحنی آبی).

تحلیل در حوزه {\displaystyle Z\,}

در حالی که فیلترهای آنالوگ معمولاً در صفحه{\displaystyle s\,} تحلیل می‌شوند، فیلترهای دیجیتال در صفحه {\displaystyle z\,} یا حوزه دیجیتال و با استفاده از تبدیل {\displaystyle Z\,} تحلیل می‌شوند.

بسیاری از فیلترها را می‌توان در حوزه{\displaystyle Z\,} (یک فرامجموعه از اعداد مختلط در حوزه فرکانس) توسط تابع تبدیلشان تحلیل کرد. یک فیلتر می‌تواند توسط مجموعه مشخصه‌اش شامل صفرها و قطب‌ها در حوزه{\displaystyle z\,} تحلیل شود.

کاربردها

بیشترین کاربردهای DSP شامل پردازش سیگنال صوتی، فشرده‌سازی داده‌های صوتی، پردازش تصویر دیجیتال، فشرده‌سازی ویدیو، پردازش صدا، تشخیص صدا، ارتباط دیجیتال، رادار، سونار، زلزله‌شناسی و داروسازی است. مثال‌های خاص شامل فشرده‌سازی صحبت و انتقال در تلفن همراه، هم‌نواسازی مطابق اتاق برای صدا در کاربردهای شباهت زیاد به اصل و تقویت صدا، پیش بینی وضع هوا، پیش‌بینی اقتصادی، پردازش داده زلزله، تحلیل و کنترل روال‌های صنعتی، انیمیشن‌های تولید شده توسط رایانه در فیلم‌ها، عکس‌برداری پزشکی مثل پویش‌های CAT و MRI، فشرده‌سازیMP3، دستکاری تصویر، هم‌نواسازی و هم‌گذری بلندگوهای با کیفیت بالا، و افکت صوتی برای تقویت‌کننده (الکترونیک) گیتار برقی است.

منبع