تولباکس Sensor Fusion and Tracking Toolbox

شرکت متورکز Sensor Fusion and Tracking Toolbox را معرفی کرد.
این تولباکس از نسخه 2018b معرفی و منتشر شد.
تولباکس Sensor Fusion and Tracking Toolbox الگوریتم و ابزاری برای حفظ موقعیت, جهت گیری و آگاهی موقعیتی فراهم می کند.
محققین و مهندسانی که بر روی ادرات توسعه سیستم کار می کنند, نیاز به ورودی های مختلف از سنسورهای مختلف برای تخمین موقعیت اشیا دارند.
تولباکس Sensor Fusion and Tracking Toolbox الگوریتم های محلی سازی و ردیابی را همراه با نمونه های مرجع در تولباکس به عنوان نقطه شروع برای اجزای نظارت بر هواپیما, زمین , کشتی و زیرآبی, ناوبری و سیستم هایی از این دست اجرا می کنند.
Sensor Fusion and Tracking Toolbox
تولباکس Sensor Fusion and Tracking Toolbox شامل موارد زیر است:

  • الگوریتم ها و ابزارهایی برای طراحی، شبیه سازی و تجزیه و تحلیل سیستم هایی که داده ها را از سنسورهای مختلف برای حفظ موقعیت، جهت گیری و آگاهی موقعیتی
  • مثال های مرجع که نقطه شروع برای نظارت، ناوبری، و سیستم های خودمختار در هواپیما، زمین، کشتی و زیر آبی است.
  • ردیابهای چندگانه، فیلترهای همجوشی حسگر، مدل های حرکتی و سنسورها و الگوریتم های مرتبط با داده ها که می توانند برای ارزیابی معماری های همجوشی با استفاده از داده های واقعی و مصنوعی استفاده شوند.
  • سناریو و ابزارهای ایجاد مسیر
  • تولید داده های مصنوعی برای سنسورهای فعال و غیر فعال، از جمله RF، آکوستیک، EO / IR، و سنسورهای GPS / IMU
  • دقت سیستم و معیارهای استاندارد عملکرد، معیارها و قطعه های متحرک
  • گزینه های راه اندازی برای شتاب شبیه سازی یا مدل سازی دسکتاپ با استفاده از تولید کد C

اطلاعات بیشتر و دانلود نسخه رایگان تولباکس:  download free trial
شاید به مطالب زیر نیز علاقه مند باشید:

 

لایسنس تولباکس Sensor Fusion and Tracking Toolbox

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

لایسنس های نرم افزار متلب

لایسنس های متلب برای ابزار ها و… متلب از جمله موارد زیر, در سایت متورکز به فروش میرسد:

• MATLAB• Phased Array System Toolbox
• Simulink• Polyspace Bug Finder
• 5G Toolbox• Polyspace Code Prover
• Aerospace Blockset• Powertrain Blockset
• Aerospace Toolbox• Predictive Maintenance Toolbox
• Antenna Toolbox• RF Blockset
• Audio System Toolbox• RF Toolbox
• Automated Driving System Toolbox• Risk Management Toolbox
• Bioinformatics Toolbox• Robotics System Toolbox
• Communications Toolbox• Robust Control Toolbox
• Computer Vision System Toolbox• Sensor Fusion and Tracking Toolbox
• Control System Toolbox• Signal Processing Toolbox
• Curve Fitting Toolbox• SimBiology
• DSP System Toolbox• SimEvents
• Data Acquisition Toolbox• Simscape
• Database Toolbox• Simscape Driveline
• Datafeed Toolbox• Simscape Electrical
• Deep Learning Toolbox• Simscape Fluids
• Econometrics Toolbox• Simscape Multibody
• Embedded Coder• Simulink 3D Animation
• Filter Design HDL Coder• Simulink Check
• Financial Instruments Toolbox• Simulink Code Inspector
• Financial Toolbox• Simulink Coder
• Fixed-Point Designer• Simulink Control Design
• Fuzzy Logic Toolbox• Simulink Coverage
• GPU Coder• Simulink Design Optimization
• Global Optimization Toolbox• Simulink Design Verifier
• HDL Coder• Simulink Desktop Real-Time
• HDL Verifier• Simulink PLC Coder
• Image Acquisition Toolbox• Simulink Real-Time
• Image Processing Toolbox• Simulink Report Generator
• Instrument Control Toolbox• Simulink Requirements
• LTE HDL Toolbox• Simulink Test
• LTE Toolbox• Spreadsheet Link
• MATLAB Coder• Stateflow
• MATLAB Compiler• Statistics and Machine Learning Toolbox
• MATLAB Compiler SDK• Symbolic Math Toolbox
• MATLAB Report Generator• System Identification Toolbox
• Mapping Toolbox• Text Analytics Toolbox
• Model Predictive Control Toolbox• Trading Toolbox
• Model-Based Calibration Toolbox• Vehicle Dynamics Blockset
• OPC Toolbox• Vehicle Network Toolbox
• Optimization Toolbox• Vision HDL Toolbox
• Parallel Computing Toolbox• WLAN Toolbox
• Partial Differential Equation Toolbox• Wavelet Toolbox

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

https://www.cityu.edu.hk/csc/deptweb/facilities/central-sw-tah.htm

همانطور که در لینک فوق توضیح داده شده است, کسانی که ایمیل از این سایت دانشگاهی دارند میتوانند به صورت رایگان به تمامی ابزارهای دارای لایسنس متلب دسترسی داشته باشند.
امیدواریم با انتشار این پست, هر کدام از مخاطبین سایت متلبی که دسترسی به ایمیل این سایت دانشگاهی داشتند و یا لایسنسی از ابزار های متلب داشتند را به اشتراک بگذارند.
لطفا اگر دسترسی به لایسنس های تولباکس های متلب دارید, یا ایمیل از دامنه سایت دانشگاهی هونگ کونگ فوق داشتید, در قسمت نظرات همین پست اطلاع رسانی نمایید تا در دسترسی بقیه قرار بگیرد.
 
 

سیستم دینامیکی آونگ با متلب

برای حل مسئله دینامیکی آونگ، 2 حالت را برای حل در نظر گرفتیم.  در حالت اول یک شتاب ثابت به سیستم اعمال کردیم و خروجی سیستم دینامیکی را ترسیم کردیم. برای داشتن یک حالت کلی تر و حرفه‌ای تر، یک شتاب هارمونیک به سیستم اعمال کردیم و خروجی ها را بررسی کردیم.
فایلهای این شبیه سازی در انتهای همین صفحه جهت دانلود رایگان قرار گرفته است.
آونگ
در پوشه P1 حالت اول را اعمال کردیم. کد نویسی مسئله به این صورت است که معادلات دینامیکی را در تابع pendulum1 نوشته و این معادلات را در کد p1 ، با کمک تابع ode45 برای زاویه و سرعت زاویه‌ای اولیه 0 و 0 حل کردیم. لازم به ذکر است که شتاب را 5 متر بر مجذور ثانیه در نظر گرفتیم. بقیه پارامترهای سیستم همانند حل دستی ضمیمه شده به طور دلخواه انتخاب شده‌اند. دو نمودار برای خروجی چاپ می شود.
انجام پروژه متلب با متلبی
پروژه متلب ازقرار زیر است:

%%%% Fixed Acceleration
t=0:0.01:10;
l=0.25;
k=7;
a=10;
x=-15/.5^2*cos(0.5*t)+15/0.5^2;
A=[a;k;l];
[t,th]=ode45(‘pendulum1′,t,[0 0],[],A);
figure
plot(t,th(1:end,1),’LineWidth’,2)
grid on
xlabel(‘T’);
ylabel(‘Theta’);
title(‘Response to the fixed acceleration’)
saveas(gcf,’1.pdf’);

نمودار اول در واقع زاویه
آونگ
انجام پروژه متلب با متلبی
و در ادامه داریم:

figure
plot(t,th(1:end,2),’LineWidth’,2)
grid on
xlabel(‘T’);
ylabel(‘Angular velocity’);
title(‘Response to the fixed acceleration’)
saveas(gcf,’2.pdf’);

و نمودار دوم سرعت زاویه ای
سرعت زاویه ای
آونگ می باشد. لازم به ذکر است که این خروجی ها بعد از هر اجرا به شکل خودکار در دو فایل پی دی اف 1 و 2 با کیفیت مطلوبی ذخیره می شوند.
در ادامه کار یک شتاب هارمونیک به سیستم اعمال کردیم و روند بالا را دنبال شد. حالت شتاب ثابت و هارمونیک  را در یک کد نوشته و در پوشه p2 قرار گرفته اند.
انجام پروژه متلب با متلبی
در ادامه برنامه متلب فوق داریم:

%%%% Harmonic Acceleration
t1=0:0.01:35;
l1=0.25*ones([1,length(t1)]);
k1=10*ones([1,length(t1)]);
a1=15*cos(0.5*t1);
x1=-15/.5^2*cos(0.5*t)+15/0.5^2;
A1=[k;l];

معادلات دینامیکی آونگ در فانکشن pendulum قرار دارد و با دستور ode این معادله را محاسبه کرده ایم:

[t1,th1]=ode45(‘pendulum’,t1,[0 0],[],A);
figure
plot(t1,th1(1:end,1),’LineWidth’,2)
grid on
xlabel(‘T’);
ylabel(‘Theta’);
title(‘Response to the harmonic acceleration’)
saveas(gcf,’3.pdf’);

زاویه آونگ در شتاب هارمونیک
زاویه آونگ
سپس

figure
plot(t1,th1(1:end,2),’LineWidth’,2)
grid on
xlabel(‘T’);
ylabel(‘Angular velocity’);
title(‘Response to the fixed acceleration’)
saveas(gcf,’4.pdf’);

و سرعت زاویه ای:
سرعت زاویه ای آونگ
تابع pendulum که شامل معادلات دینامیکی آونگ هست نیز به صورت زیر پیاده شده اند:

function out=pendulum(t,x,flag,A)
k=A(1,1);
l=A(2,1);
g=9.81;
A0=1.1;
out=[x(2);1/k^2*(sign(cos(0.5*t))*A0*cos(0.5*t)*l*cos(x(1))-g*l*sin(x(1)))];

و برای pendulum1 در سیستم دینامیکی آونگ با متلب بصورت زیر داریم:

function out=pendulum1(t,x,flag,A)
k=A(2,1);
l=A(3,1);
a=A(1,1);
g=9.81;
out=[x(2);1/k^2*(a*l*cos(x(1))-g*l*sin(x(1)))];

این پروژه متلب با هدف آشنایی با معادلات سیستم آونگ و گرفتن خروجی در شرایط شتاب ثابت و هارمونیک برای مخاطبین خوب سایت متلبی منتشر شده است.


سفارش انجام پروژه مشابه

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

محاسبه جریان مقاومت, سلف و خازن در مدار RLC توسط متلب

در انتهای همین صفحه پروژه آماده متلب آن جهت دانلود رایگان قرار گرفته است. علاوه بر محاسبه جریان مقاومت, سلف و خازن در مدار RLC , توان لحظه ای هر کدام و انرژی ذخیره شده در خازن و سلف هم محاسبه و با متلب شبیه سازی شده است.





RLC
جريان مقاومت،جريان خازن و جريان سلف و توان لحظه اي هر كدام و انرژي ذخيره شده در خازن و سلف به ازاي C=1, R=10 L=1, مقادیر a=1,b=10,c=1 بدست می آید که با توجه به رابطه b2>4*a*c می فهمیم حالت فوق میرا برقرار می باشد.
حل در matlab توسط simulink و شبیه سازی

برنامه را برای دو حالت طراحی و پیاده سازی کردیم:
برنامه RLC_without_inital_condition.m با فرض شرایط اولیه صفر
پروژه متلب

clc

clear

C=1;

V_C0=0;

L=1;

I_L0=0;

R=10;

Vs=15;

sim(‘RLC1.slx’)

disp(‘without inital condition’)

figure(1)

subplot(3,1,1)

plot(I)

title(‘curent for R or C or L’)

grid on

subplot(3,1,2)

plot(PC)

title(‘power for C ‘)

grid on

subplot(3,1,3)

plot(PL)

title(‘power for L ‘)

grid on

figure(2)

WL=0.5*L*I.data.^2;

WC=0.5*C*V.data.^2;

subplot(2,1,1)

plot(WL)

grid on

title(‘energy of L’)

subplot(2,1,2)

plot(WC)

grid on

title(‘energy of C’)

انجام پروژه متلب با متلبی
خروجی برنامه:
جریان و توان لحظه ای برای خازن و سلف

انرژی ذخیره شده در سلف و خازن

برنامه RLC_with_inital_condition.m با فرض شرایط اولیه مخالف صفر
پروژه متلب

clc

clear

C=1;

V_C0=5;

L=1;

I_L0=0.2;

R=10;

Vs=15;

sim(‘RLC1.slx’)

disp(‘without inital condition’)

figure(1)

subplot(3,1,1)

plot(I)

title(‘curent for R or C or L’)

grid on

subplot(3,1,2)

plot(PC)

title(‘power for C ‘)

grid on

subplot(3,1,3)

plot(PL)

title(‘power for L ‘)

grid on

figure(2)

WL=0.5*L*I.data.^2;

WC=0.5*C*V.data.^2;

subplot(2,1,1)

plot(WL)

grid on

title(‘energy of L’)

subplot(2,1,2)

plot(WC)

grid on

title(‘energy of C’)

انجام پروژه متلب, انجام پروژه متلب با متلبی

خروجی برنامه

شاید علاقه مند باشید در مورد دیود شاتکی بیشتر بدانید.
تحقیق دیود شاتکی


سفارش انجام پروژه مشابه

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

الگوریتم ملخ ها

در این پست یک الگوریتم بهینه سازی به نام الگوریتم بهینه سازی ملخ را پیشنهاد می‌کنیم. در مقاله ای که این الگوریتم ملخ ها منتشر شده است آن را برای چالش های بهینه سازی ساختاری بکار گرفته است. در این مقاله اینطور آمده: الگوریتم پیشنهادی مدل های مورد نظر را در نظر گرفته و رفتار ملخ را در طبیعت برای حل مسایل بهینه سازی مورد استفاده قرار می‌دهد. الگوریتم GOA اولین بار است که در مجموعه‌ای از مشکلات تست از جمله CEC۲۰۰۵ برای آزمایش و بررسی عمل‌کرد خود و به طور کمی بررسی می‌شود. سپس برای یافتن شکل بهینه برای یک truss ۵۲ بار، truss ۳ – ۴، و تیر cantilever برای نشان دادن قابلیت کاربرد آن بکار می‌رود. نتایج نشان می‌دهد که الگوریتم پیشنهادی قادر به ارایه نتایج عالی در مقایسه با الگوریتم های شناخته شده است. نتایج کاربردهای واقعی نیز مزایای GOA را در حل مشکلات واقعی با فضاهای جستجوی ناشناخته نشان می‌دهد.
الگوریتم ملخ ها در سال 2017 منتشر شده است. این الگوریتم نیز همانند سایر الگوریتم های بهینه سازی سعی در یافتن جواب بهینه در میان چندین پاسخ می باشد. الگوریتم بهینه سازی ملخ جز تازه ترین و یکی از قدرتمندترین الگوریتم های بهینه سازی به حساب می آید. شبیه سازی این مقاله بصورت کامل انجام شده و حالا شما می توانید با تغییر تابع هدف خود و با تغییراتی بسیار ساده مسئله ی خود را توسط این الگوریتم بهینه سازی نمایید. از طرفی به دلیل تازه بودن این الگوریتم چاپ مقالات علمی توسط آن و انجام پروژه متلب با آن بسیار راحت تر از سایر الگوریتم ها نظیر الگوریتم ژنتیک و ازدحام ذرات و … می باشد.
شاید علاقه مند باشید در مورد مطالب زیر بیشتر بدانید:

برای دانلود مقاله می توانید با کلیک رو دکمه زیر دانلود کنید




و برای دانلود رایگان کد الگوریتم ملخ ها در متلب روی دکمه زیر گوگل+1 کلیک کنید, پس از آن لینک دانلود برای شما ظاهر می شود و می توانید رایگان الگوریتم GWO Grasshopper Optimisation Algorithm را دانلود کنید.




سفارش انجام پروژه با الگوریتم ملخ ها

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

برچسب ها:
Optimization, Optimization techniques, Heuristic algorithm, Metaheuristics, Constrained optimization, Benchmark, Algorithm, GWO Grasshopper Optimisation Algorithm

حداقل مربعات در متلب را با چند مثال مختلف بررسی می کنیم.
برای آموزش شبیه سازی روش های حداقل مربعات و حداقل مربعات بازگشتی و… در متلب مثال های عملی را با هم بررسی می کنیم.
فرض کنیم چنین سوالاتی مطرح است:
1-سیستم زیر را در نظر بگیرید که در آن ) e(tنویز سفید با واریانس 0/1است.

فرض کنید پارامتر a=0.7و b=2باشد با اعمال روش هاي
الف- حداقل مربعات و ب- حداقل مربعات بازگشتی تخمین پارامترهاي aو bرا بدست آورید و رسم نمایید.تغییرات پارامترها
را نسبت به تعداد تکرارها رسم نموده و نحوه همگرایی تخمین پارامترها را توضیح دهید.سپس روشهاي مختلف را با هم
مقایسه کنید.
-2فرض کنید مدل ریاضی سیستم بصورت زیر است

ورودي uبه سیستم و خروجی yبه صورت زیر است پارامترهاي a0و b0و b1را با روش حداقل مربعات تخمین بزنید.

-3سیستم

با ورودي PRBSکه داراي دامنه ±1است در نظر بگیرید با فرض ) e(tنویز سفید با واریانس واحد شبیه سازي کنیددو
مدل براي سیستم زیر در نظر بگیرید

با در نظر گرفتن N=100این مدلها را با روش هاي
حداقل مربعات
حداقل مربعات تعمیم داده شده
متغییرهاي کمکی
تخمین زده و با هم مقایسه کنید
با پروژه آماده متلب که در زیر قرار داده شده و آموزش آن با کامنت گذاری مشخص شده است بخوبی میتوان همه مراحل را دید:

=================================

clc;پاک کردن صفحه متلب

clear all;پاک کردن متغیرهای گذشته و بلا استفاده

close all;بستن نمودارهای باز

%==========================================================================

%Q1سوال شماره 1

a=0.7;مقدار پارامتر

b=2;مقدار پارامتر

sigm_e=0.1;واریانس نویز

N=100;تعداد داده ها

N1=N;متغیر کمکی برای ذخیره تعداد داده ها

y=zeros(1,N);تعریف بردار خروجی

u=50*idinput(N);ورودی شناسایی

ep=wgn(1,N,0);نویز سفید

sigm_ep=1/(N)*sum(ep.^2);واریانس نویز

e=sqrt(sigm_e/(sigm_ep))*ep;ایجاد نویز با واریانس مورد نظر

جمع آوری داده از سیستم

for t=2:N

y(t)=-a*y(t-1)+b*u(t-1)+e(t);

end

y1=y;u1=u;

ترسیم داده های شناسایی

figure (1)

subplot(2,1,1);stairs(1:1:N,y,’b’,’linewidth’,2);grid on;axis([1 N -400 400]);ylabel(‘y’);

subplot(2,1,2);stairs(1:1:N,u,’b’,’linewidth’,2);grid on;axis([1 N -60 60]);ylabel(‘u’);xlabel(‘sample’);

%Least squaresروش حداقل مربعات

Phi=zeros(N-1,2);ماتریس داده ها

Y=zeros(N-1,1);بردار خروجی

for t=2:N

Phi(t,:)=[-y(t-1),u(t-1)];

Y(t)=y(t);

end

teta=(Phi.’*Phi)\Phi.’*Y;محاسبه پارامترها

teta1=teta;

نمایش مقادیر داده در صفحه متلب

disp(‘Q1: Least squares estimation for N=100’);

disp(‘estimated a=’);disp(teta(1));

disp(‘estimated b=’);disp(teta(2));

N=200;تکرار شبیه سازی برای تعداد داده های بیشتر

N2=N;

y=zeros(1,N);

u=50*idinput(N);

ep=wgn(1,N,0);

sigm_ep=1/(N)*sum(ep.^2);

e=sqrt(sigm_e/(sigm_ep))*ep;

for t=2:N

y(t)=-a*y(t-1)+b*u(t-1)+e(t);

end

y2=y;u2=u;

Phi=zeros(N-1,2);

Y=zeros(N-1,1);

for t=2:N

Phi(t,:)=[-y(t-1),u(t-1)];

Y(t)=y(t);

end

teta=(Phi.’*Phi)\Phi.’*Y;

teta2=teta;

disp(‘Q1: Least squares estimation for N=200’);

disp(‘estimated a=’);disp(teta(1));

disp(‘estimated b=’);disp(teta(2));

N=300;تکرار شبیه سازی برای تعداد داده های بیشتر

N3=N;

y=zeros(1,N);

u=50*idinput(N);

ep=wgn(1,N,0);

sigm_ep=1/(N)*sum(ep.^2);

e=sqrt(sigm_e/(sigm_ep))*ep;

for t=2:N

y(t)=-a*y(t-1)+b*u(t-1)+e(t);

end

y3=y;u3=u;

Phi=zeros(N-1,2);

Y=zeros(N-1,1);

for t=2:N

Phi(t,:)=[-y(t-1),u(t-1)];

Y(t)=y(t);

end

teta=(Phi.’*Phi)\Phi.’*Y;

teta3=teta;

disp(‘Q1: Least squares estimation for N=300’);

disp(‘estimated a=’);disp(teta(1));

disp(‘estimated b=’);disp(teta(2));

N=400;تکرار شبیه سازی برای تعداد داده های بیشتر

N4=N;

y=zeros(1,N);

u=50*idinput(N);

ep=wgn(1,N,0);

sigm_ep=1/(N)*sum(ep.^2);

e=sqrt(sigm_e/(sigm_ep))*ep;

for t=2:N

y(t)=-a*y(t-1)+b*u(t-1)+e(t);

end

y4=y;u4=u;

Phi=zeros(N-1,2);

Y=zeros(N-1,1);

for t=2:N

Phi(t,:)=[-y(t-1),u(t-1)];

Y(t)=y(t);

end

teta=(Phi.’*Phi)\Phi.’*Y;

teta4=teta;

disp(‘Q1: Least squares estimation for N=400’);

disp(‘estimated a=’);disp(teta(1));

disp(‘estimated b=’);disp(teta(2));

ترسیم درصد خطای نسبی تخمین پارامترها بر حسب تعداد داده ها

Nv=[100,200,300,400];

Er_Nv_a=[abs(a-teta1(1))/a,abs(a-teta2(1))/a,abs(a-teta3(1))/a,abs(a-teta4(1))/a]*100;

Er_Nv_b=[abs(b-teta1(2))/b,abs(b-teta2(2))/b,abs(b-teta3(2))/b,abs(b-teta4(2))/b]*100;

figure (2)

subplot(2,1,1);bar(Nv,Er_Nv_a,’b’);xlabel(‘N’);ylabel(‘a relative error (%)’);

subplot(2,1,2);bar(Nv,Er_Nv_b,’b’);xlabel(‘N’);ylabel(‘b relative error (%)’);

%Recursive least squaresروش حداقل مربعات بازگشتی

lmbd=0.98;ضریب فراموشی

P=1e6*eye(2); ماتریس

teta_rls1=zeros(2,N1);ماتریس تخمین ها

تخمین حداقل مربعات بازگشتی

for t=2:N1

phi=[-y1(t-1);u1(t-1)];

Kt=P*phi/(lmbd*eye(1)+phi.’*P*phi);

P=(eye(2)-Kt*phi.’)*P/lmbd;

teta_rls1(:,t)=teta_rls1(:,t-1)+Kt*(y1(t)-phi.’*teta_rls1(:,t-1));

end

ترسیم پارامترهای تخمینی به روش حداقل مربعات و مقادیر واقعی و مقادیر روش قبل

figure (3)

subplot(2,1,1);stairs(1:N1,teta1(1)*ones(1,N1),’b’,’linewidth’,2);grid on;

hold on;

stairs(1:N1,teta_rls1(1,:),’g’,’linewidth’,2);

hold on;

stairs(1:N1,a*ones(1,N1),’r’,’linewidth’,2);

legend(‘LS for N=100′,’RLS for N=100′,’a=0.7’);

subplot(2,1,2);stairs(1:N1,teta1(2)*ones(1,N1),’b’,’linewidth’,2);grid on;

hold on;

stairs(1:N1,teta_rls1(2,:),’g’,’linewidth’,2);

hold on;

stairs(1:N1,b*ones(1,N1),’r’,’linewidth’,2);

legend(‘LS for N=100′,’RLS for N=100′,’b=2’);

%==========================================================================

%Q2سوال شماره 2

u=[1,0.8,0.6,0.4,0.2,0,0.2,0.4,0.6,0.8,1,0.8,0.6,0.4,0.2];

y=[0.9,2.5,2.4,1.3,1.2,0.8,0,0.9,1.4,1.9,2.3,2.4,2.3,1.3,1.2];

N=length(u);

ترسیم داده های شناسایی

figure (4)

subplot(2,1,1);stairs(1:1:N,y,’b’,’linewidth’,2);grid on;axis([1 N -1 4]);ylabel(‘y’);

subplot(2,1,2);stairs(1:1:N,u,’b’,’linewidth’,2);grid on;axis([1 N -1 2]);ylabel(‘u’);xlabel(‘sample’);

Phi=zeros(N-1,3);

Y=zeros(N-1,1);

for t=2:N

Phi(t,:)=[-y(t-1),u(t),u(t-1)];

Y(t)=y(t);

end

teta=(Phi.’*Phi)\Phi.’*Y;تخمین پارامترها

disp(‘Q2: Least squares estimation’);

disp(‘estimated a1=’);disp(teta(1));

disp(‘estimated b0=’);disp(teta(2));

disp(‘estimated b1=’);disp(teta(3));

%==========================================================================

%Q3سوال شماره 3

پارامترها

a=-0.9;

b0=1;

b1=0.5;

c=1;

sigm_e=1;

N=200;

y=zeros(1,N);

u=idinput(N);

ep=wgn(1,N,0);

sigm_ep=1/(N)*sum(ep.^2);

e=sqrt(sigm_e/(sigm_ep))*ep;

for t=3:N

y(t)=-a*y(t-1)+b0*u(t-1)+b1*u(t-2)+c*e(t);

end

figure (5)

subplot(2,1,1);stairs(1:1:N,y,’b’,’linewidth’,2);grid on;axis([1 N -20 20]);ylabel(‘y’);

subplot(2,1,2);stairs(1:1:N,u,’b’,’linewidth’,2);grid on;axis([1 N -2 2]);ylabel(‘u’);xlabel(‘sample’);

% Model A — Least squares تخمین جداقل مربعات برای مدل اول

Phi=zeros(N-1,3);

Y=zeros(N-1,1);

for t=3:N

Phi(t,:)=[-y(t-1),u(t-1),u(t-2)];

Y(t)=y(t);

end

teta=(Phi.’*Phi)\Phi.’*Y;

disp(‘Q3: Least squares estimation’);

disp(‘estimated a=’);disp(teta(1));

disp(‘estimated b0=’);disp(teta(2));

disp(‘estimated b1=’);disp(teta(3));

%Model A — Extended Least squares تخمین حداقل مربعات تعمیم یافته برای مدل اول

Phi=zeros(N-1,4);

Y=zeros(N-1,1);

teta0=[teta(1);teta(2);teta(3);1];

teta=teta0;

for t=3:N

Phi(t,:)=[-y(t-1),u(t-1),u(t-2),y(t-1)-Phi(t-1,:)*teta];

Y(t)=y(t);

if (t<10)

teta=teta0;

else

teta=(Phi(1:t,:).’*Phi(1:t,:))\Phi(1:t,:).’*Y(1:t);

end

end

disp(‘Q3: Extended Least squares estimation’);

disp(‘estimated a=’);disp(teta(1));

disp(‘estimated b0=’);disp(teta(2));

disp(‘estimated b1=’);disp(teta(3));

disp(‘estimated c=’);disp(teta(4));

%Model A — Instrumental variables روش متغیرهای کمکی

Phi=zeros(N-1,3);

Z=zeros(N-1,3);

Y=zeros(N-1,1);

for t=4:N

Phi(t,:)=[-y(t-1),u(t-1),u(t-2)];

Z(t,:)=[u(t-1),u(t-2),u(t-3)]; متغیرهای کمکی انتخاب شده

Y(t)=y(t);

end

teta=(Z.’*Phi)\Z.’*Y;تخمین پارامترها

disp(‘Q3: Instrumental variable estimation’);

disp(‘estimated a=’);disp(teta(1));

disp(‘estimated b0=’);disp(teta(2));

disp(‘estimated b1=’);disp(teta(3));

% Model B — Least squares روش حداقل مربعات برای مدل دوم

Phi=zeros(N-1,3);

Y=zeros(N-1,1);

for t=3:N

Phi(t,:)=[-y(t-1),u(t-1),u(t-2)];

Y(t)=y(t);

end

teta=(Phi.’*Phi)\Phi.’*Y;

disp(‘Q3: Least squares estimation’);

disp(‘estimated a=’);disp(teta(1));

disp(‘estimated b0=’);disp(teta(2));

disp(‘estimated b1=’);disp(teta(3));

%Model B — Extended Least squares روش حداقل مربعات تعمیم یافته برای مدل دوم

Phi=zeros(N-1,5);

Y=zeros(N-1,1);

teta0=[teta(1);teta(2);teta(3);1;1];

teta=teta0;

for t=3:N

Phi(t,:)=[-y(t-1),u(t-1),u(t-2),y(t-1)-Phi(t-1,:)*teta,y(t-2)-Phi(t-2,:)*teta];

Y(t)=y(t);

if (t<10)

teta=teta0;

else

teta=(Phi(1:t,:).’*Phi(1:t,:))\Phi(1:t,:).’*Y(1:t);

end

end

disp(‘Q3: Extended Least squares estimation’);

disp(‘estimated a=’);disp(teta(1));

disp(‘estimated b0=’);disp(teta(2));

disp(‘estimated b1=’);disp(teta(3));

disp(‘estimated c0=’);disp(teta(4));

disp(‘estimated c1=’);disp(teta(5));

%Model B — Instrumental variables روش متغیرهای کمکی برای مدل دوم

Phi=zeros(N-1,5);

Z=zeros(N-1,5);

Y=zeros(N-1,1);

teta0=[teta(1);teta(2);teta(3);1;1];

teta=teta0;

for t=6:N

Phi(t,:)=[-y(t-1),u(t-1),u(t-2),y(t-1)-Phi(t-1,:)*teta,y(t-2)-Phi(t-2,:)*teta];

Z(t,:)=[u(t-1),u(t-2),u(t-3),y(t-4),y(t-5)]; متغیرهای کمکی

Y(t)=y(t);

if (t<10)

teta=teta0;

else

teta=(Z(1:t,:).’*Phi(1:t,:))\Z(1:t,:).’*Y(1:t);

end

end

disp(‘Q3: Instrumental variables estimation’);

disp(‘estimated a=’);disp(teta(1));

disp(‘estimated b0=’);disp(teta(2));

disp(‘estimated b1=’);disp(teta(3));

disp(‘estimated c0=’);disp(teta(4));

disp(‘estimated c1=’);disp(teta(5));

نگران نباشید ما این کد آماده متلب را در انتهای همین پست برای شما قرار داده ایم.

نتایج شبیه سازی را در زیر قرار داده ایم:
حداقل مربعات در متلب حداقل مربعات در متلب حداقل مربعات در متلب حداقل مربعات در متلب
حداقل مربعات در متلب


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

راهنمای نوشتن و کار با MEX. در متلب (MATLAB) توسط زبان برنامه نویس ++C
شاید برای شما سوال بوجود آمده باشد که چرا باید از فایل mex در متلب استفاده کنیم. یکی از مزیت های مهم این کار بخاطر افزایش سرعت اجرای برنامه متلب است. MATLAB یک زبان ترجمه شده (interpreted) ست که در اون هر عملیات نیاز به پردازش اضافی داره. در زبان‌های تفسیر شده مثل C یا C++‎ این زمان اضافی رو نداریم. MATLAB دارای مکانیزم ایجاد کد بصورت لحظه ای و فوری هست که این مشکل را در مواردی کاهش می‌ده.
تعریف (Nomenclature): کامپایلر (Compiler)، متلب (MATLABTM
کنسول (Console, MATLAB Command Window )، فایل ساده (eg: hello.cpp )
قبل از هر اقدامی، از وجود کامپایلر C++ در کامپیوتر خود مطمئن شوید. این کار با اجرای یک فایل ساده قابل آزمایش است. در غیر اینصورت نرم افزار Visual Studio 2012 Ultimate را بطور کامل نصب کنید. این نرمافزار شامل کامپایلر مذکور میباشد.

  • فایل ساده (hello.cpp) را در مسیر متلب قرار دهید.
  • با دستور

>> mex -setup
کامپایلر مورد نظر را به عنوان کامپایلر پیشفرض در متلب تعریف کنید. بعد از تایپ این دستور، ملاحظه خواهید فرمود:
Welcome to mex -setup. This utility will help you set up
a default compiler. For a list of supported compilers, see
http://www.mathworks.com/support/compilers/R2011a/win32.html
Please choose your compiler for building MEX-files:
Would you like mex to locate installed compilers [y]/n?
پاسخ دهید: Yes با تایپ y
Would you like mex to locate installed compilers [y]/n?y
خواهید دید:
Select a compiler:
[1] Lcc-win32 C 2.4.1 in D:\PROGRA~1\MATLAB\R2011a\sys\lcc
[0] None
Compiler:
انتخاب کنید: 1
Compiler: 1
مجددا تایید کنید:
Please verify your choices:
Compiler: Lcc-win32 C 2.4.1
Location: D:\PROGRA~1\MATLAB\R2011a\sys\lcc
Are these correct [y]/n? 1

  • اکنون زمان کامپایل کردن فایل ساده (hello.cpp) با دستور زیر است:

>> mex hello.cpp
توجه داشته باشید که انتخاب زیر، نسبت به انتخاب فوق، دارای استقلال نسبت به سیستمهای نصب شده در کامپیوتر شما میباشد (Independent from the Platform):
>> mex -win32 hello.cpp

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

>> hello
Hello, world!
مثالهای آماده در متلب در دایرکتوری extern/examples/mex/ موجود است که میتوان حتی آنرا با دستور زیر، ادیت و اصلاح نمود:
>> edit([matlabroot ‘/extern/examples/mex/explore.c’])
کد ساده (hello.cpp)

% hello.cpp

#include “mex.h” /* Always include this */

void mexFunction(int nlhs, mxArray *plhs[], /* Output variables */

int nrhs, const mxArray *prhs[]) /* Input variables */

{

mexPrintf(“Hello, world!\n”); /* Do something interesting */

return;

}

خب توضیحات بالا یک مثال عامیانه و مبتدی در این زمینه بود
حالا دقیق تر به این مورد می پردازیم.
همانطور که می دانید سرعت اجرای حلقه ها و دستورات کنترلی در متلب پایین است. سه روش برای بهبود سرعت پردازش ها وجود دارد: preallocation، بردارسازی و استفاده از توابعی به نام MEX File
پیش تعریف کردن آرایه ها و بردارسازی برنامه که نیازی به توضیح زیادی ندارد و کسانی که با زبان متلب آشنایی داشته باشند می توانند به راحتی آن را پیاده سازی کنند.
و اما MEX Fileها. در برخی شرایط که استفاده از بردارسازی ممکن نباشد یا حتی استفاده از آن، سرعت اجرای برنامه را به دلیل افزایش کاربرد حافظه کاهش بدهد, در این شرایط باید حلقه‌ها و توابع را تبدیل به فایل‌های MEX نمود. فایل‌های MEX مانند توابع داخلی MATLAB، فایل‌های کامپایل شده هستند. بنابراین بسیار سریع هستند. کار با توابعی که بصورت فایل MEX در آمده‌اند بسیار ساده است. این توابع مانند دیگر توابع می‌توانند بطور مستقیم توسط MATLAB فراخوانده بشوند. در MATLAB با کاربرد دستور mex ، فایل‌های MEX مبتنی بر C یا Fortran ایجاد کرد.
برای اجرای فایل های MEX نیاز هست که ابتدا کامپایلر آن را با کپی دستور زیر در Command window نصب نمود.

1
mex       -setup

اما قبل از آن لازم هست ابتدا ++visual C را به همراه windows sdk نصب کنید. در صورتی که نصب windows sdk با مشکل مواجه شد ابتدا از کنترل پنل این دو برنامه را حذف کنید:
Microsoft Visual C++‎‎ 2010 x86 Redistributable
Microsoft Visual C++‎‎ 2010 x64 Redistributable
بعد windows SDKs رو می شود نصب کرد. بعد از آن نصب کامپایلر Mex با کدی که در بالا نوشته شده. همینطور بعد از آن می شود دوباره ورژن جدید ++C نصب کرد و به تنظیمات قبل برگشت.
حالا نوبت نوشتن و یا تبدیل کد متلب به کد زبان C یا C++‎ است. به دو طریق می توان Mex File رو ایجاد کرد. روش اول به این صورت است که با استفاده از محیط متلب و یا C++‎ تابعی که در واقع گلوگاه برنامه ما و زمانبر هست رو خودمان به صورت دستی بنویسیم که این کار نیاز به آشنایی به سینتکس های زبان C یا C++‎ دارد که با توجه به اینکه زبان متلب شبیه این دو زبان هست کار سختی نیست. مشکل این روش خطایابی آن هست که کمی پیچیده است. با Mex File می توانید از توابع دیگر در متلب ورودی دریافت کنید و یا خروجی Mex File را به توابع دیگر در متلب بدهید. برای این کار لازم هست بلد باشید با چه دستوری یک متغیر یا پارامتر را به عنوان ورودی دریافت کنید و با چه دستوری خروجی را به توابع دیگر ارسال کنید. در لینک زیر با همه این دستورات آشنا میشید. (نیاز به ف ی ل ت ر ش ک ن)
http://www.shawnlankton.com/2008/03/…hort-tutorial/
راه خیلی ساده تری هم وجود دارد, اینکه از طریق برنامه متلب خیلی راحت کد نوشته شده را تبدیل به Mex file کنید و راحت آن را اجرا کنید. تقریبا بدون هیچ دردسری! در ویدئویی که لینکش رو می زارم خیلی راحت میتونید این کارو انجام بدید. تنها با دیدن چند دقیقه ابتدایی و چند دقیقه انتهایی میتونید کد متلب رو به Mex File تبدیل کنید. (نیاز به ف ی ل ت ر ش ک ن)
http://www.youtube.com/watch?v=IZJ-IlI3QR0
استفاده از Mex File به طور چشمگیری سرعت اجرای برنامه را بالا می برد. در تجربه من زمان اجرای یک برنامه را از 7 دقیقه به 4 ثانیه، همان مسئله در ابعاد بزرگتر از 45 دقیقه به 9 ثانیه (!) کاهش داد و باز همان مسئله در ابعاد خیلی بزرگتر که قبل از استفاده از Mex File بعد از 5 ساعت به هیچ جوابی نرسیده بودم بعد از استفاده از Mex File ، بعد از 45 دقیقه به جواب آخر رسیدم
شاید علاقه مند باشید مطالب زیر را هم ببینید:

برای شروع به کار با متلب بایستی شناخت خوبی نسبت به دستوارت متلب داشت. برای همین دستورات پر کاربردی را در ذیل جهت معرفی آورده ایم:

ایجاد ماتریس:
A=[1,2,3 ; 4,5,6]
A=[1:10]
A=[1:2:10]
A=[10:-1:1]
A=zeros(2,3) ایجاد ماتریس 2 در3 با مقادیر صفر
A=ones(4,6) ایجاد ماتریس 4 در6 با مقادیر یک
ترانهاده ماتریس A:
T=A’
دستیابی به یک یا چند مقدار از یک ماتریس:
A(2,3) عنصر سطر2 ستون 3
A(:,2) عناصر ستون 2
A(1,:) عناصر سطر 1
A(3:6, 2:4) ستونهای 2 تا 4 از سطرهای 3 تا 6
دستیابی به ستون آخر یک ماتریس:
A(:,end)
مجموع ستونهای یک ماتریس دو بعدی (و یا مجموع مقادیر یک ماتریس یک بعدی):
sum(A)
sum(A’)’ مجموع سطرهای یک ماتریس دو بعدی
بدست آوردن مقادیر روی قطر اصلی A:
diag(A)
ایجاد ماتریس جادویی n×n: (ماتریس جادویی ماتریسی است که مجموع تمام سطرها و ستونها و قطرهای آن برابر است)
magic(n)
می خواهیم جای ستونهای دوم و سوم در ماتریس B را جابهجا کرده و نتیجه را در A ذخیره نماییم:
A=B(: , [1,3,2,4])
توابع مقدماتی پرکاربرد:

  • abs(A)
  • exp(A)
  • sin(A)
  • sqrt(A)
  • factorial(n)
  • log2(A) لگاریتم در مبنای 2
  • log10(A) لگاریتم در مبنای 10

برای مشاهده لیست توابع مقدماتی عبارت help elfun را تایپ کنید.
عملگرهای محاسباتی:

  • A=B+C جمع ماتریسی
  • A=B-C تفریق ماتریسی
  • A=B*C ضرب ماتریسی
  • A=B .* C ضرب عناصر متناظر در یکدیگر
  • A=B ./ C تقسیم عناصر متناظر بر یکدیگر
  • A=B .^ C به توان رساندن هر عنصر به عنصر متناظرش

اگر B یک ماتریس n×m باشد و C یک عدد اسکالر (یک ماتریس 1×1) باشد آنگاه عملگرهای فوق مقدار موجود در C را در تک تک مقادیر B اِعمال میکنند. بنابراین عبارت A=B+1 تک تک مقادیر B را با 1 جمع کرده و در A ذخیره میکند. عبارت A=B.^2 نیز تک تک مقادیر B را به توان 2 رسانده و نتیجه را در A ذخیره میکند.
روشی بدست آوردن باقیمانده تقسیم:
A=mod(B,C)
ایجاد یک ماتریس 3×4 از اعداد تصادفی که دارای توزیع یکنواخت بین 0 تا 1 میباشند:
A=rand(3,4)
ایجاد یک ماتریس 3×4 از اعداد تصادفی بین a تا b
A=floor((b-a+1)*rand(3,4)+a)
ایجاد یک ماتریس 1×n که اعداد صحیح 1 تا n به ترتیب تصادفی در آن قرار گرفتهاند:
A=randperm(n)
ایجاد ماتریس با n×m که در هر سطر عناصر 1 تا m به طور تصادفی قرار داده شده اند
for i=1:n
A(i,:)=randperm(m);
end
روند کردن اعداد:

  • A=fix(B) گرد کردن به سمت صفر
  • A=round(B) گرد کردن به سمت نزدیک ترین عدد صحیح(براساس رقم اعشار)
  • A=ceil(B) گرد کردن به سمت مثبت بینهایت
  • A=floor(B) گرد کردن به سمت منفی بینهایت

مرتب کردن هر یک از ستونهای ماتریس B بطور جداگانه:
A=sort(B)
مرتب کردن سطرهای ماتریس B ابتدا بر اساس ستون اول سپس ستون دوم و الی آخر:
A=sortrows(B)
مرتب کردن سطرهای ماتریس B فقط بر اساس ستون سوم:
A=sortrows(B,3)
حذف ستون دوم ماتریس A:
A(: , 2) = []
میانگین هر یک از ستونهای ماتریس B:
A=mean(B)
میانه هر یک از ستونهای ماتریس B:
A=median(B)
انحراف از معیار هر یک از ستونهای ماتریس B:
A=std(B)
مینیمم هر یک از ستونهای ماتریس B:
A=min(B)
ماکسیمم هر یک از ستونهای ماتریس B:
A=max(B)
یافتن اندیس عددهای غیر صفر در ماتریس B:
A=find(B)
یافتن اندیس سطر و ستون خانه مساوی 2 ماتریس B:
[i,j]=find(B==2)
یافتن اندیس سطر و ستون خانه مساوی 2 در سطر سوم از ماتریس B:
[i,j]=find(B(3,:)==2)
یافتن اندیس عددهای بین 1 تا 5 در ماتریس B:
A=find(A>1 & A<5)
جمع تجمعی عناصر ماتریس B:
A=cumsum(B)
حاصل ضرب عناصر ماتریس B:
A=prod(B)
تولید n عدد در فواصل مساوی که از a شروع و به b ختم میشود:
A=linspace(a,b,n)
ترسیم دو بعدی y برحسب x:
plot(x,y)
ترسیم سه بعدی:
plot3(x,y,z)
دستور زیر مقادیری از B که از 6 بزرگتر است را در A ذخیره میکند:
A=B(B>6)
شیفت دادن چرخشی: دستور زیر ماتریس B را یک واحد در جهت عمودی (از بالا به پایین) و دو واحد در جهت افقی (از راست به چپ) شیفت چرخشی میدهد.
A=circshift(B, [1, -2])
دستور زیر ابعاد یک ماتریس را برمیگرداند:
size(A)
دستور زیر طول یک بردار را برمیگرداند: (اگر A دارای بیش از یک بعد باشد، طول طولانیترین بعد برگردانده میشود)
length(A)
با دستور زیر میتوان تابع f را در محیط editor مشاهده کرد و در صورت دلخواه آن را تغییر داد. با این دستور حتی میتوان توابع خود MATLAB را نیز ویرایش نمود.
edit f
دستور زیر ماتریس B را بصورت تنک (خلوت) در A ذیره میکند. اگر تعداد زیادی از مقادیر یک ماتریس برابر با صفر باشد با این روش میتوان در تخصیص حافظه صرفهجویی کرد.
A = sparse(B)
دستور زیر ماتریس B را از حالت تنک به حالت کامل تبدیل کرده و در A ذخیره میکند.
A = full(B)
توابع مخصوص رشتهها:

  • strcat متصل کردن دو رشته
  • strcmp مقایسه دو رشته
  • strcmpi مقایسه دو رشته صرفنظر از بزرگ یا کوچک بودن حروف

تمام جایگشتهای ممکن مقادیر یک بردار:
perms(A)
حذف مقادیر تکراری از یک بردار:
unique(A)
نمایش هیستوگرام مقادیر یک ماتریس:
hist(A,…)
دستورات کار با تصاویر:

  • I=imread(‘pic1.jpg’) خواندن تصویر
  • imshow(I) نمایش تصویر
  • imwrite(I, ‘pic2.gif’) ذخیره تصویر
  • figure باز کردن پنجره جدید برای عکس بعدی تا عکس قبلی از بین نرود

اشتراک دو مجموعه:
intersect(A,B)
دستورات برنامه نویسی در متلب:

ابن دستورات شامل تکرارها و شروط در متلب می شوند:
حلقه ها
for i=start : end
دستورات
end
while(شرط)
دستورات
end
if(شرط)
دستورات
end
اجرای برنامه تا فشردن یک کلید متوقف میماند:
pause
اجرای برنامه به مدت n ثانیه متوقف میماند:
pause(n)
در عبارت زیر اولین گروه از دستورات اجرا میشوند. اگر خطایی رخ دهد اجرای این دستورات متوقف شده و دومین گروه از دستورات اجرا میشود.
try
statements
catch
statement
end
با دستور زیر میتوان محیط ایجاد رابط کاربر گرافیکی را مشاهده کرد.
guide
با دستور زیر میتوان مدت زمان اجرای هر یک از خطوط برنامه را مشاهده کرد.
profile {on, off, viewer}
نمایش پیغام: نحوه استفاده از این دستور همانند printf() در زبان C است.
fprintf(‘\n i=%d’, i)
نمایش پیغام خطا و خروج از اجرای برنامه:
error(‘your error message’)
 
شاید علاقه مند باشید مطالب زیر را هم ببینید:
 

 

در اين پست آموزشی با روش حذف نويز تصوير در محيط نرم افزار  متلب آشنا مي شويم.

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

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

درمورد دوم، حذف نويز با هدف بهبود کيفيت تصوير جهت بازرسي بصري به کار مي رود.

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

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

حذف نويز يکي از مهم ترين کاربردهاي ويولت محسوب مي شود. براي شروع کار، ابتدا دستور wavemenu را در محيط Command نرم افزار
MATLAB تايپ کنيد و سپس بر روي کليد Enter  فشار دهيد.

شکل1، جعبه ابزار ويولت به منظور حذف نويز را نشان مي دهد.

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

تصوير لنا در شکل2 نشان داده شده است. براي حذف نويز ابتدا Wavelet 2-D را انتخاب کنيد.

از منوي File -> Load -> Image و در مسير toolbox/wavelet/wavedemo فايل noiswom.mat را انتخاب کنيد.

اين تصوير، يک تصوير نويزي است که به عنوان ورودي مي تواند مورد استفاده قرار گيرد.

تصوير نويزي مطابق شکل3 است.

wavelet menu

شکل(1)جعبه ابزار ویولت

تحليل حذف نويز را به کمک ويولت دابيچز (db) و در دو سطح تجزيه انجام دهيد. نتيجه تحليل به صورت شکل 4 است.

همان طور که در اين شکل مشاهده مي شود، چهار تصوير ظاهر شده است

lena

شکل(2): تصویر lena

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

تصویر نویزی در متلب

شکل(3): تصویر نویزی

 

waveletmenu matlab
شکل4) آناليز ويولت تصوير نويزي

حال دکمه De-noise  در سمت راست و وسط پنجره را فشار دهيد تا پنجره مربوط به فرآيند حذف نويز مطابق شکل5 باز شود.

denoise matlab
شکل5) فرآيند حذف نويز

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

از منوي Select Thresholding Method گزينه  Penalize low را انتخاب کنيد و سپس دکمه ي De-noise را فشاردهيد. نتيجه به صورت شکل6 است.

همان طور که ملاحظه مي شود، در تصوير حذف نويز شده، اثر بلوکي به چشم مي خورد.

شدت اين اثر اگر نوع آستانه گيري را Penalize High انتخاب کنيد، بيشتر مي شود.

شکل7 نمايش تصوير حذف نويز شده با استفاده از Penalize high را نشان مي هد.

Penalize low
شکل6) نمايش تصوير اصلي و حذف نويز شده با آستانه Penalize low

Penalize high
شکل7) نمايش تصوير اصلي و حذف نويز شده با آستانه Penalize high

يک راه براي کاهش اثر بلوکي استفاده از تبديل ويولت ايستان SWT (Stationary Wavelet Transform) است.
تبديل DWT معمولي داراي خاصيت تغييرناپذيري بازمان نيست. براي داشتن تقريبيِ چنين خاصيتي از تبديل SWT مي توان استفاده کرد.
در اين تبديل بين چند تصوير خروجي، ميانگين گرفته مي شود. هر تصوير خروجي، حاصل از يک تبديل DWT معمولي اما با ضرايب درونيابي شده (ɛ-Decimated) است.

براي استفاده از  SWT در اين آموزش، از پنجره اصلي انتخاب روش تحليل، از منوي Specialized Tools 2-D روش SWT Denoising 2-D را انتخاب کنيد.
به همان شيوه بيان شده، تصوير نويزي را بارگذاري کنيد.
ويولت دابيچز با دو سطح تجزيه را انتخاب کرده و
Penalize low

شکل8): نمایش تصویر اصلى و حذف نویز شده با آستانه Penalize low
به روش SWTو db2

 

دکمه Decompose Image دهيد.

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

همچنين به کمک تنظيم نوار لغزان Sparsity مقدار آستانه را در حدود 50 قرار دهيد تا مقداري مشابه آزمايش قبل بوده و در نتيجه مقايسه نتايج صحيح و معتبر باشد.

حال دکمه De-noise را فشار دهيد.

انجام پروژه متلب با سایت متلبی

نتيجه نهايي بدست آمده به صورت شکل8 است.
ملاحظه مي شود که نتيجه نسبت به آزمايش قبلي، قابل قبول تر است. البته اين نتيجه را باز هم مي توان بهتر کرد.

مایش تصویر اصلى و حذف نویز شده با آستانه low Penalizeبه روش SWTو

شکل 9):  نمایش تصویر اصلى و حذف نویز شده با آستانه low Penalizeبه روش SWTو sym6

 

براي اين کار از ويولت  sym6استفاده کنيد. نتيجه کار به صورت شکل9 خواهد بود.

این یکی از کاربرد های waveletmenu در متلب است.

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

دستور demo در متلب, پنجره جديدي باز مي كند كه شما در آن مي توانيد مثالهاي متعددي از امكانات نرم افزار MATLAB را ببینید. بسياري از اين مثالها نمودارهاي جالب و همراه با جزئيات توليد مي نمايند و توضيحات مفيدي درباره نحوه استفاده از MATLAB ارائه مي دهند. توصيه مي شود كه حتما تعدادي از اين مثالها را مشاهده كنيد كه چه كارهايي مي توان با MATLAB انجام داد. بويژه دقت كنيد كه چگونه برنامه هاي ساده مي توانند نتايج پيچيده اي  توليد نمايند.
شاید به موارد زیر نیز علاقه داشته باشید