C:\My Documents\FP2000\Forvrengning med FFT\ADDA.pas Printed at 07:42 on 18 Feb 2000 Page 1 of 2

Like dokumenter
C:\My Documents\FP2000\PulsRespons med FFT\Main.pas Printed at 07:48 on 18 Feb 2000 Page 1 of 3

File: C:\My Documents\fagprove\tp\klokke.txt , 08:42:20

C:\web\service-elektronikk\fagprover\Anders\flashlite_program_Anders.pas Page 1

Dagens tema: Sjekking

HØGSKOLEN I SØR-TRØNDELAG

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Programmering Høst 2017

Del 3: Evaluere uttrykk

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

FYS3240/4240 Forslag til prosjektoppgave for Lab 4: DAQ-øvelse med LabVIEW

HØGSKOLEN I SØR-TRØNDELAG

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

C:\My Documents\Fagprove\Flashlite V25+\LED_Link.pas Printed at 16:06 on 17 Feb 2000 Page 1 of 6

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

UNIVERSITETET I OSLO

UTVIDET TEST AV PROGRAM

Hangman. Level. Introduksjon

INF1000 Metoder. Marit Nybakken 16. februar 2004

UNIVERSITETET I OSLO

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

INF Seminaroppgaver til uke 3

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

C# (.Net) Tema: Loops (Løkker) Leksjon 7 Kap 18

HØGSKOLEN I SØR-TRØNDELAG

Plotting av data i grafer

HØGSKOLEN I SØR-TRØNDELAG

GUI («Graphical User Interface») del 2

løsningsforslag-uke5.txt

GUI («Graphical User Interface») del 2

KONTINUASJONSEKSAMEN I FAG ALGORITMER OG DATASTRUKTURER

INF Uke 10. Ukesoppgaver oktober 2012

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Prosedyrer. Lars Vidar Magnusson. October 26, Lars Vidar Magnusson () Forelesning i DAS October 26, / 19

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Løsningsforslag Eksamen i Programmering i Visual Basic høsten 2003 Laget av Runar Munkhaug

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Løsnings forslag i java In115, Våren 1998

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

UNIVERSITETET I OSLO

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

UNIVERSITETET I OSLO

Forelesning inf Java 5

Visual Basic. Repetisjon fra mandag

UNIVERSITETET I OSLO

Forelesning inf Java 5

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

INF1000. Marit Nybakken 10. februar 2004

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15.

INF1000: Forelesning 6. Klasser og objekter del 1

Vi skal se på lambda-uttrykk. Følgende er definerte og vil bli brukt gjennom oppgaven

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Dagens tema: 12 gode råd for en kompilatorskriver

Jentetreff INF1000 Debugging i Java

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

UNIVERSITETET I OSLO

Lynkurs i shellprogrammering under Linux

Bli Kjent med Datamaskinen Introduksjon ComputerCraft PDF

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

Kanter, kanter, mange mangekanter. Introduksjon: Steg 1: Enkle firkanter. Sjekkliste. Skrevet av: Sigmund Hansen

MAT1030 Diskret matematikk

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Eksamen iin115 og IN110, 15. mai 1997 Side 2 Oppgave 1 Trær 55 % Vi skal i denne oppgaven se på en form for søkestrukturer som er spesielt godt egnet

INF1000: Forelesning 11. Oppgave 2. Oppgave 1. Husk å melde deg på prøveeksamen i INF1000! Ole Christian Lingjærde 7.november 2006

INF1000 : Forelesning 1 (del 2)

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

1: { 2: Display functions 3: ============================================================= 4: Instruction DB5 DB4 DB3 DB2 DB1 DB0 5:

UNIVERSITETET I OSLO

MAT1030 Diskret matematikk

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Dagens tema: Sjekking (obligatorisk oppgave 3)

Post-it spørsmål fra timen (Arv og subklasser)

Løsningsforslag til eksamen i INF1000

INF1000: Forelesning 7

Program delegate. Lage et nytt prosjekt i Visual Studio

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

INF1000 oppgaver til uke 38 (17 sep 23 sep)

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Eksamen iin115, 14. mai 1998 Side 2 Oppgave 1 15 % Du skal skrive en prosedyre lagalle som i en global character array S(1:n) genererer alle sekvenser

Det finnes ingenting. som kan gjøres med interface. men som ikke kan gjøres uten

Object interaction. Innhold. Abstraksjon Grunnleggende programmering i Java Monica Strand 3. september 2007.

Arbeidskrav 1. Se fremdriftsplanen for innleveringsfrist. Emneansvarlig: Olav Dæhli 1

INF 1000 Prøveeksamen. 23. november Ole Christian og Arne. Oppgave 1 (10 poeng) Er disse programsetningene lovlige i Java? Oppgave 2 (10 poeng)

MAT-INF 1100: Obligatorisk oppgave 1

Repetisjon Novice Videregående Python PDF

Løpende strekmann Erfaren Videregående Python PDF

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

De neste ukene. INF1000 Uke 12. Prøveeksamen. Nå - Prøveeksamen. Forelesning om IT og samfunn neste uke (13/11).

UNIVERSITETET I OSLO

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

Transkript:

C:\My Documents\FP2000\Forvrengning med FFT\ADDA.pas Printed at 07:42 on 18 Feb 2000 Page 1 of 2 1 unit ADDA; 2 3 interface 4 5 uses 6 Classes; 7 8 type 9 T_ADDA = class(tthread) 10 private 11 { Private declarations } 12 protected 13 procedure Execute; override; 14 procedure ADDANow; 15 end; 16 17 implementation 18 Uses 19 CBW32, Variable, Dialogs, Windows, Main, SysUtils; 20 21 Procedure T_ADDA.ADDANow; 22 Var 23 ULStat : Integer; 24 Begin 25 // Sender ut data til DA 26 ULStat := cbaout(boardnum, Channel, BIP5VOLTS,SinusArray[OutPos]); 27 28 //Sjekker om det ble satt spenning ut på DA, hvis ikke gis feilmelding og programmet av sluttes 29 If ULStat <> 0 Then Begin 30 MessageDlg('Feil 01: Klarer ikke sende ut!',mtwarning,[mbok],0); 31 Exit; 32 End; 33 34 // Leser inn data fra AD 35 ULStat := cbain(boardnum, Channel, BIP5VOLTS,InputArray[InPos]); 36 37 //Sjekker om det ble samplet fra AD, hvis ikke gis feilmelding og programmet avsluttes 38 If ULStat <> 0 Then Begin 39 MessageDlg('Feil 02: Klarer ikke lese inn!',mtwarning,[mbok],0); 40 Exit; 41 End; 42 43 44 //Øke rundeteller for DA, og sjekke om det er gitt ut en hel sinus 45 Inc(OutPos); 46 If OutPos >= 100 Then OutPos := 1; //Hvis en sinus er komplett, begynn på en ny 47 48 //Øke rundeteller for AD 49 Inc(InPos); 50 51 //Sjekke om riktig antall datapunkter er hentet inn 52 If InPos = 5000 Then Begin 53 InPos := 0; //Setter AD-teller tilbake til 0 54 TPlot.Resume; //Starter tråd for plotting av AD-data 55 TADDA.Suspend; //Tråden stopper seg selv 56 End; 57 End; 58 59 Procedure T_ADDA.Execute; 60 Var 61 T : LongInt; 62 Begin 63 FreeOnTerminate := True;

C:\My Documents\FP2000\Forvrengning med FFT\ADDA.pas Printed at 07:42 on 18 Feb 2000 Page 2 of 2 64 While not Terminated Do Begin 65 ADDANow; 66 //Tidsforsinkelse som regulerer hastigheten (frekvensen) på ADDA 67 For T := 1 To 156000 Do Begin 68 End; 69 End; 70 End; 71 72 End.

C:\My Documents\FP2000\Forvrengning med FFT\Main.pas Printed at 07:42 on 18 Feb 2000 Page 1 of 3 1 unit Main; 2 3 interface 4 5 uses 6 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 7 StdCtrls, OleCtrls, OlectraChart2D_TLB, ComCtrls, ExtCtrls, RChart, 8 Gauges, Fourier; 9 10 type 11 TFrmMain = class(tform) 12 Chart2D1: TChart2D; 13 Button1: TButton; 14 ScrollBar1: TScrollBar; 15 Label1: TLabel; 16 Label2: TLabel; 17 Label3: TLabel; 18 Label6: TLabel; 19 ScrollBar2: TScrollBar; 20 Label7: TLabel; 21 RChart1: TRChart; 22 FastFourier1: TFastFourier; 23 ComboBox1: TComboBox; 24 Label4: TLabel; 25 procedure FormCreate(Sender: TObject); 26 procedure Button1Click(Sender: TObject); 27 procedure ScrollBar1Change(Sender: TObject); 28 procedure ScrollBar2Change(Sender: TObject); 29 procedure ComboBox1Change(Sender: TObject); 30 31 private 32 { Private declarations } 33 public 34 { Public declarations } 35 end; 36 37 var 38 FrmMain: TFrmMain; 39 OlectraX : Variant; // X-array for Olectra-chart 40 OlectraY : Variant; // Y-array for Olectra-chart 41 ULStat : Integer; // Variabel som inneholder status for AD-kort 42 Procedure FFT; 43 implementation 44 Uses 45 Variable, ADDA, Plot; 46 {$R *.DFM} 47 48 procedure TFrmMain.FormCreate(Sender: TObject); 49 begin 50 51 52 //Setter opp størrelse og plassering av objekter 53 FrmMain.Chart2D1.Width := FrmMain.Width-8; 54 FrmMain.Chart2D1.Height := FrmMain.Height - 450; 55 FrmMain.Button1.Left := (FrmMain.Width div 2)-(FrmMain.Button1.Width div 2); 56 FrmMain.Button1.Top := FrmMain.Chart2D1.Height + 40; 57 FrmMain.ScrollBar1.Left := FrmMain.Button1.Left - 250; 58 FrmMain.ScrollBar1.Top := FrmMain.Button1.Top + 4; 59 FrmMain.Scrollbar2.Left := FrmMain.Button1.Left + 113; 60 FrmMain.Scrollbar2.Top := FrmMain.Button1.Top + 14; 61 FrmMain.Label2.Left := FrmMain.ScrollBar1.Left; 62 FrmMain.Label2.Top := FrmMain.ScrollBar1.Top - 14; 63 FrmMain.Label3.Left := FrmMain.ScrollBar1.Left + 190; 64 FrmMain.Label3.Top := FrmMain.Label2.Top;

C:\My Documents\FP2000\Forvrengning med FFT\Main.pas Printed at 07:42 on 18 Feb 2000 Page 2 of 3 65 FrmMain.Label1.Left := FrmMain.ScrollBar1.Left + 85; 66 FrmMain.Label1.Top := FrmMain.ScrollBar1.Top - 28; 67 FrmMain.Label7.Left := FrmMain.Button1.Left + FrmMain.Button1.Width + 5; 68 FrmMain.Label7.Top := FrmMain.Chart2D1.Height + 1; 69 FrmMain.ScrollBar2.Top := FrmMain.Label7.Top + 15; 70 FrmMain.ScrollBar2.Left := FrmMain.Button1.Left + FrmMain.Button1.Width + 5; 71 FrmMain.Label4.Top := FrmMain.ScrollBar2.Top + 20; 72 FrmMain.Label4.Left := FrmMain.Button1.Left + FrmMain.Button1.Width + 5; 73 FrmMain.ComboBox1.Top := FrmMain.Label4.Top + 15; 74 FrmMain.ComboBox1.Left := FrmMain.Button1.Left + FrmMain.Button1.Width + 5; 75 FrmMain.RChart1.Width := FrmMain.Width-8; 76 FrmMain.RChart1.Height := FrmMain.Height - FrmMain.RChart1.Top - 50; 77 FrmMain.RChart1.Top := FrmMain.Button1.Top + FrmMain.Button1.Height + 20; 78 79 //Setter scrollbar1 til 10000 80 FrmMain.ScrollBar1.Position := 10000; 81 end; 82 83 procedure TFrmMain.Button1Click(Sender: TObject); 84 var 85 I : Integer; //Telle-variabel for utregning av Sinus-kurve 86 begin 87 If FrmMain.Button1.Caption = '&Start Test' then begin 88 //Lage sinus-kurve 89 For I := 1 to 100 Do Begin 90 SinusArray[I] := Trunc(FrmMain.ScrollBar1.Position*Sin((I*2*Pi)/100))+32768; 91 End; 92 93 94 //Initiere telle-variabler 95 InPos := 1; 96 OutPos := 1; 97 98 //Nedtoner knappen og setter dens tekst til 'kjører test' 99 FrmMain.Button1.Caption := 'Kjører Test...'; 100 FrmMain.Button1.Enabled := False; 101 102 //Starter tråden for ADDA 103 TADDA.Resume; 104 End; 105 end; 106 107 procedure TFrmMain.ScrollBar1Change(Sender: TObject); 108 begin 109 //Viser scrollbarens posisjon i programvinduet 110 Label6.Caption := IntToStr(FrmMain.Scrollbar1.Position); 111 end; 112 113 procedure TFrmMain.ScrollBar2Change(Sender: TObject); 114 begin 115 //Endrer visning på chart for signalplotting 116 FrmMain.Chart2D1.ChartArea.Axes.Item['X'].Min.Value := FrmMain.ScrollBar2.Position; 117 FrmMain.Chart2D1.ChartArea.Axes.Item['X'].Max.Value := FrmMain.ScrollBar2.Position + 1 000; 118 end; 119 120 procedure TFrmMain.ComboBox1Change(Sender: TObject); 121 begin 122 //Kjører ny FFT hvis vindustype blir endret 123 FFT; 124 end; 125 126 Procedure FFT; 127 Var

C:\My Documents\FP2000\Forvrengning med FFT\Main.pas Printed at 07:42 on 18 Feb 2000 Page 3 of 3 128 i : Integer; 129 y : Double; 130 begin 131 132 //Sette vindutype 133 If FrmMain.ComboBox1.Text = 'Rectangle' then 134 FrmMain.FastFourier1.WeightingWindow := fwrectangle; 135 If FrmMain.ComboBox1.Text = 'Triangle' then 136 FrmMain.FastFourier1.WeightingWindow := fwtriangle; 137 If FrmMain.ComboBox1.Text = 'Gaussian' then 138 FrmMain.FastFourier1.WeightingWindow := fwgauss; 139 If FrmMain.ComboBox1.Text = 'Hamming' then 140 FrmMain.FastFourier1.WeightingWindow := fwhamming; 141 If FrmMain.ComboBox1.Text = 'Blackman' then 142 FrmMain.FastFourier1.WeightingWindow := fwblackman; 143 If FrmMain.ComboBox1.Text = 'cos2' then 144 FrmMain.FastFourier1.WeightingWindow := fwcos2; 145 146 FrmMain.RChart1.LogScaleY := True; //Setter logaritmisk Y-akse på FFT-graf 147 FrmMain.FastFourier1.SpectrumSize := 4096; //Setter datamengde for FFT 148 FrmMain.FastFourier1.ClearReal; //Tømmer FFT for reelle tall 149 FrmMain.FastFourier1.ClearImag; //TØmmer FFT for imaginære tall 150 151 //Putter data inn i FFT 152 For i := 5 to 5000 do 153 FrmMain.FastFourier1.RealSpec[i] := OlectraY[i]; 154 155 //Utfører FFT 156 FrmMain.FastFourier1.Transform; 157 158 //Tømmer FFT-graf, og utfører div. oppsett 159 FrmMain.RChart1.ClearGraf; 160 FrmMain.RChart1.RangeLoY := ChartYRanges[0,1]; 161 FrmMain.RChart1.RangeHiY := ChartYRanges[0,2]; 162 FrmMain.RChart1.DataColor := clred; 163 FrmMain.RChart1.MoveTo (FrmMain.FastFourier1.FreqOfLine(1,0.001),0); 164 165 //Plotter data til graf 166 For i := 1 to (FrmMain.FastFourier1.SpectrumSize div 2) do begin 167 y := FrmMain.FastFourier1.Magnitude[i]; 168 FrmMain.RChart1.DrawTo (FrmMain.FastFourier1.FreqOfLine(i, 0.001),y) 169 end; 170 171 //Viser grafen 172 FrmMain.RChart1.ShowGraf; 173 174 end; 175 176 Initialization 177 TADDA := T_ADDA.Create(True); 178 TADDA.Priority := tptimecritical; 179 TPlot := T_Plot.Create(True); 180 181 Finalization 182 TADDA.Terminate; 183 184 end.

C:\My Documents\FP2000\Forvrengning med FFT\Plot.pas Printed at 07:42 on 18 Feb 2000 Page 1 of 2 1 unit Plot; 2 3 interface 4 5 uses 6 Classes, Dialogs, CBW32; 7 8 type 9 T_Plot = class(tthread) 10 private 11 { Private declarations } 12 protected 13 procedure Execute; override; 14 procedure PlotNow; 15 end; 16 17 implementation 18 Uses 19 Variable, Main, Graphics, Fourier; 20 Procedure T_Plot.PlotNow; 21 var 22 P : Integer; // Teller for konvertering av AD-verdi 23 Begin 24 //Lage data-arrayer for Olectra 25 OlectraX := VarArrayCreate([1, 5000], vardouble); 26 OlectraY := VarArrayCreate([1, 5000], vardouble); 27 28 //Konvertere 16-bit AD-verdi til Volt 29 For P := 1 To 5000 Do Begin 30 OlectraY[P] := (((InputArray[P]*20)/65535)-10); 31 OlectraX[P] := P; 32 End; 33 34 // Setter verdi på DA til 0, så det ikke går strøm i geofonen 35 ULStat := cbaout(boardnum, Channel, BIP10VOLTS,32767); 36 37 // Sjekker at verdien er satt på DA, hvis ikke gis feimelding og programmet stoppes 38 If ULStat <> 0 Then Begin 39 MessageDlg('Feil 01: Klarer ikke sende ut!',mtwarning,[mbok],0); 40 Exit; 41 End; 42 43 //Sende data til chart 44 FrmMain.Chart2D1.ChartGroups.Item[1].Data.NumSeries := 1; 45 FrmMain.Chart2D1.ChartGroups.Item[1].Data.NumPoints[1] := 5000; 46 FrmMain.Chart2D1.ChartArea.Axes.Item['X'].Max.Value := 1000; 47 FrmMain.Chart2D1.ChartArea.Axes.Item['X'].DataMax.Value := 5000; 48 FrmMain.Chart2D1.ChartGroups.Item[1].Data.CopyXVectorIn(1,OlectraX); 49 FrmMain.Chart2D1.ChartGroups.Item[1].Data.CopyYVectorIn(1,OlectraY); 50 FrmMain.Chart2D1.ChartGroups.Item[1].Data.NumPoints[1] := FrmMain.Chart2D1.ChartGroups. Item[1].Data.NumPoints[1] -1; 51 52 //Starte FFT-prosedyre 53 FFT; 54 55 FrmMain.Button1.Caption := '&Start Test';//Setter knappens tekst tilbake til 'start tes t' 56 FrmMain.Button1.Enabled := True; //Fjerner nedtoning av knapp 57 58 End; 59 60 procedure T_Plot.Execute; 61 begin 62 FreeOnTerminate := True;

C:\My Documents\FP2000\Forvrengning med FFT\Plot.pas Printed at 07:42 on 18 Feb 2000 Page 2 of 2 63 While not Terminated Do Begin 64 Synchronize(PlotNow); 65 Suspend; 66 End; 67 end; 68 69 end. 70

C:\My Documents\FP2000\Forvrengning med FFT\Variable.pas Printed at 07:42 on 18 Feb 2000 Page 1 of 1 1 unit Variable; 2 3 interface 4 Uses ADDA, Plot; 5 Var 6 SinusArray : Array [1..100] of Word; //Array til å lagre sinus-verdier i 7 InputArray : Array [0..5000] of Word; //Array til å lagre samplede data i 8 InPos : Integer; //Teller hvor langt programmet er kommet i ADsamplingen 9 OutPos : Integer; //Teller for hvilket punk programmet er kommet til på sinusen 10 TADDA : T_ADDA; //Deklarerer tråden T_ADDA 11 TPlot : T_Plot; //Deklarerer tråden T_PLOT 12 13 Const 14 BoardNum : Integer = 0; //PCI-DAS1602/16s nummer 15 Channel : Integer = 0; //Kanalen som skal brukes (0 på både AD og DA) 16 17 implementation 18 19 20 end.