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

Автор работы: Пользователь скрыл имя, 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 Кб (Скачать документ)

Программа 14

function ShowForm : Integer; stdcall;

var

        Form : TDLLForm;

begin

        Form := TDLLForm.Create(Application);

        Result := Form.ShowModal;

        Form.Free;

Окончание программы 14

end;

 

Для того чтобы проект был скомпилирован без ошибок, необходимо добавить в секцию uses модуль Forms.

Экспортируем функцию с использованием ключевого слова exports, описанную в программе 15.

Программа 15

exports

ShowForm;

 

Компилируем проект и получаем файл dllforms.dll. Эти простые шаги - все, что необходимо сделать для создания динамической библиотеки, содержащей форму. Обратим внимание, что функция ShowForm объявлена с использованием ключевого слова stdcall. Оно сигнализирует компилятору использовать при экспорте функции соглашение по стандартному вызову standard call calling convention. Экспорт функции, таким образом, создает возможность использования разработанной DLL не только в приложениях, созданных в Delphi.

Соглашение по вызову Calling conventions определяет, каким образом передаются аргументы при вызове функции. Существует пять основных соглашений: stdcall, cdecl, pascal, register и safecall. Значение, возвращаемое функцией ShowForm, соответствует значению ShowModal. Таким образом, можем передавать некоторую информацию о состоянии формы вызывающему приложению.

Далее рассмотрено два листинга, первый из которых содержит полный код файла проекта DLL, а второй - модуль вызывающего приложения, в котором разработана библиотека, описаных в программе 16.

 

Программа 16

library DllForms;

uses

        SysUtils,

        Classes,

        Forms,

        DllFormUnit in 'DllFormUnit.pas' {DllForm};

{$R *.RES}

function ShowForm : Integer; stdcall;

var

        Form : TDLLForm;

begin

Form := TDLLForm.Create(Application);

        Result := Form.ShowModal;

        Form.Free;

end;

begin

end.

unit TestAppUnit;

interface

uses

        Windows, Messages, SysUtils, Classes, Graphics,

        Controls, Forms, Dialogs, StdCtrls;

type

        TForm1 = class(TForm)

        Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

Окончание программы 16

public

{ Public declarations }

end;

var

        Form1: TForm1;

function ShowForm : Integer; stdcall;

external dllforms.dll';

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

begin

        ShowForm;

end;

end.

 

При экспорте функции также было использовано ключевое слово stdcall.

Следует обратить особое внимание на работу с дочерними формами в DLL. Если, к примеру, в вызывающем приложении главная форма имеет значение свойства FormStyle, равным MDIForm, то при попытке вызова из DLL MDIChild-формы, на экране появится сообщение об ошибке, в котором будет говориться, что нет ни одной активной MDI-формы.

В тот момент, когда  пытаемся показать дочернее окно, VCL проверяет корректность свойства FormStyle главной формы приложения. Проблема в том, что при проведении такой проверки, рассматривается объект Application, принадлежащий не вызывающему приложению, а собственно динамической библиотеке. Поскольку в DLL нет главной формы, проверка выдает ошибку. Для того чтобы избежать такой ситуации, надо назначить объекту Application динамической библиотеки объект Application вызывающего приложения. Естественно, это заработает только в том случае, когда вызывающая программа - VCL-приложение. Кроме того, перед выгрузкой библиотеки из памяти необходимо вернуть значение объекта Application библиотеки в первоначальное состояние. Это позволит менеджеру памяти очистить оперативную память, занимаемую библиотекой. Следовательно, нужно сохранить указатель на "родной" для библиотеки объект Application в глобальной переменной, которая может быть использована при восстановлении его значения.

 

3.2.4 Алгоритм работы, с помещенным в DLL MDIChild-формами

 

-В динамической библиотеке создаем глобальную переменную типа TApplication;

-сохраняем указатель на объект Application DLL в глобальной переменной;

-объекту Application динамической библиотеки ставим в соответствие указатель на Application вызывающего приложения;

-создаем MDIChild-форму и работаем с ней;

-возвращаем в первоначальное состояние значение объекта Application динамической библиотеки и выгружаем DLL из памяти.

Помещаем следующий код в верхней части модуля DLL, описанного в программе 17.

Программа 17

var

DllApp : TApplication;

Затем создаем процедуру, которая будет изменять значение объекта Application и создавать дочернюю форму. Процедура, описанная в

программе 18.

Программа 18

procedure ShowMDIChild(MainApp : TApplication);

var

        Child : TMDIChild;

begin

        if not Assigned(DllApp) then begin

                DllApp := Application;

                Application := MainApp;

        end;

        Child := TMDIChild.Create(Application.MainForm);

        Child.Show;

end;

 

Все что теперь необходимо сделать, - это предусмотреть возвращение значения объекта Application в исходное состояние. Делаем это с помощью процедуры MyDllProc, описанной в программе 19.

Программа 19

procedure MyDLLProc(Reason: Integer);

begin

        if Reason = DLL_PROCESS_DETACH then

        { DLL is выгружается. Восстанавливаем значение указателя Application}

        if Assigned(DllApp) then

        Application := DllApp;

end;

 

 

 

 

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

 

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

 

Задача спектрального оценивания подразумевает оценивание некоторой функции частоты. О характеристиках спектральной оценки судят по тому, насколько хорошо она согласуется с известным спектром тест-сигнала в некоторой непрерывной области частот.

 

4.1.1 Проблемы в области спектрального оценивания

 

Интерес к альтернативным методам спектрального анализа поддерживается тем улучшением характеристик, которое они обещают, а именно более высоким частотным разрешением, повышенной способностью к обнаружению слабых сигналов или же сохранением  «достоверности»  формы спектра при меньшем числе используемых параметров. Аналитически описать характеристики большинства методов в случае ограниченного времени анализа весьма  затруднительно.

Спектральное разрешение относится к числу главных проблем современного спектрального оценивания, в особенности применительно к анализу коротких последовательностей данных. При этом то, что понимается под термином «разрешение», носит весьма субъективный характер. Принято характеризовать относительные величины разрешающей способности двух спектральных оценок на основе визуальных впечатлений.

 

 

 

 

4.1.2 Спектральные оценки по конечным последовательностям данных

 

Спектральная оценка, получаемая по конечной записи данных, характеризует некоторое предположение относительно той истинной спектральной функции, которая была бы получена, если бы в нашем распоряжении имелась запись данных бесконечной длины. Именно поэтому поведение и характеристики спектральных оценок должны описываться с помощью статистических терминов. Общепринятыми статистическими критериями качества оценки являются ее смещение и дисперсия. Аналитическое определение этих величин обычно наталкивается на определенные математические трудности, поэтому на практике просто совмещают графики нескольких реализаций спектральной оценки и визуально определяют смещение и дисперсию как функции частоты. Те области совмещенных графиков спектральных оценок, где экспериментально определенное значение дисперсии велико, будут свидетельствовать о том, что спектральные особенности, видимые в спектре отдельной реализации, не могут считаться статистически значимыми. С другой стороны, особенности совмещенных спектров в тех областях, где эта дисперсия мала, с большой достоверностью могут быть соотнесены с действительными частотными  составляющими анализируемого сигнала. Однако в случае коротких  записей данных часто не удается  получить несколько  спектральных оценок, да и сам статистический анализ отдельных спектральных оценок, полученных по коротким записям данных, в общем, случае представляет собой весьма трудную проблему. 

Из формального определения спектра, следует, что спектр является некоторой функцией  одних лишь статистик второго порядка, относительно которых в свою очередь предполагается, что они остаются неизменными, или стационарными во времени. Следовательно, такой спектр не передает полной статистической информации об анализируемом случайном процессе, а значит, дополнительная информация может содержаться в статистиках третьего и более высокого порядка. Кроме того, многие обычные сигналы, которые приходится анализировать на практике, не являются стационарными. Однако короткие сегменты данных, получаемые из более длинной записи данных, можно считать локально стационарными. Анализируя изменения спектральных оценок от одного такого сегмента к другому, можно затем составить представление и об изменяющихся во времени статистиках сигналов, то есть нестационарных.  

 

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

 

Преобразование Фурье бывает двух видов: дискретное и непрерывное. Непрерывное используется математиками в аналитических исследованиях, дискретное применяется во всех остальных случаях.

Непрерывное преобразование Фурье - преобразование, которое применяется к функции h(t), заданной на интервале . В результате получается функция H(f) – формула 8:

             

,                                     (8)
 

где h(t) – прообраз функции;

H(f) – образ функции;

также существует обратное преобразование, которое позволяет по образу H(f) восстановить исходную функцию h(t) – формула 9:

,                   (9)
 

Очевидно, что образ H(f) является комплексной функцией вещественного аргумента, но также и h(t) может принимать не только вещественные, но и комплексные значения.

Применение преобразования Фурье в некоторых областях:

-анализ сигналов;

-фильтрация сигналов;

-ускоренное вычисление корелляции и свертки;

-использование в алгоритмах быстрого умножения чисел.

 

4.2.1 Свойства непрерывного преобразования Фурье

 

В таблице 6 описана связь свойств прообраза h (t) и образа H (f).

Таблица 6

Если

То

h(t) вещественная

H(-f) = H ·(f)

h(t) чисто мнимая

H(-f) = -H ·(f)

h(t) четная

H(f) четная

h(t) нечетная

H(f) нечетная

h(t) вещественная и четная

H(f) вещественная и четная

h(t) вещественная и нечетная

H(f) чисто мнимая и нечетная

h(t) чисто мнимая и четная

H(f) чисто мнимая и четная

h(t) чисто мнимая и нечетная

H(f) вещественная и нечетная


 

Данная таблица показывает, как меняется образ при изменении прообраза. Пусть запись   обозначает, что H(f) является образом h(t). Тогда имеют место следующие отношения, представленные в формулах 10, 11, 12, 13.

 

                    (10)

,

  ,                    (11)

                                                             

         ,              (12)             

  ,                                     (13)

где а, b, c –коэффициенты;             

H(f) – прообраз функции;

h(t) – образ функции.

Следующий набор свойств относится к операциям свертки и корелляции. Свертка функций g и h представлена в формуле 14.

                                                                                                                             

,                             (14)                                   (14)             

 

 

где g, h – функции;                                                        

t, τ – переменные, по которым осуществляется интегрирование.

Корелляция функций g и h, представленная в формуле 15.

                                                          ,                              (15)

 

В таком случае имеют место следующие отношения, представленные в формулах 16, 17,18.

,                                                                      (16)

,                                                        (17)

              ,                                                        (18)

 

4.2.2 Дискретное преобразование Фурье

 

С непрерывным преобразованием Фурье удобно работать в теории, но на практике обычно имеем дело с дискретными данными. Очень часто дано не аналитическое выражение преобразуемой функции, а лишь набор её значений на некоторой сетке (обычно на равномерной). В таком случае приходится делать допущение, что за пределами этой сетки функция равна нулю, и аппроксимировать интеграл интегральной суммой.

В случае равномерной сетки эта формула упрощается. Также на равномерной сетке обычно избавляются от шага, чтобы получить безразмерную формулу , как описано в формуле 19.

 

,                            (19)
 

где Hn – выходная последовательность;

hk – исходная последовательность;

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