📄 unit5.pas
字号:
unit Unit5;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, TeEngine, Series, ExtCtrls, TeeProcs, Chart;
var
Spread:array[0..100] of double;
SpreadSignal:array [0..131072] of double;
SpreadNoise:array [0..131072] of double;
SpreadAddNoise :array [0..131072] of double;
Fdc:integer;
type
TSpreadFrm = class(TForm)
GroupBox2: TGroupBox;
Chart2: TChart;
Series2: TLineSeries;
GroupBox3: TGroupBox;
Chart1: TChart;
Series1: TLineSeries;
GroupBox4: TGroupBox;
Chart3: TChart;
Series3: TLineSeries;
GroupBox5: TGroupBox;
BitBtn8: TBitBtn;
BitBtn7: TBitBtn;
BitBtn9: TBitBtn;
BitBtn10: TBitBtn;
BitBtn11: TBitBtn;
BitBtn12: TBitBtn;
GroupBox8: TGroupBox;
Label1: TLabel;
MemoNoise: TMemo;
GroupBox6: TGroupBox;
MemoBase: TMemo;
GroupBox7: TGroupBox;
Memo2: TMemo;
SpreadRadio: TRadioGroup;
Label2: TLabel;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
procedure BitBtn8Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BitBtn7Click(Sender: TObject);
procedure BitBtn9Click(Sender: TObject);
procedure BitBtn10Click(Sender: TObject);
procedure BitBtn11Click(Sender: TObject);
procedure BitBtn12Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
SpreadFrm: TSpreadFrm;
implementation
uses Unit1,publicdata, Unit4;
function gaussdll(u:double;dalta:double):pointer;cdecl;external 'dll5.dll';
{$R *.dfm}
procedure TSpreadFrm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:= caFree;
end;
procedure TSpreadFrm.FormDestroy(Sender: TObject);
begin
SpreadFrm := nil;
end;
procedure TSpreadFrm.BitBtn8Click(Sender: TObject);
var
i:integer;
begin
series1.Clear;
length:=10;
if (MemoBase.text = '') then
begin
Messagedlg('请输入基带信号的长度',mtconfirmation,[mbOK],0);
BaseFrm.ActiveControl:=MemoBase;
end;
if(MemoBase.text <> '') then
begin
Length := strtoint(MemoBase.Text);
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 TSpreadFrm.FormCreate(Sender: TObject);
begin
MemoBase.Text:='';
MemoNoise.Text:='';
Fdc :=31;
end;
procedure TSpreadFrm.BitBtn7Click(Sender: TObject);
var
i:integer;
j:integer;
begin
for i:=1 to Fdc do
begin
Spread[i] := random(2);
end;
if SpreadRadio.Items.Strings[SpreadRadio.ItemIndex]='选择扩频' then
series2.Clear;
begin
for i:=1 to length do
begin
for j:=1 to Fdc do
begin
SpreadSignal[(i-1)*Fdc + j] := trunc(BaseSignal[i]+Spread[j]) mod 2;
series2.AddXY((i-1)*Fdc + j,SpreadSignal[(i-1)*Fdc + j] ,'',clred);
series2.AddXY((i-1)*Fdc + j+1,SpreadSignal[(i-1)*Fdc + j] ,'',clred);
end;
end;
end;
if SpreadRadio.Items.Strings[SpreadRadio.ItemIndex]='不选择扩频' then
series2.Clear;
begin
for i:=1 to length do
begin
series2.AddXY(i,BaseSignal[i],'',clred);
series2.AddXY(i+1,BaseSignal[i],'',clred);
end;
end;
end;
procedure TSpreadFrm.BitBtn9Click(Sender: TObject);
var
i:integer;
gaussnum:double;
sigma:double;
temp1:^byte;
SpreadGs:^byte;
begin
sigma := strtofloat(MemoNoise.Text);
SpreadGs:=gaussdll(0,sigma);
temp1:=ptr(integer(SpreadGs));
temp1:=ptr(integer(temp1)+10);
for i:=1 to 131072 do
begin
temp1:=ptr(integer(temp1)+1);
gaussnum :=(temp1^-127)/127;
gaussnum :=gaussnum * sigma*3 ;
SpreadNoise[i] := gaussnum;
end;
if SpreadRadio.Items.Strings[SpreadRadio.ItemIndex]='选择扩频' then
begin
series3.Clear;
for i:=1 to length *Fdc do
begin
SpreadAddNoise[i] :=SpreadNoise[i]/2 + SpreadSignal[i];
series3.AddXY(i,SpreadAddNoise[i],'',clred);
end;
end;
if SpreadRadio.Items.Strings[SpreadRadio.ItemIndex]='不选择扩频' then
begin
series3.Clear;
for i:=1 to length*10 do
begin
SpreadAddNoise[i] := SpreadNoise[i]/2 + BaseSignal[Trunc(i/10)+1];
series3.AddXY(i,SpreadAddNoise[i],'',clred);
end;
end;
end;
procedure TSpreadFrm.BitBtn10Click(Sender: TObject);
var
i:integer;
j:integer;
temp:integer;
SpreadCheck :integer;
begin
if SpreadRadio.Items.Strings[SpreadRadio.ItemIndex]='选择扩频' then
begin
for i:=1 to length do
begin
SpreadCheck:=0;
for j:=1 to Fdc do
begin
if SpreadAddNoise[(i-1)*Fdc+j] >0.5 then
SpreadAddNoise[(i-1)*Fdc+j]:=1
else
SpreadAddNoise[(i-1)*Fdc+j]:=0;
temp := trunc(SpreadAddNoise[(i-1)*Fdc+j]+Spread[j]) mod 2;
if temp >=1 then
SpreadCheck := SpreadCheck+1;
end;
if SpreadCheck>15 then
ReceiveSignal[i] := 1
else
ReceiveSignal[i] :=0;
end;
end;
if SpreadRadio.Items.Strings[SpreadRadio.ItemIndex]='不选择扩频' then
begin
for i:=1 to length do
begin
if SpreadAddNoise[(i-1)*10+1+random(9)]>0.5 then
ReceiveSignal[i]:=1
else
ReceiveSignal[i]:=0;
end;
end;
end;
procedure TSpreadFrm.BitBtn11Click(Sender: TObject);
begin
if (ErrorFrm = nil) then
ErrorFrm:=TErrorFrm.Create(nil);
ErrorFrm.Show;
end;
procedure TSpreadFrm.BitBtn12Click(Sender: TObject);
begin
close;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -