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

📄 unit5.~pas

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

begin
    if SpreadRadio.Items.Strings[SpreadRadio.ItemIndex]='选择扩频' then
    begin

    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;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -