📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls, TeeProcs, TeEngine, Chart, Series;
var
tempgs: ^byte;
tempru: ^byte;
tempcl: ^byte;
flag1 :boolean;
flag2 :boolean;
type
TBaseFrm = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
GroupBox5: TGroupBox;
BitBtn_MakeNoise: TBitBtn;
BitBtn_MakeSignal: TBitBtn;
BitBtn_AddNoise: TBitBtn;
BitBtn10: TBitBtn;
BitBtn11: TBitBtn;
BitBtn12: TBitBtn;
GroupBox6: TGroupBox;
GroupBox4: TGroupBox;
Memo_Signal: TMemo;
Chart_BaseSignal: TChart;
Chart2: TChart;
Chart3: TChart;
Series1: TLineSeries;
Series2: TLineSeries;
Series3: TLineSeries;
Label2: TLabel;
Label3: TLabel;
ListBox1: TListBox;
NoiseChoice: TRadioGroup;
Label6: TLabel;
Label5: TLabel;
Label1: TLabel;
Label4: TLabel;
Label8: TLabel;
Label7: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
StaticText2: TStaticText;
StaticText3: TStaticText;
StaticText4: TStaticText;
StaticText5: TStaticText;
StaticText6: TStaticText;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
procedure BitBtn_MakeSignalClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BitBtn_MakeNoiseClick(Sender: TObject);
procedure BitBtn_AddNoiseClick(Sender: TObject);
procedure BitBtn12Click(Sender: TObject);
procedure BitBtn10Click(Sender: TObject);
procedure BitBtn11Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
BaseFrm: TBaseFrm;
implementation
uses publicdata, Unit4;
function get(i:integer):integer;cdecl;external 'dll5.dll';
function gaussdll(u:double;dalta:double):pointer;cdecl;external 'dll5.dll';
function ruilidll(dalta:double):pointer;cdecl;external 'dll5.dll';
function clickdll(gailv:double;gailv1:double):pointer;cdecl;external 'dll5.dll';
{$R *.dfm}
procedure TBaseFrm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:= caFree;
end;
procedure TBaseFrm.FormDestroy(Sender: TObject);
begin
BaseFrm:=nil;
end;
procedure TBaseFrm.BitBtn_MakeSignalClick(Sender: TObject);
var
i:integer;
begin
Series1.Clear;
if (Memo_Signal.text = '') then
begin
Messagedlg('请输入基带信号的长度',mtconfirmation,[mbOK],0);
BaseFrm.ActiveControl:=Memo_Signal;
end;
if(Memo_Signal.text <> '') then
begin
Length := strtoint(Memo_Signal.Text);
//setlength(BaseSignal,length+1);
for i:=1 to length do
begin
BaseSignal[i] := random(2);
Series1.AddXY(i,BaseSignal[i],''clred);
Series1.AddXY(i+1,BaseSignal[i],''clred);
end;
end;
end;
procedure TBaseFrm.FormCreate(Sender: TObject);
begin
Memo_Signal.Text := '';
flag1:=false;
flag2:=false;
length:=100;
end;
procedure TBaseFrm.BitBtn_MakeNoiseClick(Sender: TObject);
var
temp1 :^byte;
temp2 :^byte;
temp3 :^byte;
i:integer;
mean:double;
sigma:double;
gaussnum:double;
ruilinum:double;
clicknum:double;
begin
if NoiseChoice.Items.Strings[NoiseChoice.ItemIndex]='高斯噪声' then
begin
series2.Clear;
if (edit2.Text='') then
begin
Messagedlg('请输入噪声的方差',mtconfirmation,[mbOK],0);
BaseFrm.ActiveControl:=edit2;
end;
if edit2.Text<>'' then
begin
sigma := strtofloat(edit2.Text);
tempgs:=gaussdll(0,sigma);
temp1:=ptr(integer(tempgs));
temp1:=ptr(integer(temp1)+10);
for i:=1 to 5000 do
begin
temp1:=ptr(integer(temp1)+1);
gaussnum :=(temp1^-127)/127;
gaussnum :=gaussnum * sigma*3 ;
series2.AddXY(i,gaussnum,'',clred);
Noise[i] := gaussnum;
end;
end;
end;
if NoiseChoice.Items.Strings[NoiseChoice.ItemIndex]='瑞利噪声' then
begin
series2.Clear;
if (edit3.Text='') then
begin
Messagedlg('请输入噪声的方差',mtconfirmation,[mbOK],0);
BaseFrm.ActiveControl:=edit3;
end;
if edit3.Text<>''then
begin
sigma := strtofloat(edit3.Text);
tempru:=ruilidll(1);
temp2:=ptr(integer(tempru));
for i:=1 to 5000 do
begin
ruilinum :=(temp2^-127)/127;
ruilinum :=ruilinum * sigma*3 ;
sigma := -sigma;
series2.AddXY(i,ruilinum,'',clred);
temp2:=ptr(integer(temp2)+1);
Noise[i] := ruilinum;
end;
end;
end;
if NoiseChoice.Items.Strings[NoiseChoice.ItemIndex]='CLICK噪声' then
begin
series2.Clear;
if (edit4.Text<>'') and (edit5.Text<>'')then
begin
sigma := strtofloat(edit4.Text);
tempcl:=clickdll(strtofloat(edit4.Text),strtofloat(edit5.Text));
temp3:=ptr(integer(tempcl));
for i:=1 to 5000 do
begin
clicknum :=(temp3^-127)/127;
series2.AddXY(i,clicknum,'',clred);
temp3:=ptr(integer(temp3)+1);
noise[i] :=clicknum*3;
end;
end;
end;
end;
procedure TBaseFrm.BitBtn_AddNoiseClick(Sender: TObject);
var
temp2 :^byte;
i:integer;
begin
temp2:=ptr(integer(tempgs));
series3.Clear;
for i:=1 to length*10 do
begin //噪声
BaseAddNoise[i] := Noise[i]/2 + BaseSignal[Trunc(i/10)+1];
series3.AddXY(i,BaseAddNoise[i],'',clred);
temp2:=ptr(integer(temp2)+1);
end;
end;
procedure TBaseFrm.BitBtn12Click(Sender: TObject);
begin
close;
end;
procedure TBaseFrm.BitBtn10Click(Sender: TObject);
var
i:integer;
begin
for i:=1 to length do
begin
if BaseAddNoise[(i-1)*10+1+random(9)]>0.5 then
ReceiveSignal[i]:=1
else
ReceiveSignal[i]:=0;
end;
end;
procedure TBaseFrm.BitBtn11Click(Sender: TObject);
begin
if (ErrorFrm = nil) then
ErrorFrm:=TErrorFrm.Create(nil);
ErrorFrm.Show;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -