Автор работы: Пользователь скрыл имя, 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-диск
Заключение
В данной выпускной квалификационной работе мной на основе исследуемых материалов по теме спектральный анализ сигнала проведено:
- освоен язык программирования 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(
graph2();
end;
procedure TForm1.graph1(); // График сигнала
var i:byte;
begin
Form1.Series1.Clear;
for i:=0 to 255 do Form1.Series1.AddXY(i,Buffer[
end;
procedure TForm1.graph2(); // График спектра
var i:byte;
begin
Form1.Series2.Clear;
for i:=0 to 255 do Form1.Series2.AddXY(i,Buffer[
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
Информация о работе Разработка анализатора спектра ультразвукового сигнала