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

📄 main.pas

📁 VCL component dsplab , STFT and SPECTRUM viewer, real time
💻 PAS
字号:
{
  The FFT demo
  Author:  Eugen Tarasov

  Last modified - January, 2004

  Please send all suggestions to author

  e-mail: dsplab@teworks.com
  http://www.teworks.com
}

unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, ComCtrls, Buttons, TeEngine, Series, TeeProcs, Chart,
  Menus, Math, dspTypes, dspFFT, Tabs;

type
  TfmMain = class(TForm)
    MainMenu1: TMainMenu;
    Help1: TMenuItem;
    Program1: TMenuItem;
    Exit1: TMenuItem;
    Whatisthis1: TMenuItem;
    N1: TMenuItem;
    About1: TMenuItem;
    dspFFT1: TdspFFT;
    Panel3: TPanel;
    TabSet1: TTabSet;
    Notebook1: TNotebook;
    Panel2: TPanel;
    ScrollBox1: TScrollBox;
    GeneratorBox: TGroupBox;
    lFreq1: TLabel;
    lAmp1: TLabel;
    tbFreq1: TTrackBar;
    edtFreq1: TEdit;
    tbAmp1: TTrackBar;
    edtAmp1: TEdit;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    tbFreq2: TTrackBar;
    edtFreq2: TEdit;
    tbAmp2: TTrackBar;
    edtAmp2: TEdit;
    GroupBox2: TGroupBox;
    Label3: TLabel;
    Label4: TLabel;
    tbFreq3: TTrackBar;
    edtFreq3: TEdit;
    tbAmp3: TTrackBar;
    edtAmp3: TEdit;
    Bevel2: TBevel;
    Panel1: TPanel;
    Chart1: TChart;
    Series1: TFastLineSeries;
    Chart2: TChart;
    Memo1: TMemo;
    Series2: TBarSeries;
    procedure tbChange(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
    procedure About1Click(Sender: TObject);
    procedure Panel1Resize(Sender: TObject);
    procedure TabSet1Change(Sender: TObject; NewTab: Integer;
      var AllowChange: Boolean);
  private
    Amp1, Freq1: Integer;
    Amp2, Freq2: Integer;
    Amp3, Freq3: Integer;

    procedure Generate;
    procedure Transform;
    procedure Visualize;
  end;

var
  fmMain: TfmMain;

implementation

uses About;

{$R *.DFM}

const
  cSampleRate = 1024; // Hz


procedure TfmMain.FormCreate(Sender: TObject);
begin
  Application.Title:= 'DSPLAB - ' + Caption;
  {$IFNDEF VER120}
    Series2.CustomBarWidth:= 1;
  {$ENDIF}
  tbChange(nil);
end;


procedure TfmMain.Generate;
var I: Integer;

  function Sine(Amp, Freq, N: Integer): TdspSingle;
  begin
    Result:= Amp * Sin(2 * PI * Freq * N / cSampleRate);
  end;

begin
  for I:= 0 to dspFFT1.BufferSize - 1 do
  begin
    dspFFT1.RealIn[I]:=
      Sine(Amp1, Freq1, I) +
      Sine(Amp2, Freq2, I) +
      Sine(Amp3, Freq3, I);
    dspFFT1.ImagIn[I]:= 0;
  end;
end;


procedure TfmMain.Transform;
begin
  dspFFT1.FFT;
  dspFFT1.CalculateMagnitudes;
end;


procedure TfmMain.Visualize;
var I: Integer;
begin
  Series1.Clear;
  for I:= 0 to dspFFT1.BufferSize - 1 do Series1.AddXY(I, dspFFT1.RealIn[I], '', clMaroon);

  Series2.Clear;
  for I:= 0 to dspFFT1.BufferSize2 - 1 do Series2.AddXY(I, dspFFT1.RealOut[I], '', clMaroon);
end;


procedure TfmMain.tbChange(Sender: TObject);
begin
  Amp1:= tbAmp1.Position;
  Freq1:= tbFreq1.Position;
  edtAmp1.Text:= IntToStr(Amp1);
  edtFreq1.Text:= IntToStr(Freq1);

  Amp2:= tbAmp2.Position;
  Freq2:= tbFreq2.Position;
  edtAmp2.Text:= IntToStr(Amp2);
  edtFreq2.Text:= IntToStr(Freq2);

  Amp3:= tbAmp3.Position;
  Freq3:= tbFreq3.Position;
  edtAmp3.Text:= IntToStr(Amp3);
  edtFreq3.Text:= IntToStr(Freq3);

  Generate;
  Transform;
  Visualize;
end;


procedure TfmMain.Exit1Click(Sender: TObject);
begin
  Close;
end;


procedure TfmMain.About1Click(Sender: TObject);
begin
  fmAbout.ShowModal;
end;


procedure TfmMain.Panel1Resize(Sender: TObject);
begin
  Chart1.Height:= Panel1.Height div 2;
end;


procedure TfmMain.TabSet1Change(Sender: TObject; NewTab: Integer;
  var AllowChange: Boolean);
var FileName: String;
begin
  Notebook1.PageIndex:= NewTab;
  if NewTab = 1 then
  begin
    FileName:= ExtractFilePath(Application.ExeName) + 'Main.pas';
    if FileExists(FileName) then Memo1.Lines.LoadFromFile(FileName)
    else Memo1.Text:= 'File "' + FileName + '" - not exists';
  end;
end;


end.

⌨️ 快捷键说明

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