Разработка анализатора спектра ультразвукового сигнала

Автор работы: Пользователь скрыл имя, 17 Мая 2012 в 18:17, дипломная работа

Описание

Целью является расширить функциональные возможности ультразвукового акустического тракта «ТРАК», посредством разработки программного модуля, реализующего обмен данными с IBM PC и анализ спектра получаемого сигнала.

Содержание

Введение

1
Ультразвуковая дефектоскопия


1.1 Теневой метод ультразвуковой дефектоскопии


1.2 Эхо - импульсный метод ультразвуковой дефектоскопии


1.3 ''ТРАК'' Акустический модуль

2
Параллельный интерфейс: LPT-порт


2.1 Традиционный LPT-порт

3
Язык программирования - Delphi


3.1 Функциональные задачи при конструировании интерфейса


3.2 Разработка DLL в среде Borland Delphi

4
Теоретический анализ существующих алгоритмов спектрального анализа.


4.1 Задача спектрального оценивания


4.2 Преобразование Фурье


4.3 Быстрое преобразование Фурье


Заключение


Список использованных источников


Приложение А


Приложение Б


CD-диск

Работа состоит из  1 файл

диплом 22.06.doc

— 998.50 Кб (Скачать документ)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Заключение

 

В данной выпускной квалификационной работе мной на основе исследуемых материалов по теме спектральный анализ сигнала проведено:

- освоен язык программирования Delphi;

-изучен параллельный интерфейс (LPT порт в режиме EPP);

-освоен механизм подключения и создания динамических библиотек;

-расширены функциональные возможности «ТРАКа», (разработан анализатор спектра сигнала).

В любой работе есть как плюсы, так и минусы. Среди минусов данной работы следует отметить, что программа находится в процессе разработки, но основная цель работы достигнута, т.е. получена качественная зависимость между входным сигналом и спектром данного сигнала. Среди плюсов данной работы следует отметить, что на базе данной работы можно разработать методическое пособие для выполнения лабораторных работ.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список использованных источников

 

1 Рабинер Л., Голуд Б. Теория и применение цифровой обработки сигналов: Пер. с англ. Под ред. Ю. Н. Александрова. - М.: Мир, 1978.

2 Харкевич А.А. Спектры и анализ.  - М.: Государственное издательство физико-математической литературы, 1962.

3 Голямина И.П. Ультразвук. - М.: Советская энциклопедия, 1979.

4 Колесников, Алексей Евгеньевич. Ультразвуковые измерения / А. Е. Колесников. - 2-е изд., доп. и перераб. - М. : Изд-во стандартов, 1982. - 248 с.

5 Крауткремер, Йозеф. Ультразвуковой контроль материалов : Справочник; пер. с нем. / Й. Крауткремер, Г. Крауткремер. - М. : Металлургия, 1991. - 750 с.

6 Алешин, Николай Павлович. Ультразвуковая дефектоскопия : Справочное пособие / Н. П. Алешин, В. Г. Лупачев. - Минск : Вышэйшая школа, 1987. - 271 с. : ил. - Библиогр.: с. 262-263.

7 Дантеманн, Джефф. Программирование в среде Delphi : пер. с англ. / Дж. Дантеманн, Дж. Мишел, Д. Тейлор. - Киев : ДиаСофт Лтд, 1995. - 608 с.

8 Культин, Никита. Программирование в Turbo Pascal 7.0 и Delphi : Cамоучитель / Н. Б. Культин. - 2-е изд. - СПб. : BHV, 2000. - 416 с. + Прил.: дискета. - Библиогр.: с. 401. - Предм. указ.: с. 402-404.

9 Сухарев, Михаил В. Основы Delphi. Профессиональный подход / М. В. Сухарев. - СПб. : Наука и техника, 2004. - 596 с.

10 Вадутов, Олег Самигулович. Математические основы обработки сигналов : лабораторный практикум / О. С. Вадутов ; Томский политехнический университет. — Томск : Изд-во ТПУ, 2001. — 67 с.

11 Марпл, Стэнли Лоренс. Цифровой спектральный анализ и его приложения : пер. с англ. / С. Л. Марпл. — М. : Мир, 1990. — 584 с.

 

 

 

Приложение А

 

unit Spector;

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, Buttons, TeEngine, Series, ExtCtrls, TeeProcs, Chart, StdCtrls,

  ComCtrls, AP, RealFFT;

type

  TForm1 = class(TForm)

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    Chart1: TChart;

    Chart2: TChart;

    Timer1: TTimer;

    Series1: TLineSeries;

    Series2: TBarSeries;

    procedure Button3Click(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure oncreate1(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure showData(Sender: TObject);

    procedure graph1();

    procedure graph2();

  private

    { Private declarations }

  public

    { Public declarations }

  end;

  DataBuffer = array[0..255] of integer;   // данные из ТРАК

var

  Form1: TForm1;

//  Buffer: dataBuffer;      // данные из ТРАК

  Buffer: TReal1DArray;      // данные из ТРАК

  Phase:real;

implementation

{$R *.dfm}

procedure TForm1.Button3Click(Sender: TObject); //кнопка – выход из программы

begin

close();

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

   //Включить таймер//

   phase := 0;

   Timer1.Enabled := true;

   //graph();

end;

procedure TForm1.oncreate1(Sender: TObject);

begin

  SetLength(Buffer, 256);

  //Подключение ТРАК DLL//

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

  //Таймер выключен

   Timer1.Enabled := False;

end;

//procedure getdata(var x:dataBuffer);  //Получение данных из порта random())

procedure getdata(var x:TReal1DArray);//Получение данных из порта random())

var i:byte;

begin

For i := 0 to 255 do x[i]:=random(255);       // сигнал - шум

phase := phase + 2*pi/255;                      // фаза

//For i := 0 to 255 do x[i]:=sin(i/255*2*pi + phase);     // сигнал - синусоида

end;

procedure TForm1.Showdata(Sender: TObject);     // Вызов по тиймеру

begin

    getdata(Buffer);

    graph1();

    RealFastFourierTransform(Buffer,256,True);

    graph2();

end;

procedure TForm1.graph1();      // График сигнала

  var i:byte;

begin

        Form1.Series1.Clear;

        for i:=0 to 255 do Form1.Series1.AddXY(i,Buffer[i]);

end;

procedure TForm1.graph2();      // График спектра

  var i:byte;

begin

        Form1.Series2.Clear;

        for i:=0 to 255 do Form1.Series2.AddXY(i,Buffer[i]);

end;

end.

 

 

Приложение Б

 

Быстрое преобразование Фурье

Алгоритм проводит быстрое преобразование Фурье функции, заданной n отсчетами ни действительной оси.

В зависимости от переданных параметров, может выполняться как прямое, так и обратное преобразование.

unit realfft;

interface

uses Math, Ap, Sysutils;

procedure RealFastFourierTransform(var a : TReal1DArray;

     tnn : Integer;

     InverseFFT : Boolean);

implementation

procedure RealFastFourierTransform(var a : TReal1DArray;

     tnn : Integer;

     InverseFFT : Boolean);

var

    twr : Double;

    twi : Double;

    twpr : Double;

    twpi : Double;

    twtemp : Double;

    ttheta : Double;

    i : Integer;

    i1 : Integer;

    i2 : Integer;

    i3 : Integer;

    i4 : Integer;

    c1 : Double;

    c2 : Double;

    h1r : Double;

    h1i : Double;

    h2r : Double;

    h2i : Double;

    wrs : Double;

    wis : Double;

    nn : Integer;

    ii : Integer;

    jj : Integer;

    n : Integer;

    mmax : Integer;

    m : Integer;

    j : Integer;

    istep : Integer;

    isign : Integer;

    wtemp : Double;

    wr : Double;

    wpr : Double;

    wpi : Double;

    wi : Double;

    theta : Double;

    tempr : Double;

    tempi : Double;

begin

    if tnn=1 then

    begin

        Exit;

    end;

    if  not InverseFFT then

    begin

        ttheta := 2*Pi/tnn;

        c1 := 0.5;

        c2 := -0.5;

    end

    else

    begin

        ttheta := 2*Pi/tnn;

        c1 := 0.5;

        c2 := 0.5;

        ttheta := -ttheta;

        twpr := -2.0*sqr(sin(0.5*ttheta));

        twpi := sin(ttheta);

        twr := 1.0+twpr;

        twi := twpi;

        i:=2;

        while i<=tnn div 4+1 do

        begin

            i1 := i+i-2;

            i2 := i1+1;

            i3 := tnn+1-i2;

            i4 := i3+1;

            wrs := twr;

            wis := twi;

            h1r := c1*(a[i1]+a[i3]);

            h1i := c1*(a[i2]-a[i4]);

            h2r := -c2*(a[i2]+a[i4]);

            h2i := c2*(a[i1]-a[i3]);

            a[i1] := h1r+wrs*h2r-wis*h2i;

            a[i2] := h1i+wrs*h2i+wis*h2r;

            a[i3] := h1r-wrs*h2r+wis*h2i;

            a[i4] := -h1i+wrs*h2i+wis*h2r;

            twtemp := twr;

            twr := twr*twpr-twi*twpi+twr;

            twi := twi*twpr+twtemp*twpi+twi;

            Inc(i);

        end;

        h1r := a[0];

        a[0] := c1*(h1r+a[1]);

        a[1] := c1*(h1r-a[1]);

    end;

    if InverseFFT then

    begin

        isign := -1;

    end

    else

    begin

        isign := 1;

    end;

    n := tnn;

    nn := tnn div 2;

    j := 1;

    ii:=1;

    while ii<=nn do

    begin

        i := 2*ii-1;

        if j>i then

        begin

            tempr := a[j-1];

            tempi := a[j];

            a[j-1] := a[i-1];

            a[j] := a[i];

            a[i-1] := tempr;

            a[i] := tempi;

        end;

        m := n div 2;

        while (m>=2) and (j>m) do

        begin

            j := j-m;

            m := m div 2;

        end;

        j := j+m;

        Inc(ii);

    end;

    mmax := 2;

    while n>mmax do

    begin

        istep := 2*mmax;

        theta := 2*Pi/(isign*mmax);

        wpr := -2.0*sqr(sin(0.5*theta));

        wpi := sin(theta);

        wr := 1.0;

        wi := 0.0;

        ii:=1;

        while ii<=mmax div 2 do

        begin

            m := 2*ii-1;

            jj:=0;

            while jj<=(n-m) div istep do

            begin

                i := m+jj*istep;

                j := i+mmax;

                tempr := wr*a[j-1]-wi*a[j];

                tempi := wr*a[j]+wi*a[j-1];

                a[j-1] := a[i-1]-tempr;

                a[j] := a[i]-tempi;

                a[i-1] := a[i-1]+tempr;

                a[i] := a[i]+tempi;

                Inc(jj);

            end;

            wtemp := wr;

            wr := wr*wpr-wi*wpi+wr;

            wi := wi*wpr+wtemp*wpi+wi;

            Inc(ii);

        end;

        mmax := istep;

    end;

    if InverseFFT then

    begin

        I:=1;

        while I<=2*nn do

        begin

            a[I-1] := a[I-1]/nn;

            Inc(I);

        end;

    end;

    if  not InverseFFT then

    begin

        twpr := -2.0*sqr(sin(0.5*ttheta));

        twpi := sin(ttheta);

        twr := 1.0+twpr;

        twi := twpi;

        i:=2;

        while i<=tnn div 4+1 do

        begin

            i1 := i+i-2;

            i2 := i1+1;

            i3 := tnn+1-i2;

            i4 := i3+1;

            wrs := twr;

            wis := twi;

            h1r := c1*(a[i1]+a[i3]);

            h1i := c1*(a[i2]-a[i4]);

            h2r := -c2*(a[i2]+a[i4]);

            h2i := c2*(a[i1]-a[i3]);

            a[i1] := h1r+wrs*h2r-wis*h2i;

            a[i2] := h1i+wrs*h2i+wis*h2r;

            a[i3] := h1r-wrs*h2r+wis*h2i;

            a[i4] := -h1i+wrs*h2i+wis*h2r;

            twtemp := twr;

            twr := twr*twpr-twi*twpi+twr;

            twi := twi*twpr+twtemp*twpi+twi;

            Inc(i);

        end;

        h1r := a[0];

        a[0] := h1r+a[1];

        a[1] := h1r-a[1];

    end;

end;

end.

3

 



Информация о работе Разработка анализатора спектра ультразвукового сигнала