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

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

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

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

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

Dagens tema: Sjekking

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

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

Programmering Høst 2017

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.

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

GUI («Graphical User Interface») del 2

Del 3: Evaluere uttrykk

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; }

INF1000. Marit Nybakken 10. februar 2004

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

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

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

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

INF1000 : Forelesning 1 (del 2)

UNIVERSITETET I OSLO

løsningsforslag-uke5.txt

HØGSKOLEN I SØR-TRØNDELAG

Hvordan skrive Flok og Flass kode? I mange tilfelle er det svært enkelt:

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

INF Seminaroppgaver til uke 3

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

Synkron logikk. Sekvensiell logikk; to typer:

MAT1030 Diskret matematikk

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

MAT1030 Diskret matematikk

Nybegynnerkurs i C. Øyvind Grønnesby. 14. oktober Introduksjon Typer Operatorer Kontrollstrukturer Pekere Makroer Lenker

Test av USB IO-enhet. Regulering og HMI.

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

GUI («Graphical User Interface») del 2

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

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

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

KONTINUASJONSEKSAMEN I FAG ALGORITMER OG DATASTRUKTURER

UNIVERSITETET I OSLO

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

INF1000 Metoder. Marit Nybakken 16. februar 2004

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

UNIVERSITETET I OSLO

som jobbet nærmest døgnet rundt i 18 måneder i Menlo Park i California for å forberede den neste bølgen innen computing.

Litt Java-historikk. Litt Java-historikk. Ulike varianter for ulike behov. Litt Java-historikk. The Green Team

Forelesning inf Java 5

Forelesning inf Java 5

Gjennomgang av eksamen H99

Leksjon 6. Objekt. Evt. importsetninger. public class Klasse { Konstruktør. Objektmetoder. Innkapsling (private): set-og get-metoder

UTVIDET TEST AV PROGRAM

INF1000 oppgaver til uke 38 (17 sep 23 sep)

Løsningsforslag for eksamensoppgave, våren 2004

Plenumsregning 1. Kapittel 1. Roger Antonsen januar Velkommen til plenumsregning for MAT1030. Repetisjon: Algoritmer og pseudokode

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

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

TDT4110 IT Grunnkurs Høst 2015

WORKSHOP BRUK AV SENSORTEKNOLOGI

UNIVERSITETET I OSLO

Forelesning inf Java 1

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

INF106 Objektorientert programmering

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

Dagens tema C, adresser og pekere

Ark 3 av 26. printf("i adresse %08x ligger b med verdien %d.\n", &b, b); printf("i adresse %08x ligger a med verdien %d.

Løse reelle problemer

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

Merk: Olav Lysne og Anne Salvesen

Kapittel 9: Sortering og søking Kort versjon

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

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

Forelesningsquiz. Forelesning inf Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min.

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

Oppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering

Dagens tema: 12 gode råd for en kompilatorskriver

MAT1030 Diskret matematikk

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

Løsningsforslag Øving 7

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

UNIVERSITETET I OSLO

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

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

HØGSKOLEN I SØR-TRØNDELAG

MAT1030 Plenumsregning 1

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

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

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

Høgskolen i Molde IBE150 Programmering Kontinuasjonseksamen (løsningsforslag) juni 2013

MAT1030 Plenumsregning 3

Program delegate. Lage et nytt prosjekt i Visual Studio

Semantisk Analyse del III

UNIVERSITETET I OSLO

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

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

MAT1030 Diskret Matematikk

Tell sekunder. Introduksjon. Skrevet av: Teodor Heggelund. I denne oppgaven skal vi lage vårt eget spill!

Transkript:

C:\My Documents\FP2000\PulsRespons med FFT\Main.pas Printed at 07:48 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, CBW32, Unit2, RChart, Fourier; 8 9 type 10 TForm1 = class(tform) 11 Button1: TButton; 12 Label1: TLabel; 13 Label2: TLabel; 14 Chart2D1: TChart2D; 15 RChart1: TRChart; 16 ComboBox1: TComboBox; 17 Label3: TLabel; 18 FastFourier1: TFastFourier; 19 CheckBox1: TCheckBox; 20 procedure FormCreate(Sender: TObject); 21 procedure Button1Click(Sender: TObject); 22 procedure ComboBox1Change(Sender: TObject); 23 procedure CheckBox1Click(Sender: TObject); 24 private 25 { Private declarations } 26 public 27 { Public declarations } 28 end; 29 30 var 31 Form1 : TForm1; 32 S : Sample; // Deklarasjon av tråd 33 Count : Integer; // Antall samples som skal hentes 34 Rate : Integer; // Samplerate (Antall AD-samples pr. sekund) 35 GeoWait : Integer; // Antall ms programmet skal vente så geofonen får stabilisert se g 36 SampleWait : Integer; // Antall ms programmet skal vente til sampling er ferdig 37 OlectraX : Variant; // X-array for Olectra-chart 38 OlectraY : Variant; // Y-array for Olectra-chart 39 MemHandle : Integer; // Minne-handle for å lagre AD-data 40 AData : Array[1..20000] of Word; //Array for lagring av AD-data 41 AVolt : Array[1..20000] of Real; //Array for lagring av AD-spenning 42 procedure FFT; 43 44 implementation 45 46 {$R *.DFM} 47 48 procedure TForm1.FormCreate(Sender: TObject); 49 begin 50 //Sette opp objektenes plassering på Form 51 Form1.Chart2D1.Width := Form1.Width-8; 52 Form1.Chart2D1.Height := Form1.Height DIV 2; 53 Form1.Chart2D1.Top := 0; 54 Form1.Button1.Left := (Form1.Width div 2)-(Form1.Button1.Width div 2); 55 Form1.Button1.Top := Form1.Height - Form1.Button1.Height - 30; 56 Form1.Label2.Top := Form1.Button1.Top + 20; 57 Form1.Label2.Left := 20; 58 Form1.Label1.Top := Form1.Label2.Top; 59 Form1.Label1.Left := Form1.Label2.Left + Form1.Label2.Width + 10; 60 Form1.RChart1.Width := Form1.Width - 8; 61 Form1.RChart1.Height := Form1.Height - Form1.Chart2D1.Height - 100; 62 Form1.RChart1.Top := Form1.Chart2D1.Height; 63 Form1.Label3.Top := Form1.Button1.Top + 5;

C:\My Documents\FP2000\PulsRespons med FFT\Main.pas Printed at 07:48 on 18 Feb 2000 Page 2 of 3 64 Form1.Label3.Left := Form1.Button1.Left + Form1.Button1.Width + 20; 65 Form1.ComboBox1.Top := Form1.Label3.Top + 17; 66 Form1.ComboBox1.Left := Form1.Label3.Left; 67 Form1.CheckBox1.Left := Form1.Label2.Left; 68 Form1.CheckBox1.Top := Form1.Label2.Top - 20; 69 70 end; 71 72 procedure TForm1.Button1Click(Sender: TObject); 73 begin 74 GeoWait := 1000; 75 Rate := 16000; 76 Count := 16000; 77 S.Resume; 78 SampleWait := (Count div Rate)+500; 79 end; 80 81 procedure TForm1.ComboBox1Change(Sender: TObject); 82 begin 83 //Gjør ny FFT dersom man velger en annen vindustype 84 FFT; 85 end; 86 87 procedure FFT; 88 Var 89 CNT : Integer; 90 y : Double; 91 begin 92 93 //Velger om det skal være log. Y-akse 94 If Form1.CheckBox1.Checked then Form1.RChart1.LogScaleY := True 95 else Form1.RChart1.LogScaleY := False; 96 Form1.RChart1.ClearGraf; 97 98 //Sette vindutype 99 If Form1.ComboBox1.Text = 'Rectangle' then 100 Form1.FastFourier1.WeightingWindow := fwrectangle; 101 If Form1.ComboBox1.Text = 'Triangle' then 102 Form1.FastFourier1.WeightingWindow := fwtriangle; 103 If Form1.ComboBox1.Text = 'Gaussian' then 104 Form1.FastFourier1.WeightingWindow := fwgauss; 105 If Form1.ComboBox1.Text = 'Hamming' then 106 Form1.FastFourier1.WeightingWindow := fwhamming; 107 If Form1.ComboBox1.Text = 'Blackman' then 108 Form1.FastFourier1.WeightingWindow := fwblackman; 109 If Form1.ComboBox1.Text = 'cos2' then 110 Form1.FastFourier1.WeightingWindow := fwcos2; 111 112 113 Form1.FastFourier1.SpectrumSize := 1024; //Setter datamengde for FFT 114 Form1.FastFourier1.ClearReal; //Tømmer FFT for reelle tall 115 Form1.FastFourier1.ClearImag; //TØmmer FFT for imaginære tall 116 117 //Putter data inn i FFT 118 For CNT := 1 to 1024 do 119 Form1.FastFourier1.RealSpec[CNT] := Avolt[CNT*16];//OlectraY[CNT+999]; 120 121 //Utfører FFT 122 Form1.FastFourier1.Transform; 123 124 //Tømmer FFT-graf, og utfører div. oppsett 125 Form1.RChart1.ClearGraf; 126 Form1.RChart1.DataColor := clred; 127 Form1.RChart1.MoveTo (Form1.FastFourier1.FreqOfLine(1,0.001),0);

C:\My Documents\FP2000\PulsRespons med FFT\Main.pas Printed at 07:48 on 18 Feb 2000 Page 3 of 3 128 129 //Plotter data til graf 130 For CNT := 1 to (Form1.FastFourier1.SpectrumSize div 2) do begin 131 y := Form1.FastFourier1.Magnitude[CNT]; 132 Form1.RChart1.DrawTo (Form1.FastFourier1.FreqOfLine(CNT, 0.001),y) 133 end; 134 135 //Viser grafen 136 Form1.RChart1.ShowGraf; 137 138 end; 139 140 procedure TForm1.CheckBox1Click(Sender: TObject); 141 begin 142 //Kjører ny FFT og plotter FFT på nytt dersom man velger logaritmisk Y-akse 143 FFT; 144 end; 145 146 initialization 147 S := Sample.Create(True); 148 149 finalization 150 S.Terminate; 151 If MemHandle <> 0 Then 152 CBWinBufFree(MemHandle); 153 end.

C:\My Documents\FP2000\PulsRespons med FFT\Unit2.pas Printed at 07:48 on 18 Feb 2000 Page 1 of 3 1 unit Unit2; 2 3 interface 4 5 uses 6 SysUtils, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, 7 OlectraChart2D_TLB, Messages, Windows, Classes, CBW32; 8 9 type 10 Sample = class(tthread) 11 private 12 procedure Test; 13 14 protected 15 procedure Execute; override; 16 end; 17 18 implementation 19 uses Main; 20 21 procedure Sample.Test; 22 const 23 BoardNum : Integer = 0; //PCI-DAS1602/16 sin adresse 24 25 var 26 ULStat : Integer; //Status for Universal Library 27 ULStatString : String; //Mellomlagring for feilmelding 28 I : Integer; //Teller-variabel for konverteri ng av data 29 30 begin 31 //Sette knappens tekst til 'kjører', og koble ut knappen 32 Form1.Button1.Caption := 'Kjører'; 33 Form1.Button1.Enabled := False; 34 35 //Sette opp Data Arrayer for Olectra 36 OlectraX := VarArrayCreate([1, Count], vardouble); 37 OlectraY := VarArrayCreate([1, Count], vardouble); 38 39 //Allokere minne-handle for AD-data 40 MemHandle := cbwinbufalloc(count+1); 41 If MemHandle = 0 Then Begin 42 MessageDlg('Memory allocation error',mtwarning,[mbok],0); 43 Exit; 44 End; 45 46 //Sette Digital A til utgang 47 ULStat := cbdconfigport(boardnum,firstporta,digitalout); 48 Form1.Label1.Caption := IntToStr(ULStat); 49 If ULStat <> 0 Then begin 50 ULStatString := IntToStr(ULStat); 51 MessageDlg('En feil oppstod ved konfigurering av digtal-port:'+inttostr(ulstat), mt Warning,[mbOK],0); 52 Exit; 53 End; 54 55 //Sette Digital A0 høy 56 ULStat := cbdbitout(boardnum,firstporta,0,1); 57 Form1.Label1.Caption := IntToStr(ULStat); 58 If ULStat <> 0 Then begin 59 MessageDlg('En feil oppstod ved setting av digtal-port:'+inttostr(ulstat),mtwarning,[mbok],0); 60 Exit; 61 End;

C:\My Documents\FP2000\PulsRespons med FFT\Unit2.pas Printed at 07:48 on 18 Feb 2000 Page 2 of 3 62 63 //Vente til geofon har stabilisert seg 64 Sleep(GeoWait); 65 66 //"slippe" geofonen 67 ULStat := cbdbitout(boardnum,firstporta,0,0); 68 Form1.Label1.Caption := IntToStr(ULStat); 69 If ULStat <> 0 Then begin 70 MessageDlg('En feil oppstod ved setting av digtal-port:'+inttostr(ulstat), mtwarnin g,[mbok],0); 71 Exit; 72 End; 73 74 75 //Start sampling, legg som bakgrunnsjobb. 76 ULStat := cbainscan(boardnum,0,0,count,rate,bip1pt25volts,memhandle,0); 77 Form1.Label1.Caption := IntToStr(ULStat); 78 If ULStat <> 0 Then begin 79 MessageDlg('En feil oppstod ved innhenting av data:'+inttostr(ulstat), mtwarning,[m bok],0); 80 Exit; 81 End; 82 83 //Flytte samplede data fra minne til data-array 84 ULStat := cbwinbuftoarray(memhandle,adata[1],1,count); 85 Form1.Label1.Caption := IntToStr(ULStat); 86 If ULStat <> 0 Then begin 87 MessageDlg('Kunne flytte data fra Mem til array:'+inttostr(ulstat), mtwarning,[mbok ],0); 88 Exit; 89 End; 90 91 //Konvertere data fra 16-bit til real-volt, og flytte data fra Array "Adata" til VarAr ray Y, og sette X-verdier 92 For I := 1 to Count do begin 93 AVolt[I] := (((AData[I]*2.5)/65535)-1.25); 94 OlectraY[I] := AVolt[I]; 95 OlectraX[I] := I; 96 end; 97 98 //Plotte verdier i Chart 99 Form1.Chart2D1.ChartGroups.Item[1].Data.NumSeries := 1; 100 Form1.Chart2D1.ChartGroups.Item[1].Data.NumPoints[1] := Count; 101 Form1.Chart2D1.ChartArea.Axes.Item['X'].Max.Value := Count; 102 Form1.Chart2D1.ChartArea.Axes.Item['X'].DataMax.Value := Count; 103 Form1.Chart2D1.ChartGroups.Item[1].Data.CopyXVectorIn(1,OlectraX); 104 Form1.Chart2D1.ChartGroups.Item[1].Data.CopyYVectorIn(1,OlectraY); 105 Form1.Chart2D1.ChartGroups.Item[1].Data.NumPoints[1] := Count-1; 106 107 //Frigjøre MemHandle 108 If MemHandle <> 0 Then 109 CBWinBufFree(MemHandle); 110 111 //Sette knappens tekst tilbake til 'Start test', og koble knappen inn i gjen 112 Form1.Button1.Caption := '&Start test'; 113 Form1.Button1.Enabled := True; 114 115 116 end; 117 118 procedure Sample.Execute; 119 Begin 120 Repeat 121 Synchronize(Test);

C:\My Documents\FP2000\PulsRespons med FFT\Unit2.pas Printed at 07:48 on 18 Feb 2000 Page 3 of 3 122 FFT; 123 Suspend; 124 Until Terminated; 125 End; 126 127 end.