Автоматизированная система диагностики дефектов в конструкциях электронных средств на основе акустических сигналов

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

?ЮЧЕНИЕ

 

В данной курсовой работе была создана автоматизированная система диагностирование дефектов конструкций электронных устройств и был составлен банк дефектов, реализованный в 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;_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

% function melbankm from the toolbox Voicebox by Mike Brooks

=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