⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 噪声对通信系统的影响试验程序 模仿各种噪声对不同通信系统的影响 具有很强的学习价值
💻 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 + -