Обробка результатів вимірювань

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра електронних обчислювальних машин

Інформація про роботу

Рік:
2005
Тип роботи:
Звіт про виконання лабораторної роботи
Предмет:
Моделювання

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра електронних обчислювальних машин Звіт про виконання лабораторної роботи № 4 з курсу „ Моделювання ” Тема: Обробка результатів вимірювань за допомогою методів регуляризації. Львів – 2005 Мета роботи: Відновити форму вхідного сигналу за його виміряними дискретними значеннями, отриманими на виході лінійної системи. Завдання до роботи: Знайти часову залежність для вхідного сигналу , якщо відомо, що графік сигналу із виходу аналого-цифрового перетворювача має наступний вигляд:  Файл експериментальних даних знаходиться в таблиці. Кожен рядок файлу вимірювань складається із 2 числових значень – значення часу і відповідне йому значення напруги, виміряне за допомогою аналого-цифрового перетворювача. Як видно із графіка, сигнал дещо спотворений шумами вхідного підсилювача і перетворювача. В якості регуляризуючого функціоналу можна взяти наступні функції: а)  б)  За комплексний частотний коефіцієнт передачі підсилювача взяти наступне співвідношення:   Дана характеристика відповідає підсилювачу, який має лише один полюс частотної характеристики. Реальні підсилювачі, як правило, описуються значно складнішими співвідношеннями. При виконанні роботи необхідно визначити оптимальні значення параметрів регуляризації , враховуючи, що в вхідний сигнал підсилювача складається із суми прямокутних імпульсів. При застосуванні регуляризуючої функції типу 2б необхідно обчислити числові значення інтегралу нев’язки за наступними співвідношенням:   Для обчислення інтегралу можна скористатись формулами прямокутників або трапецій. Як приклад, наведемо залежність значень вхідного сигналу від часу без використання методів регуляризації (шляхом прямого застосування формули (4)) та відповідну залежність, знайдену із використанням регуляризуючого множника. Текст програмної реалізації unit Main; interface uses Math,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, TeEngine, Series, ExtCtrls, TeeProcs, Chart; type TForm1 = class(TForm) BitBtn1: TBitBtn; Image1: TImage; BitBtn2: TBitBtn; Memo1: TMemo; Button1: TButton; Edit1: TEdit; Image2: TImage; Label1: TLabel; Label2: TLabel; procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; const Np=76; type ArrMatr=array[1..Np,1..Np] of Extended; var Form1: TForm1; VAH:array[1..2,1..Np] of Double=( {Ud,V}(1.0E-03,0.10101,0.20202,0.30303,0.40404,0.50505,0.60606,0.70707,0.80808,0.90909,1.0101,1.11111,1.21212,1.31313,1.41414,1.51515,1.61616,1.71717,1.81818,1.91919,2.0202,2.12121,2.22222,2.32323,2.42424,2.52525,2.62626,2.72727,2.82828,2.92929,3.0303,3.13131,3.23232,3.33333,3.43434,3.53535,3.63636,3.73737,3.83838,3.93939,4.0404,4.14141,4.24242,4.34343,4.44445,4.54545,4.64647,4.74747,4.84849,4.94949,5.05051,5.15151,5.25253,5.35353,5.45455,5.55556,5.65657,5.75758,5.85859,5.95960,6.06061,6.16162,6.26263,6.36364,6.46465,6.56566,6.66667,6.76768,6.86869,6.96970,7.07071,7.17172,7.27273,7.37374,7.47475,7.57576), {Id,A}(7.45457E-6,2.43832E-4,4.68852E-4,6.84301E-4,8.77114E-4,0.00108,0.00126,0.00144,0.0016,0.00176,0.0019,0.00204,0.00217,0.00228,0.00239,0.00249,0.00259,0.00267,0.00274,0.0028,0.00284,0.00289,0.00292,0.00295,0.00297,0.00298,0.00298,0.00297,0.00295,0.00292,0.00289,0.00284,0.00279,0.00273,0.00267,0.0026,0.00251,0.00243,0.00235,0.00225,0.00216,0.00207,0.00197,0.00187,0.00178,0.00167,0.00158,0.00149,0.00139,0.0013,0.00121,0.00112,0.00103,9.40321E-4,8.66034E-4,7.89536E-4,7.16527E-4,6.44088E-4,5.70496E-4,5.04513E-4,4.40479E-4,3.77542E-4,3.20819E-4,2.66671E-4,2.18542E-4,1.74533E-4,1.33869E-4,1.00213E-4,7.03066E-5,4.73798E-5,2.93464E-5,1.61997E-5,7.90947E-6,2.0467E-6,1.00E-09,1.00E-10)); (*VAH:array[1..2,1..Np] of Double=((1,2,3,4,5,6,7) ,(0.00087,0.00100,0.002,0.00290,0.00230,0.001,0.00050));*) B:ArrMatr; Y:array[1..Np] of Extended; A:array[1..Np] of Extended; L:ArrMatr; Z:array[1..Np] of Extended; Ub:Double; implementation procedure LUDecomposition(var A : ArrMatr; N : Integer; var L : ArrMatr);forward; {procedure LUDecomposition(var A : ArrMatr; N : Integer; var L : ArrMatr); var i : Integer; j : Integer; k : Integer; begin i:=1; while i<=n-1 do begin j:=i+1; while j<=n do begin A[j,i] := A[j,i]/A[i,i]; Inc(j); end; j:=i+1; while j<=n do begin k:=i+1; while k<=n do begin A[j,k] := A[j,k]-A[j,i]*A[i,k]; Inc(k); end; Inc(j); end; Inc(i); end; I:=1; while I<=N do begin L[I,I] := 1; J:=1; while J<=I-1 do begin L[I,J] := A[I,J]; A[I,J] := 0; Inc(J); end; J:=I+1; while J<=N do begin L[I,J] := 0; Inc(J); end; Inc(I); end; end; } procedure LUDecomposition(var A: ArrMatr; N : Integer; var L : ArrMatr); var i : Integer; j : Integer; k : Integer; q:Integer; sum:Double; begin for q:=1 to N-1 do begin i:=q; for j:=i+1 to N do begin sum:=0; for k:=1 to i-1 do sum:=sum+a[i,k]*a[k,j]; a[i,j]:=(a[i,j]-sum)/a[i,i]; end; j:=q+1; for i:=j to N do begin sum:=0; for k:=1 to j-1 do sum:=sum+a[i,k]*a[k,j]; a[i,j]:=a[i,j]-sum; end; end; for i:=1 to N do for j:=1 to N do begin L[i,j]:=a[i,j]; if j>i then L[i,j]:=0; end; for i:=1 to N do for j:=1 to N do begin if j=i then a[i,j]:=1; if j<i then a[i,j]:=0; end; end; {function power(Base, Exponent: Extended): Extended; var ex: extended; begin power := 0; if (exponent <> 0) and (frac(trunc((1 / exponent) * 1000000) / 1000000) = 0) and (base < 0) then begin if round(1 / exponent) mod 2 = 0 then exit; ex := Exp(Exponent * Ln(-Base)); power := -ex; end else begin if Exponent = 0.0 then power := 1.0 else if (Base = 0.0) and (Exponent > 0.0) then power := 0.0 else if (Frac(Exponent) = 0.0) and (Abs(Exponent) <= MaxInt) then power := IntPower(Base, Integer(Trunc(Exponent))) else power := Exp(Exponent * Ln(Base)) end; end;} function myfun(x:double;num:Integer):double; var i:Integer; tmp:double; begin tmp:=0; for i:=1 to num do tmp:=tmp+A[i]*power(x,i-1); myfun:=tmp; end; procedure TForm1.BitBtn1Click(Sender: TObject); var x,y,i:Integer; begin Image1.Canvas.MoveTo(0,300); Image1.Canvas.Pen.Width:=2; for i:=1 to Np do begin x:=round(VAH[1,i]*100); y:=300-round(VAH[2,i]*1e5); Image1.Canvas.Pixels[x,y]:=clRed; Image1.Canvas.LineTo(x,y); Image1.Canvas.Pixels[x,y]:=clRed; end; Image1.Canvas.Pen.Color:=clRed; Image1.Canvas.Pen.Width:=2; Image1.Canvas.MoveTo(0,300); for i:=1 to Np do begin x:=round(VAH[1,i]*100); y:=300-round(myfun(VAH[1,i],Np)*1e5); Image1.Canvas.Pixels[x,y]:=clRed; Image1.Canvas.LineTo(x,y); Image1.Canvas.Pixels[x,y]:=clRed; end; end; procedure TForm1.BitBtn2Click(Sender: TObject); var i,j,ll,m:Integer; Ib:Double; num:Integer; str:String; begin Ib:=VAH[2,1]; num:=1; for i:=1 to Np do if (Ib<VAH[2,i]) then begin Ib:=VAH[2,i]; num:=i; end; Ub:=VAH[1,num]; for ll:=1 to Np do for m:=1 to Np do begin B[ll,m]:=0; Y[ll]:=0; for j:=1 to Np do begin B[ll,m]:=B[ll,m]+power(VAH[1,j]{-Ub},ll+m-2); //exp((l+m-2)*ln(VAH[1,j]-Ub)); Y[ll]:=Y[ll]+power(VAH[1,j]{-Ub},ll-1)*VAH[2,j]; //exp((l-1)*ln(VAH[1,j]-Ub))*VAH[1,j]; end; end; { B[1,1]:=2; B[1,2]:=4; B[1,3]:=-4; B[1,4]:=6; B[2,1]:=1; B[2,2]:=4; B[2,3]:=2; B[2,4]:=1; B[3,1]:=3; B[3,2]:=8; B[3,3]:=1; B[3,4]:=1; B[4,1]:=2; B[4,2]:=5; B[4,3]:=0; B[4,4]:=5;} LUDecomposition(B,Np,L); Z[1]:=Y[1]/L[1,1]; for i:=2 to Np do begin Z[i]:=0; for j:=1 to i-1 do Z[i]:=Z[i]+L[i,j]*Z[j]; Z[i]:=(Y[i]-Z[i])/L[i,i]; end; A[Np]:=Z[Np]; for i:=Np-1 downto 1 do begin A[i]:=0; for j:=i+1 to Np do A[i]:=A[i]+B[i,j]*A[j]; A[i]:=Z[i]-A[i]; end; str:=''; for i:=1 to Np do begin Memo1.Lines.Add(FloatToStr(A[i])); str:=str+'+('+FloatToStrF(A[i],ffFixed,10,5)+'*(x^'+IntToStr(i-1)+'))'; end; while Pos(',', str) > 0 do str[Pos(',', str)] := '.'; Edit1.Text:=str; end; procedure TForm1.Button1Click(Sender: TObject); const L = 10e-3; //10mH R = 5e+3; // 5k C = 1e-6; //1mkF V = 4.8; var i,j:Integer; tmp:double; T,ht,h,U,I1:double; begin T:=2*pi*sqrt(L*C); ht:=T/100; U:=V; h:=ht; Image1.Canvas.MoveTo(0,300); Image1.Canvas.Pen.Width:=2; {for i:=1 to 100 do begin I1:=I1+(h/L)*U; U:=U+(h/c)*(myfun(U,Np)-I1-U/R); Image1.Canvas.LineTo(round(h*10),300-round(U*50)); h:=h+ht; end; } t:=0; Image2.Canvas.MoveTo(0,85); for i:=1 to 500 do begin Image2.Canvas.LineTo(round(t*10),85-round(U*50)); t:=t+0.1; end; end; end. Приклад виконання програми  Висновок. На даній лабораторній роботі я відновив форму вхідного сигналу за його виміряними дискретними значеннями, отриманими на виході лінійної системи.
Антиботан аватар за замовчуванням

13.02.2013 14:02-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!