رفتن به مطلب

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


Yaser.C

ارسال های توصیه شده

اینکه شرایط اولیه را صفر گذاشتین درست ولی در کل فرم ماتریس phi را اگه ازمون بخوان باید به اون صورت که گذاشتم انجامش داد.

 

حالااا یه سوال چه موقع میشه تشخیص داد که باید شرایط اولیه رو صفر گذاشت یا نع :ws52:؟

y(t)=-1.1*y(t-1)-.3*y(t-2)+u(t-1)+.6*u(t-2)

 

اگه دترمینان Phi)T*Phi ) صفر بشه و ما شرایط اولیه را صفر نگذاشته باشیم

اون وقت برای به دست آوردن ضرایب تخمین دچار مشکل میشیم.

حالا چه میشه کرد؟:w000:

شرایط اولیه را صفر میذاریم .و میبینیم که مشکل حل شده و ضرایب دقیق در میاد:hapydancsmil:

حالا جرا وقتی شرایط اولیه رو صفر گذاشتیم مشکل حل شد:5c6ipag2mnshmsf5ju3

چون سیستم ما تاخیر دار بوده

در مثالی که شما گذاشتین دترمینان Phi)T*Phi

صفر نشد در نتیجه مشکلی برامون درست نکرد به خاطر همین من شرایط اولیه رو گذاشتم چون شمام حرفی نزده بودی از شرایط اولیه:gnugghender:

  • Like 3
لینک به دیدگاه

من با اجازتون یه الگریتم wls طراحی کردم که جوابهای تخمین فوق العادست منتها تو این الگریتم احتیاج به معادله دقیق ریاضی دارم

 

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

y(t) = -a1*y(t-1) -a2*y(t-2) +b0*u(t-1) + b1*u(t-2)

 

x=[.359 .869 -.233 .0388 .662 -.931 -.893 .0594 .342 -.985]';

 

y=[-2.75 -2.16 -.271 1.31 2.07 2.88 2.26 .0233 -1.94 -2.55]';

حالا به نظرتون من چه کنم که بتونم معادله دقیق ریاضی را به دست بیارم؟

در واقع معادله تفاضلی تشکیل بدم که یه خطایی درش در نظر گرفته شده باشه مثل معادله بالا

که بتونم معادله دقیق ریاضی را پیدا کنم:4564:چه میشه کرد؟

  • Like 2
لینک به دیدگاه

%e=randn(10,1)

 

 

for t=1:100

if t==1

U(t,:)=[0 0 0 0 e(1) 0];

else if t==2

U(t,:)=[y(1) 0 u(1) 0 e(2) e(1)];

else

 

 

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

end

end

end

Theta_hat_direct=pinv(U)*y

این کاری که واسه eانجام دادم به نظرتون درسته؟

  • Like 2
لینک به دیدگاه
  • 4 هفته بعد...

سلام یاسر جااااان

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

اگه ممکنه تو این مورد یه توضیحی بدهید اگه کد متلبش رو هم مثال بزنید خیلی عااالی میشه:ws38::ws38::ws38::ws52::ws52::ws52:

y(n) = -c*y(n-1) + a*u(n-m) + b*u(n-m-1) :equatin

مجهولای من a , b ,c و تأخیر ورودی m میباشد

بسیار سپاسگزارم:icon_gol::icon_gol:

  • Like 2
لینک به دیدگاه
  • 4 ماه بعد...

سلام و درود به همه ی دوستای عزیزم

آقا یاسر سلام

درود برشما

آقا میشه ادامه ی بحث رو بگذارید

خیلی مطالب قبلیتون کمکم کرد

اگه میشه با توضیحاتت بیشتر بهمون کمک کنید

ممنونم ازت بخاطر این لطف و بزرگواریت

  • Like 1
لینک به دیدگاه
  • 2 هفته بعد...

با سلام خدمت شما دوستان عزیز

یک سوال شناسایی داشتم که ممنون میشم اگر بهم کمک کنین.تازه کارم تو این زمینه :ws52:

 

معادله سیستمی به فرم زیر داریم:

Ay=Bu+We

A=1+0.5q^-1

B=q^-1

W=(1+0.2q^-1)/(1+0.6q^-1)

حالا بافرض ورودی پله یعنی همونu و e هم نویز سفید(میانگین صفر و واریانس 1) خروجی رو میخوام بدست بیارم.

در نظر خودم،با در نظر گرفتن مدل سیستم به عنوان مدل ARMAX،طبق این مدل اگر سیگنال خطا نویز سفید باشه در نتیجه

(C^-1)=1 که در اینجا همون w=1 میشه پس مدل بصورت زیر بدست می آید.Ay=Bu+e…….>>>y=(B/A)*u + (1/A)*e………>>>>>y=( (q^-1)/(1+0.5q^-1) ) *u + ( 1/(1+0.5q^-1) )*e

 

فایل متلبش رو اینطور نوشتم:

clc

clear all

('z=tf('z

;(G1=1/(z+0.5

;(G2=z/(z+0.5

;t=0:1:100

;(y1,t]=step(G1,t]

;(y2,t]=step(G2*randn,t]

;Y=y1+y2

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

 

نمیدونم تا اینحا درسته انجام دادم یا نه. دوستان لطفا راهنماییم کنید.ممنون:a030:

  • Like 1
لینک به دیدگاه
  • 4 هفته بعد...

%e=randn(10,1)

 

 

for t=1:100

if t==1

U(t,:)=[0 0 0 0 e(1) 0];

else if t==2

U(t,:)=[y(1) 0 u(1) 0 e(2) e(1)];

else

 

 

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

end

end

end

Theta_hat_direct=pinv(U)*y

این کاری که واسه eانجام دادم به نظرتون درسته؟

 

نه غلطه!!! خط اولت غلطه درصد نباید بذاری!!هلپ متلب رو بخون دستت میاد دستور randn چه جور کار میکنه:icon_gol:

  • Like 4
لینک به دیدگاه
سلام یاسر جااااان

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

اگه ممکنه تو این مورد یه توضیحی بدهید اگه کد متلبش رو هم مثال بزنید خیلی عااالی میشه:ws38::ws38::ws38::ws52::ws52::ws52:

y(n) = -c*y(n-1) + a*u(n-m) + b*u(n-m-1) :equatin

مجهولای من a , b ,c و تأخیر ورودی m میباشد

بسیار سپاسگزارم:icon_gol::icon_gol:

 

علیک سلام امین جااااان!!!:ws3:

 

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

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

  • Like 3
لینک به دیدگاه
سلام و درود به همه ی دوستای عزیزم

آقا یاسر سلام

درود برشما

آقا میشه ادامه ی بحث رو بگذارید

خیلی مطالب قبلیتون کمکم کرد

اگه میشه با توضیحاتت بیشتر بهمون کمک کنید

ممنونم ازت بخاطر این لطف و بزرگواریت

 

منم به همه دوستان سلام میکنم!! (مثه اینکه فقط مهرداد دوست ماس!!:ws3:)

 

علیک سلام آقا عقیل:icon_gol:

 

و همچنین دورود بر شما!!!(مگه درود همون سلام نیس؟؟؟:whistle:)

 

آقا من فعلا خسته ام!!! خسته!!!! روشنه؟؟؟؟؟:w000:

نه جدا باس یه کم ذهنمو جمع و جور میکنم اگه زنده باشم یه چن تا مطلب کوچیک میذارم...اگه سوالی بود شما بپرسید..در حد سوادم باشه حتما جواب میدم..:w16:

  • Like 3
لینک به دیدگاه
با سلام خدمت شما دوستان عزیز

یک سوال شناسایی داشتم که ممنون میشم اگر بهم کمک کنین.تازه کارم تو این زمینه :ws52:

 

معادله سیستمی به فرم زیر داریم:

Ay=Bu+We

A=1+0.5q^-1

B=q^-1

W=(1+0.2q^-1)/(1+0.6q^-1)

حالا بافرض ورودی پله یعنی همونu و e هم نویز سفید(میانگین صفر و واریانس 1) خروجی رو میخوام بدست بیارم.

در نظر خودم،با در نظر گرفتن مدل سیستم به عنوان مدل ARMAX،طبق این مدل اگر سیگنال خطا نویز سفید باشه در نتیجه

(C^-1)=1 که در اینجا همون w=1 میشه پس مدل بصورت زیر بدست می آید.Ay=Bu+e…….>>>y=(B/A)*u + (1/A)*e………>>>>>y=( (q^-1)/(1+0.5q^-1) ) *u + ( 1/(1+0.5q^-1) )*e

 

فایل متلبش رو اینطور نوشتم:

clc

clear all

('z=tf('z

;(G1=1/(z+0.5

;(G2=z/(z+0.5

;t=0:1:100

;(y1,t]=step(G1,t]

;(y2,t]=step(G2*randn,t]

;Y=y1+y2

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

 

نمیدونم تا اینحا درسته انجام دادم یا نه. دوستان لطفا راهنماییم کنید.ممنون:a030:

 

و خدمت شما دوست عزیز!!:ws3:

بله درسته مدل شما آرمکس هست...

خو غلط نوشتی مسلمان!!! این چیه از خودت در آوردی؟؟!

;(y2,t]=step(G2*randn,t]

مگه تابع تبدیل رو تو نویز ضرب میکنن؟؟؟

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

  • Like 2
لینک به دیدگاه
  • 5 ماه بعد...
×
×
  • اضافه کردن...