Автоматизированная система диагностики дефектов в конструкциях электронных средств на основе акустических сигналов
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
?ЮЧЕНИЕ
В данной курсовой работе была создана автоматизированная система диагностирование дефектов конструкций электронных устройств и был составлен банк дефектов, реализованный в 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