Автоматизированная система диагностики дефектов в конструкциях электронных средств на основе акустических сигналов
Государственное бюджетное образовательное учреждение
высшего профессионального образования
«СУРГУТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ХМАО-Югра»
Факультет информационных технологий
Кафедра автоматизированных систем обработки информации и управления
КУРСОВАЯ РАБОТА
по дисциплине
«Моделирование систем»
Автоматизированная
система диагностики дефектов в конструкциях электронных средств на основе
акустических сигналов
Студент гр. 1192 Волков А. Д.
Руководитель Увайсов С.У.
Сургут 2012г.
АННОТАЦИЯ
В работе описано создание автоматизированной системы диагностики
конструктивных дефектов на основе акустических сигналов и методика анализа
звукового сигнала. Расчет проводится с помощью спектрального анализа звукового
сигнала.
ВВЕДЕНИЕ
Виброакустическая диагностика, являясь разделом технической диагностики,
есть отрасль знаний, включающая в себя теорию и методы организации процессов
распознавания технических состояний машин и механизмов по исходной информации,
содержащейся в виброакустическом сигнале.
Вибродиагностика - это одна из относительно новых отраслей науки,
основанная на предположении, что любой объект (технический, биологический и т.
д.) может быть представлен в виде колебательной системы и спектра вибросигнала,
стимулированного либо тестом, либо функциональными возмущениями, содержащих
информацию о техническом состоянии, дефектах и качестве объекта. Способ
извлечения и расшифровки этой информации составляют основную задачу
диагностики, которая в последнее время решается с помощью вычислительной техники.
Различают функциональную и тестовую диагностику. Под функциональной
диагностикой чаще всего подразумевают виброакустическую диагностику, а под
тестовой - определение технического состояния с помощью искусственно
создаваемой вибрации.
На основании диагноза определяется оптимальный режим эксплуатации
агрегата в условиях возникшей неисправности и технология устранения дефекта и
восстановления работоспособности агрегата. Чем надежней и конкретней диагноз,
тем ниже затраты, связанные с восстановлением агрегата[2].
Глава 1 посвящена постановке задачи: определение цели данной работы и
основных характеристик разрабатываемой автоматизированной системы диагностики
по средствам акустических сигналов.
В главе 2 осуществлен аналитический обзор пакета программ, которые
использовались в процессе моделирования.
В главе 3 представлен алгоритм анализа звукового сигнала, структурная
схема автоматизированной системы, а также описывается интерфейс разработанной
программы.
Проверка работы созданной системы в главе 4. Она осуществляется путем
подачи различных wav-файлов в
качестве входных данных на вход программы.
В результате получаем ответ о наличии признаков различных дефектов в
звуковом сигнале и на основе этого выстраиваем представление о состоянии
источника сигнала.
Для более детального изучения рассматриваемого вопроса можно обратиться к
списку использованной литературы, приведенному в конце данной работы.
1.
ПОСТАНОВКА ЗАДАЧИ
Цель работы: создать автоматизированную систему диагностирования дефектов
в конструкциях электронных средств на основе анализа акустических сигналов,
снимаемых с соответствующего датчика, которая сравнивала бы получаемые данные с
образцами из банка эталонных звуковых образов с характерными для них
параметрами и описанием.
Для этого необходимо провести моделирование звуковых сигналов
генерируемых вследствие конструктивных дефектов. Далее нужно осуществить анализ
полученных звуковых сигналов, с целью определения характерных для них
параметров. При отсутствии соответствующего лабораторного оборудования,
предлагается использовать корпус акустической гитары со встроенным микрофоном
для моделирования звуковых сигналов. Микрофон гитары изолирован корпусом от
внешней среды, что дает наименьший уровень постороннего шума, а так же корпус
гитары достаточно сильно усиливает звуки воздействия на него, что позволяет
получать достаточно чистый и громкий звуковой сигнал воздействий на корпус, тем
самым создать физическую модель конструкции «с шумами». Затем нужно определить
критерии для регистрации и классификации дефекта.
Разрабатываемая автоматизированная система должна обеспечивать:
1. Использование банка дефектов, который содержит характеристики
звуковых сигналов дефектов.
2. Анализ звуковых сигналов.
. Графическое представление звукового сигнала.
2.
ОБЗОРНО-АНАЛИТИЧЕСКАЯ ГЛАВА
На этапе поиска информативных признаков ограничивают число измеряемых
параметров вибрации, шума и ударов. При этом из множества параметров,
характеризующих вибрационный процесс, выделяют только те, которые прямо или
косвенно характеризуют состояние объекта. По этим параметрам формулируют
информативную систему признаков, используемых при диагностировании.
Выбор диагностических параметров вибрации зависит от типов исследуемых
механизмов, амплитудного и частотного диапазона измеряемых колебаний.
В низкочастотном диапазоне чаще измеряют параметры виброперемещения, в
среднечастотном - виброскорости, а в высокочастотном - виброускорения[9].
В зависимости от спектрального состава, распределения уровней вибрации в
диапазоне частот и во времени, а также от нормирования допустимого уровня
измеряют амплитудные, средние или средние квадратические значения. Основным
преимуществом измерения, средних квадратических значений является независимость
этих значений от сдвигов фаз между отдельными составляющими спектров измеряемой
вибрации.
Помимо этих средств, существуют программы, позволяющие анализировать
звуковой сигнал: SoundForge, WaveLab, Adobe Audition, SpectraPLUS и др. Среди
математических пакетов общепризнанными лидерами являются MathCAD, MatLab, Mathematica
и т.д.[13].
Так же есть возможность создать специализированную программы для
автоматизированной системы с помощью языков программирования, таких как C/C++, C#, Delphi и др. С использование стандартной
для Windows библиотеки DirectSound или ASIO, SDK
которой предоставляет в свободном доступе по лицензионному соглашению компания Steinberg[12].
Для написания программы анализа звукового сигнала было решено
использовать математический пакет MatLab [11]. Данный пакет MATLAB фирмы «The MathWorks», является мировым
стандартом в области научных и технических расчетов. Базовая библиотека MATLAB
и пакет расширения Signal Processing содержат большое количество функций,
позволяющих быстро и наглядно осуществлять и исследовать различные алгоритмы,
связанные с цифровой обработки сигнала.
Для написания интерфейса для программы анализа звукового сигнала
использовался пакет программ «Microsoft Visual Studio 2008», объектно-ориентированный язык
C#, являющийся языком разработки
приложений для платформы Microsoft .NET Framework. Пакет «Microsoft Visual Studio 2008» является одним из линейки продуктов компании Microsoft, включающий интегрированную среду
разработки программного обеспечения и ряд других инструментальных средств.
Данный пакет позволяет интегрировать программы написанные в MatLab и взаимодействовать с ними[14]. В
данной системе можно быстро и качественно разрабатывать графические приложения,
используя готовые компоненты.
Также требуется подключение встроенной библиотеки .NET: Microsoft.Office.Interop.Excel для
взаимодействия с банком дефестов реализованной в электронной таблицы.
На сегодняшний день существует полноценная автоматизированная система
диагностики ZETLab [9], специализирующийся на анализе
различных сигналов и мониторинга систем. ZETLab представляет собой аппаратно-программный комплекс,
включающий в себя различные датчики сигналов, АЦП/ЦАП и программное
обеспечение. Данная система является коммерческим продуктом и не имеет
возможности создавать базы данных сигналов и сравнивать входящий сигнал с ней.
Поэтому на данном этапе необходимо использовать вышеуказанных компонентов для
создания, методики анализа, сравнения сигналов и удобного интерфейса для
пользователя.
3.
ОСНОВНАЯ ГЛАВА
3.1. Основная методика анализа и сравнения
звуковых сигналов
Анализ и сравнение звуковых сигналов заключается в следующем.
1. Физическое моделирование генерации звуковых сигналов дефектов с
помощью корпуса акустической гитары и встроенного в него микрофона. Звуковые
сигналы необходимо записать в wav-файл
с помощью Adobe Audition. Для более детальной
демонстрации примера работы программы, предлагается записать по 10-15 отдельных
сигналов двух разных типов дефектов.
. Полученный в результате физического моделирования звуковой сигнал
следует исследовать на наличие уникальных параметров и характеристик. Для этого
необходим математически пакет MatLab
с его функциями обработки сигнала и возможностью разложить сигнал в ряд Фурье.
В ходе анализа требуется выделить несколько критериев, по которым сигнал будет
распознаваться. В качестве критериев будет выступать матрица, полученной с
помощью разложения в ряд Фурье. Столбцы матрицы соответствуют частотам, а
строки временному промежутку.
. После получения критериев, следует оформить банк дефектов и внести в
него значения параметров сигнала. Для оптимизации предлагается внести в банк
дефектов только среднее значение параметров и допустимый интервал погрешности,
полученных с помощью статистического метода на основе выборки[15]. Банк
дефектов в данной работе реализован с помощью таблицы Excel.
. Далее следует этап диагностики звукового сигнала, который состоит в
следующем:
.1. запись в wav-файла
со случайным набором звуковых сигналов с физической модели;
3.2. Импортирование сигнала из wav-файла в программу автоматизированной системы
диагностики.
.3. Анализ сигнала и определения значения параметров на отдельных
участков сигнала необходимых для распознавания дефектов.
.4. Сравнение полученных значений параметров со значениями в банке
дефектов.
.5. В случае выявления совпадения критериев сравнения более чем на
85% выдача сообщения пользователю о наличие признаков определенных дефектов в
понятном для пользователя виде.
Следует отметить, что при отсутствии имитационной модели генерации
звуковых сигналов, должна быть обеспечена возможность использовать внешние
источники данных в виде wav-файлов.
3.2. Структурная схема автоматизированной
системы
На рис. 1 представлена структурная схема автоматизированной системы. Ниже
дано краткое описание функций её блоков.
Рис.1. Структурная схема системы
Как уже отмечалось ранее, при отсутствии имитационной модели генерации
сигналов, предусмотрен ручной ввод данных в программу автоматизированной
системе в виде заранее записанных в программе Adobe Audition wav-файлов. Это осуществляется оператором. Так же стоит
учесть, что программа не имеет полноценной базы дефектов. Банк дефектов
составляется разработчиком, и нет возможности пополнять его процессе
эксплуатации. В данной курсовой работе предусмотрен именно такой вариант. Но
при дальнейшей модификации данной программы будет реализоваться база данных, а
так же возможность записи сигнала поступающего с АЦП его анализ в реальном
времени без остановки записи с возможностью занесения результатов в базу
данных.
В банке дефектов хранятся характеристики звуковых сигналов, которые затем
потребуются при их. Он хранит такие параметры сигнала, как: название дефекта,
амплитудно-частотные характеристики и доверительный интервал значений.
Сигнал поступает на вход программы автоматизированной системы, где
подвергается анализу. Модуль анализа Diag представляет результат в виде матрицы, строки которой соответствуют
временному отрезку, а столбцы частоте. Данный модуль использует алгоритм по
нахождению Mfcc коэффициентов реализованный в [6].
Он настроен на работу с wave-файлами
частота дискретизации которых равна 44100Гц. Это накладывает ограничения на
входящие данные. Листинг модуля представлен в Приложении 1.
3.3. Описание интерфейса программы
Интерфейс реализован в виде окна с двумя кнопками «График» и
«Диагностика», а так же области для выводимых пользователю сообщений. Вид
интерфейса при первоначальном запуске программы представлен на рис.2.
Рис. 2 Окно программы DiagSound
Кнопка «График» предназначена для отображения диагностируемого сигнала в
виде график. Она не доступна пока не импортировали сигнал в виде wave-файла при помощи меню.
Кнопка «Диагностика» предназначена для запуска процедуры диагностики
сигнала. Она не доступна пока не импортировали сигнал в виде wave-файла и банка дефектов при помощи
меню. После ее нажатия программа начнет анализировать сигнал и сверять
полученные с помощью анализа данные с данными из банка дефектов. Процесс
диагностики занимает некоторое время, в которое к программе нельзя будет
обратиться. По завершение процесса диагностики в области сообщений появятся
информация о найденных признаков дефектов.
4.
ПРОВЕРКА РАБОТЫ СИСТЕМЫ
Для проверки работы системы было записано при помощи физической модели
конструкций «с шумами» и программы Adobe Audition 3, два wave-файла с сигналами дефектов «стука» и
«треска» по 10 секунд каждый, информацию о которых имеется в банке дефектов.
Частота дискретизации wave-файлов
равна 44100Гц, что допустимо для программы. Проведем диагностику этих сигналов.
Загрузим wave-файл «Стуки.wav» содержащий звуковые сигналы стуков.
Посмотрим график сигнала с помощью кнопки «График», чтобы убедиться о
правильности импортирования wave-файла.
График представлен на рис. 3
Рис. 3 График сигнала из wave-файла
«Стуки.wav»
Как видно из графика, сигнал загружен правильно и содержит в себе 11 ярко
выраженных всплеска амплитуды. Загрузим банк дефектов Data.xlsx с помощью меню
и проведем диагностику данного сигнала, нажав кнопку «Диагностика». Результат
диагностики представлен на рис. 4.
Рис. 4 Результат диагностики сигнала «Стук.wav»
Время процедуры диагностирования 2 мин. 27 сек. Как видно из рисунка 4,
программа выдала гораздо больше сообщений о наличие присутствия признаков
дефекта «стук», чем самих звуков данного дефекта в сигнале. Это обусловлено
тем, что программа сверяет последовательно отрезки сигнала по 0,2сек., что не
предусматривает того, что сигнал дефекта может быть длиннее этого отрезка и находиться
одновременно в нескольких таких рядом стоящих отрезках. В последующей
модернизации сигнала необходимо учесть данный факт. Однако проанализировав
данный сигнал на слух с помощью Adobe Auditio 3
убеждаемся, что все сообщения, выданные программой DiagSound соответствуют действительности.
Загрузим wave-файл «tre.wav» с набором сигналов дефекта «Треск». Построим его
график. График представлен на рис. 5
Рис.5 График сигнала из wave-файла
«tre.wav»
Как видно из графике, сигнал не имеет больших пиков, как в случае с
«Стук.wav», что говорит о низкой амплитуде
сигналов дефектов. Проведем диагностик данного сигнала. Результат диагностики
сигнала представлен на рис. 6. Время диагностики 3мин. 17сек.
Рис. 6 Результат диагностики сигнала «tre.wav»
Как видно из рисунка 6 сообщений так же как и в первом случае выдано
больше, чем ожидалось и процент схожести ниже. При анализе на слух данного
сигнала с помощью Adobe Audition обнаруживаем наличие в сигнале
постороннего шума (шорканье ногтей по корпусу гитары, скрип струн, щелчки,
возникшие из-за несовершенства АЦП и др.). Данная программа не учитывает
погрешности вносимые внешним воздействием, что говорит о несовершенстве данной
программы. При последующей модернизации программы необходимо будет учесть
данный факт и добавить модуль по выявлению и очищению сигнала от постороннего
шума.
Так же необходимо отметить ресурсоемкость данной программы. На рис. 7
видно, что программа из-за больших объемов данных занимает около 144мб
оперативной памяти, что не приемлемо для практического применения. Так же
видно, что большая часть времени тратиться на работу с банком дефектов
реализованного в Excel-таблице. При
модернизации программы необходимо создать подходящую базу данных,
обеспечивающую более быструю работу с данными.
Рис. 7 Ресурсоемкость программы DiagSound
ЗАКЛЮЧЕНИЕ
В данной курсовой работе была создана автоматизированная система
диагностирование дефектов конструкций электронных устройств и был составлен
банк дефектов, реализованный в Excel-таблице,
содержащий информацию о двух видов дефектов. Данная система демонстрирует
работу модуля анализа Diag
со звуковыми сигналами, работу с банком дефектов и алгоритм сравнения
полученных данных с помощью модуля Diag. Таким образом были решены поставленные для курсовой работу задачи.
Система не пригодна к практическому применению из-за следующих недостатков:
· Большие вычислительные затраты
· Отсутствия полноценной базы данных
· Отсутствие возможности записи сигнала
· Отсутствие модуля для выявления постороннего шума
· Низкая производительность
· Существенная погрешность
Для практического применения автоматизированную систему необходимо
модернизировать и исключить перечисленные недостатки. А так же следует
оптимизировать код для быстродействия достаточного для диагностики звукового
сигнала в реальном времени.
алгоритм
диагностика дефект акустический сигнал
СПИСОК ЛИТЕРАТУРЫ
1. В. В.
Клюева «Неразрушающий контроль: Справочник в 7 томах» М.: Машиностроение,
2005.-829с
2. Справочник
по технической акустике: Пер. с ием./ Под ред. Хекла и Х. А. Мюллера. - Л.:
Судостроение, 1980.-440с., ил. 329.-ИСБН.
. Борис
Васильевич Павлов «Акустическая диагностика механизмов» Изд. «Машиностроение»
Москва 1971г.
. Увайсов
Расул Исаевич «МЕТОД ДИАГНОСТИКИ ДЕФЕКТОВ БОРТОВЫХ РАДИОТЕХНИЧЕСКИХ УСТРОЙСТВ»,
Автореферат диссертации, Москва 2008г.
. Кинтцель Т. «Программирование звука на ПК=A Programmer`s Guide to
Sound»:Пер. С англ.-М.:ДМК Пресс, 2005.-432с.,
ил.
ПРИЛОЖЕНИЕ
1. Модули MatLab
1.1. Листинг модуля Diag.m
function res=Diag(Name)
[y,fs]=wavread(Name);=myVAD(y);=mfccf(13,speechIn,fs);
1.2. Листинг myVAD.m
trimmedX = myVAD(x)
% Syntax: trimmedSample = myVAD(samplex);
% This function accepts an audio sample 'samplex' as input
and returns a
% trimmed down version with non-speech sections trimmed off.
Also known as
% voice activity detection, it utilises the algorithm due to
Rabiner &
% Sambur (1975)
= 0.1; % Initial silence duration in seconds= 0.01; % Frame
width in seconds= 0.005; % Frame shift in seconds= 16000; % Sampling Frequency=
0;= 0;= 0;= 0;= 0; % Stores forward count of crossing rate > IZCT= 0; % As
above, for backward count= 40; % Zero crossing comparison rate for
threshold_sam = fix(Ts*Fs); % No of Samples/window_sam = fix(Tsh*Fs); % No of
samples/overlap= length(x);= fix((lengthX-w_sam)/o_sam)+1; % Number of segments
in speech signal= fix((Ini-Ts)/Tsh)+1; % Number of segments in silent period=
hamming(w_sam);= o_sam*(segs-1)+1; % Start index of last segment
= 1:o_sam:Limit; % Vector containing starting index for each
segment_Vector = zeros(1,segs); % Vector to hold zero crossing rate for all
segments
% Below code computes and returns zero crossing rates for all
segments in
% speech samplet = 1:segs= 0;= (t-1)*o_sam+1;r =
nextIndex+1:(nextIndex+w_sam-1)(x(r) >= 0) && (x(r-1) >= 0)
(x(r) >= 0) && (x(r-1) < 0)= ZCRCounter +
1;(x(r) < 0) && (x(r-1) < 0)(x(r) < 0) && (x(r-1)
>= 0)= ZCRCounter + 1;_Vector(t) = ZCRCounter;
% Below code computes and returns frame energy for all
segments in speech
% sample_Vector = zeros(1,segs);u = 1:segs= (u-1)*o_sam+1;=
x(nextIndex:nextIndex+w_sam-1).*win;_Vector(u) = sum(abs(Energy));
= mean(Erg_Vector(1:sil)); % Mean silence energy (noise
energy)= max(Erg_Vector); % Maximum energy for entire utterance= 0.03 *
(IMX-IMN) + IMN; % I1 & I2 are Initial thresholds= 4 * IMN;= min(I1,I2); %
Lower energy threshold= 5 * ITL; % Upper energy threshold=
mean(ZCR_Vector(1:sil)); % mean zero crossing rate for silence region=
std(ZCR_Vector(1:sil)); % standard deviation of crossing rate for
% silence region= min(ZTh,IZC+2*stdev); % Zero crossing rate
threshold= zeros(1,lengthX); % Four single-row vectors are created= indexi; %
in these lines to facilitate computation below= indexi;= indexi;
% Search forward for frame with energy greater than ITUi =
1:length(Erg_Vector)(Erg_Vector(i) > ITU)= counter1 + 1;(counter1) = i;=
indexi(1);
% Search further forward for frame with energy greater than
ITLj = ITUs:-1:1(Erg_Vector(j) < ITL)= counter2 + 1;(counter2) = j;=
indexj(1)+1;
_Vectorf = fliplr(Erg_Vector);% Flips round the energy vector
% Search forward for frame with energy greater than ITU
% This is equivalent to searching backward from last sample
for energy > ITUk = 1:length(Erg_Vectorf)(Erg_Vectorf(k) > ITU)= counter3
+ 1;(counter3) = k;= indexk(1);
% Search further forward for frame with energy greater than
ITLl = ITUf:-1:1(Erg_Vectorf(l) < ITL)= counter4 + 1;(counter4) = l;
= length(Erg_Vector)-indexl(1)+1;% Tentative finish index
% Search back from start index for crossing rates higher than
IZCT
= min(start,25);m = start:-1:start-BackSearch+1=
ZCR_Vector(m);rate > IZCT= ZCRCountb + 1;= m;ZCRCountb > 3= realstart; %
If IZCT is exceeded in more than 3 frames
% set start to last index where IZCT is exceeded
% Search forward from finish index for crossing rates higher
than IZCT= min(length(Erg_Vector)-finish,25);n = finish+1:finish+FwdSearch=
ZCR_Vector(n);rate > IZCT= ZCRCountf + 1;= n;ZCRCountf > 3= realfinish; %
If IZCT is exceeded in more than 3 frames
% set finish to last index where IZCT is exceeded
_start = FrmIndex(start); % actual sample index for frame
'start'_finish = FrmIndex(finish-1); % actual sample index for frame 'finish'=
x(x_start:x_finish); %T rim speech sample by start and finish indices
1.3. Листинг mfsscf.m
FMatrix=mfccf(num,s,Fs)
% Syntax: M=mfccf(num,s, Fs);
% Computes and returns the mfcc coefficients for a speech
signal s
% where num is the required number of MFCC coefficients. It
utilises the
=512; % Number of FFT points=0.025; % Frame duration in
seconds=floor(Fs*Tf); % Number of samples per frame=24; % Number of mel
filters=length(s); % total number of samples in speech=0.01; % Frame step in
seconds=Fs*Ts; % Frame step in samples=1;=[1, -0.97]; % a and b are high pass
filter coefficients=floor(l/FrameStep); % Maximum no of frames in speech
sample=zeros(noFrames-2, num); % Matrix to hold cepstral coefficients=1:num; %
Lifter vector index=1+floor((num)/2)*(sin(lifter*pi/num));% raised sine lifter
version
mean(abs(s)) > 0.01=s/max(s); % Normalises to compensate
for mic vol differences
% Segment the signal into overlapping frames and compute MFCC
coefficientsi=1:noFrames-2=s((i-1)*FrameStep+1:(i-1)*FrameStep+N); % Holds
individual frames=sum(frame.^2); % Frame energy=max(Ce1,2e-22); % floors to 2 X
10 raised to power -22=log(Ce2);=filter(b,a,frame); % High pass pre-emphasis
filter=framef.*hamming(N); % multiplies each frame with hamming
window=fft(F,N); % computes the fft=melbankm(fn,n,Fs); % creates 24 filter, mel
filter bank=1+floor(n/2);=log10(melf*abs(FFTo(1:halfn)).^2);% result is
mel-scale filtered=max(spectr1(:),1e-22);=dct(spectr); % obtains DCT, changes to
cepstral domain(1)=Ce; % replaces first coefficient=c(1:num); % retains first
num coefficients=coeffs.*lifter'; % Multiplies coefficients by lifter value(i,
:)=ncoeffs'; % assigns mfcc coeffs to succesive rows i
% Call the deltacoeff function to compute derivatives of MFCC
% coefficients;
add all together to yield a matrix with 3*num
columns=(deltacoeff(FMatrix)).*0.6; % Computes delta-mfcc=(deltacoeff(d)).*0.4;
% as above for delta-delta-mfcc=[FMatrix,d,d1]; % concatenates all together
1.4. Листинг
melbankm.m
[x,mn,mx]=melbankm(p,n,fs,fl,fh,w)
% MELBANKM
determine matrix for a mel-spaced filterbank [X,MN,MX]=(P,N,FS,FL,FH,W)
%
% Inputs: p number
of filters in filterbank
% n length of fft
% fs sample rate
in Hz
% fl low end of
the lowest filter as a fraction of fs (default = 0)
% fh high end of
highest filter as a fraction of fs (default = 0.5)
% w any sensible
combination of the following:
% 't' triangular
shaped filters in mel domain (default)
% 'n' hanning
shaped filters in mel domain
% 'm' hamming
shaped filters in mel domain
%
% 'z' highest and
lowest filters taper down to zero (default)
% 'y' lowest
filter remains at 1 down to 0 frequency and
% highest filter
remains at 1 up to nyquist freqency
%
% If 'ty' or 'ny'
is specified, the total power in the fft is preserved.
%
% Outputs: x a
sparse matrix containing the filterbank amplitudes
% If x is the only
output argument then size(x)=[p,1+floor(n/2)]
% otherwise
size(x)=[p,mx-mn+1]
% mn the lowest
fft bin with a non-zero coefficient
% mx the highest
fft bin with a non-zero coefficient
%
% Usage: f=fft(s);
f=fft(s);
%
x=melbankm(p,n,fs); [x,na,nb]=melbankm(p,n,fs);
% n2=1+floor(n/2);
z=log(x*(f(na:nb)).*conj(f(na:nb)));
%
z=log(x*abs(f(1:n2)).^2);
% c=dct(z);
c(1)=[];
%
% To plot filterbanks
e.g. plot(melbankm(20,256,8000)')
%
% % Version: $Id:
melbankm.m,v 1.3 2005/02/21 15:22:13 dmb Exp $
%
% VOICEBOX is a
MATLAB toolbox for speech processing.
% Home page:
http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html
%nargin <
6='tz';nargin < 5=0.5;nargin <
4=0;=700/fs;=floor(n/2);=log((f0+fh)/(f0+fl))/(p+1);
% convert to fft
bin numbers with 0 for DC term=n*((f0+fl)*exp([0 1 p
p+1]*lr)-f0);=ceil(bl(2));=floor(bl(3));any(w=='y')=log((f0+(b2:b3)/n)/(f0+fl))/lr;=floor(pf);=[ones(1,b2)
fp fp+1 p*ones(1,fn2-b3)];=[1:b3+1 b2+1:fn2+1];=2*[0.5 ones(1,b2-1) 1-pf+fp
pf-fp ones(1,fn2-b3-1)
0.5];=1;=fn2+1;=floor(bl(1))+1;=min(fn2,ceil(bl(4)))-1;=log((f0+(b1:b4)/n)/(f0+fl))/lr;=floor(pf);=pf-fp;=b2-b1+1;=b3-b1+1;=b4-b1+1;=[fp(k2:k4)
1+fp(1:k3)];=[k2:k4 1:k3];=2*[1-pm(k2:k4)
pm(1:k3)];=b1+1;=b4+1;any(w=='n')=1-cos(v*pi/2);any(w=='m')=1-0.92/1.08*cos(v*pi/2);nargout
> 1=sparse(r,c,v);=sparse(r,c+mn-1,v,p,1+fn2);
1.5. Листинг
Deltacoeff.m
diff =
deltacoeff(x)
%Author: Olutope
Foluso Omogbenigun
%Email:
olutopeomogbenigun at hotmail.com
%University:
London Metropolitan University
%Date: 12/07/07
%Syntax: diff =
deltacoeff(Matrix);
%Calculates the
time derivative of the MFCC
%coefficients
matrix x and returns the result as a new matrix.
[nr,nc] = size(x);
= 3; %Number of
frame span(backward and forward span equal)= K:-1:-K; %Vector of filter
coefficients
%pads cepstral
coefficients matrix by repeating first and last rows K times=
[repmat(x(1,:),K,1);x;repmat(x(end,:),K,1)];
= filter(b, 1, px,
[], 1); % filter data vector along each column= diff/sum(b.^2); %Divide by sum
of square of all span values
% Trim off upper
and lower K rows to make input and output matrix equal= diff(K + [1:nr],:);
2.
Код программы DiagSound на языке C#
2.1. Листинг файла Form1.cs
using
System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;MathWorks.MATLAB.NET.Utility;MathWorks.MATLAB.NET.Arrays;MatLab;
DiagSound
{partial class Form1 : Form
{FileName;obj = new Class1();//MatLabMW ;res =
0;.Office.Interop.Excel.Application ObjExcel = new
Microsoft.Office.Interop.Excel.Application();.Office.Interop.Excel.Sheets
ObjSheet;.Office.Interop.Excel.Worksheet
ObjWorkSheet;.Office.Interop.Excel.Workbook ObjWorkBook;int srav(double Vect,
double Norma, double dx)
{res = 0;(Math.Abs(Vect - Norma) <= dx)++;res;
}
int readMat(Microsoft.Office.Interop.Excel.Range Norma,
double Vect, int i, int j)
{.Office.Interop.Excel.Range N;.Office.Interop.Excel.Range
D;= Norma.get_Offset(i, j);= Norma.get_Offset(i + 18,
j);(Math.Abs(Convert.ToDouble(N.Value2.ToString()) - Vect)
}
Form1()
{();
}
void выходToolStripMenuItem_Click(object
sender, EventArgs e)
{();
}
void button1_Click(object sender, EventArgs e)
{.Graf(FileName);
}
void wavфаToolStripMenuItem_Click(object
sender, EventArgs e)
{(openFileDialog1.ShowDialog() ==
System.Windows.Forms.DialogResult.OK
&&.FileName.Length > 0)= openFileDialog1.FileName;MessageBox.Show("Error");=
(MWNumericArray)obj.Diag(FileName);.Items.Add("=================");.Items.Add("Wave-файл:");.Items.Add(openFileDialog1.FileName);.Items.Add("загружен!");.Enabled =
true;(openFileDialog2.FileName.Length > 0) button2.Enabled = true;
}
void DataToolStripMenuItem_Click(object sender, EventArgs e)
{(openFileDialog2.ShowDialog() ==
System.Windows.Forms.DialogResult.OK
&&.FileName.Length > 0)
{.Items.Add("=================");.Items.Add("База дефектов:");.Items.Add(openFileDialog2.FileName);.Items.Add("загружена!");(openFileDialog1.FileName.Length
> 0) button2.Enabled = true;
}
}void оПрограммеToolStripMenuItem_Click(object
sender, EventArgs e)
{.Show("Программа разработана для курсовой работе\n по теме
\"Автоматизированная система диагностики дефектов\nв конструкции
электронных устройств\nс помощью акустических сигналов\"\nАвтор программы
студент 3-го курса\nСургутского государственного университета \nВолков
Александр\nкафедра АСОиУ\n2012г.","О программе");
}
void button2_Click(object sender, EventArgs e)
{=
ObjExcel.Workbooks.Open(@openFileDialog2.FileName,.Missing, Type.Missing,
Type.Missing, Type.Missing,.Missing, Type.Missing, Type.Missing,
Type.Missing,.Missing, Type.Missing, Type.Missing, Type.Missing,.Missing,
Type.Missing);= ObjWorkBook.Sheets;.Items.Add("=================");.Items.Add("Начала диагностики");(int sample = 0; sample < (MW.NumberOfElements / 39) - 16;
sample=sample+17)
{= 0;=
(Microsoft.Office.Interop.Excel.Worksheet)ObjSheet.get_Item(1);.Office.Interop.Excel.Range
ObjRanges;= ObjWorkSheet.get_Range("B2", Type.Missing);
// if (readMat(ObjRanges, (double)MW[ 1 + sample, 1], 0, 0)
> 0)(int i = 0; i < 17; i++)
{(int j = 0; j < 39; j++)= res + readMat(ObjRanges,
(double)MW[i + 1 + sample, j + 1], i, j);
}(res / 6.63 > 85)
{.Items.Add("Стук " + Math.Round(res / 6.63, 2) + "% [" +
(sample / 17) * 0.2 + " ; " + Math.Round((sample / 17) * 0.2 + 0.2,
2) + "] сек");
//sample = sample + 17;
}
{= 0;=
(Microsoft.Office.Interop.Excel.Worksheet)ObjSheet.get_Item(2);=
ObjWorkSheet.get_Range("B2", Type.Missing);
// if (readMat(ObjRanges, (double)MW[1 + sample, 1], 0, 0)
> 0)(int i = 0; i < 17; i++)
{(int j = 0; j < 39; j++)= res + readMat(ObjRanges,
(double)MW[i + 1 + sample, j + 1], i, j);
}(res / 6.63 > 85)
{.Items.Add("Треск " + Math.Round(res / 6.63, 2) + "% [" +
Math.Round((sample / 17) * 0.2, 2) + " ; " + Math.Round((sample / 17)
* 0.2 + 0.2, 2) + "] сек");
//sample = sample + 17;
}
}
}.Items.Add("Диагностика завершина");.Quit();
}
void добавитьToolStripMenuItem_Click(object
sender, EventArgs e)
{.Show("Для диагностики сигнала необходимо сначала\nзагрузить Базу
Дефектов и wave-файл содержащий\nсигнал, который нужно продиагностировать,
после\nчего нажать кнопку Диагностика. После этого\nпрограмма начнет
диагностировать сигнал и\nв случае обнаружения признаков дефекта\nвыводить в
список наименование\nдефекта, процент схожести и отрезок времени\nна котором он
обнаружил (в секундах)","Help");
}
}
}