📄 unit1.~pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, VarCmplx,math,
//CPUCounter_Hss, CompileComplex_Hss, Complex_Hss,
StdCtrls, Buttons;
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
Edit5: TEdit;
Edit6: TEdit;
GroupBox1: TGroupBox;
exre: TEdit;
eximg: TEdit;
eyre: TEdit;
eyimg: TEdit;
hximg: TEdit;
hyre: TEdit;
hyimg: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label5: TLabel;
Label6: TLabel;
hxre: TEdit;
Label7: TLabel;
BitBtn2: TBitBtn;
OpenDialog1: TOpenDialog;
BitBtn3: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
private
{ Private declarations }
function powerspectra(const compl1, compl2: Variant):Variant;OverLoad;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
var
frq,apl,phs,damp,nt: array of real; // 原始数据
dh,pd,kh,px:array of integer; //
sxfrq,sxapl,sxphs: array of real; // 筛选后数据
sxdh,sxpd,sxkh,sxpx:array of integer; //
//cz:array of string;
changdu,number,length:integer; // number:数据行数 changdu:数组最大长度
{$R *.dfm}
function TForm1.powerspectra(const compl1, compl2: Variant): Variant;
var
compl2Conjug:Variant;
//i:integer;
begin
compl2Conjug:=VarComplexConjugate(compl2);
powerspectra:=compl1*compl2Conjug;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
Ex,Ey,Hx,Hy: Variant;
Zxx1,z1,z2,z3,z4,zxx2,Zxx: Variant;
A,B: Variant;
//b: double;
real1,real2,real3,real4:double;
imag1,imag2,imag3,imag4:double;
begin
real1:=strtofloat(exre.Text);
imag1:=strtofloat(eximg.Text);
real2:=strtofloat(eyre.Text);
imag2:=strtofloat(eyimg.Text);
real3:=strtofloat(hxre.Text);
imag3:=strtofloat(hximg.Text);
real4:=strtofloat(hyre.Text);
imag4:=strtofloat(hyimg.Text);
Ex:= VarComplexCreate(real1,imag1);
Ey:= VarComplexCreate(real2,imag2);
Hx:= VarComplexCreate(real3,imag3);
Hy:= VarComplexCreate(real4,imag4);
//edit6.Text:=(a1*a2).real;
//edit6.Text:=(a1*a2).Imaginary;
//edit6.Text:=(a1*a2).Radius;
//edit6.Text:=(a1*a2).Theta;
//edit6.Text:=(a1*a2).FixedTheta;
A:=Hx;
B:=Hy;
z1:=powerspectra(Ex,A);
z2:=powerspectra(Hy,B);
z3:=powerspectra(Ex,B);
z4:=powerspectra(Hy,A);
Zxx1:=z1*z2;
Zxx2:=z3*z4;
Zxx:=(powerspectra(Ex,A)*powerspectra(Hy,B))-(powerspectra(Ex,B )*powerspectra(Hy,A));
// /(powerspectra(Hx,A)*powerspectra(Hy,B)-powerspectra(Hx,B)*powerspectra(Hy,A));
edit6.Text:=Zxx.real;
edit5.Text:=Zxx.Imaginary;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
var
ff: Textfile;
//DaoHang:string[13];
//ChangZhi:string[2];
DaoHao,PinDuan,KuaiHao,PinXu:integer;
frequency,amplitude,phase,damping,ntvalue:real;
lin1,lin2,lin3,lin4,lin5,lin6,lin7,lin8,lin9:string[1];//临时变量
i:integer;
//o:string;
begin
changdu:=9000;
setlength(dh,changdu);
//setlength(cz,changdu);
setlength(pd,changdu);
setlength(kh,changdu);
setlength(px,changdu);
setlength(frq,changdu);
setlength(apl,changdu);
setlength(phs,changdu);
setlength(damp,changdu);
setlength(nt,changdu);
for i := 0 to changdu-1 do dh[i]:=0;
//for i := 0 to changdu-1 do cz[i]:=o;
for i := 0 to changdu-1 do pd[i]:=0;
for i := 0 to changdu-1 do kh[i]:=0;
for i := 0 to changdu-1 do px[i]:=0;
for i := 0 to changdu-1 do frq[i]:=0;
for i := 0 to changdu-1 do apl[i]:=0;
for i := 0 to changdu-1 do phs[i]:=0;
for i := 0 to changdu-1 do damp[i]:=0;
for i := 0 to changdu-1 do nt[i]:=0;
if OpenDialog1.Execute then
begin
//showmessage('数据读取中…………');
AssignFile(ff, OpenDialog1.FileName);
reset(ff);
//readln(ff);
for i := 0 to changdu-1 do
begin
if not Eof(ff) then
begin
readln(ff, DaoHao,lin2,KuaiHao,lin3,PinDuan,lin4,PinXu,lin5,frequency,lin6,amplitude,lin7,phase,lin8,damping,lin9,ntvalue);
dh[i]:=DaoHao;
//cz[i]:=ChangZhi;
pd[i]:=PinDuan;
kh[i]:=KuaiHao;
px[i]:=PinXu;
frq[i]:=frequency;
apl[i]:=amplitude;
phs[i]:=phase;
damp[i]:=damping;
nt[i]:=ntvalue;
end
else break;
end;
number:=0;
for i := 0 to changdu-1 do
if dh[i]=0 then
begin
number:=i;
break;
end;
closefile(ff);
end;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
var
i,j,m,start,goal,best:integer;
begin
//初始化筛选数组
setlength(sxdh,400);
setlength(sxpd,400);
setlength(sxkh,400);
setlength(sxpx,400);
setlength(sxfrq,400);
setlength(sxapl,400);
setlength(sxphs,400);
for i := 0 to 399 do sxdh[i]:=0;
for i := 0 to 399 do sxpd[i]:=0;
for i := 0 to 399 do sxkh[i]:=0;
for i := 0 to 399 do sxpx[i]:=0;
for i := 0 to 399 do sxfrq[i]:=0;
for i := 0 to 399 do sxapl[i]:=0;
for i := 0 to 399 do sxphs[i]:=0;
//筛选数据
length:=0;
for i:=0 to 9000 do
if nT[i]=0 then
length:=i;
start:=0;
goal:=0;
m:=0;
for i:=0 to length-1 do
begin
if (kh[i]<>kh[start]) then // and (pd[i]<>pd[start])
begin
goal:=i-1;
best:=goal;
{for j:=start to goal-1 do
begin
if (frq[j]-bbbb)<(frq[start]-bbbb) then
best:=j;
end;}
sxdh[m]:=dh[best];
sxpd[m]:=pd[best];
sxkh[m]:=kh[best];
sxpx[m]:=px[best];
sxfrq[m]:=frq[best];
sxapl[m]:=apl[best];
sxphs[m]:=phs[best];
m:=m+1;
start:=goal+1;
end;
end;
{sxdh[m]:=dh[length-1];
sxpd[m]:=pd[length-1];
sxkh[m]:=kh[length-1];
sxpx[m]:=px[length-1];
sxfrq[m]:=frq[length-1];
sxapl[m]:=apl[length-1];
sxphs[m]:=phs[length-1];}
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -