P
prajesh
Guest
привіт, я працюю на автомобілі контролю з використанням системи розпізнавання мовлення, але в мене проблема з екстрактом на 214 рядок.
Будь ласка, допоможіть мені вирішити цю проблему.
Ось мій код.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Функція test_project
КМО;
закрити всі;
очистити всі;
= 0;
Data1 = [0 0 0 0]; data2 = [0 0 0 0]; data3 = [0 0 0 0]; data4 = [0 0 0 0]; даних = [0 0 0 0]; val1 = [0 0 0 0];
для я = 1:100
для я = 1:10
FS = 22050;
У1 = wavrecord (ПС, ПС, 1);
wavwrite (Y1, ПС, 16, 'C: \ MATLAB7 \ Work \ user.wav');
= Wavread ('C: \ MATLAB7 \ Work \ user.wav');
wavplay (а, фс);
п = вхід ('Enter 0');
(П == 0)
перерва;
ще
DISP ("Записати ваш голос заново ');
кінець
кінець
FileName = 'C: \ MATLAB7 \ Нові роботи Folder11L.wav'% \ Розрахунок кодів вектора.
білий гриб = вчитися ('C: \ MATLAB7 \ роботи \ New Folder11L.wav');
кодів = vqlbg (КЕП,
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Прохолодно" border="0" />
;
Результат (1) = визначити (назва файлу, кодів);
білий гриб = вчитися ('O.wav');
кодів = vqlbg (КЕП,
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Прохолодно" border="0" />
;
Результат (2) = визначити (назва файлу, кодів);
білий гриб = вчитися ('U.wav');
кодів = vqlbg (КЕП,
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Прохолодно" border="0" />
;
результат (3) = визначити (назва файлу, кодів);
білий гриб = вчитися ('V.wav');
кодів = vqlbg (КЕП,
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Прохолодно" border="0" />
;
результат (4) = визначити (назва файлу, кодів);
% Перевірка файлу.
якщо ((результат (1) <результат (2)) і (результат (1) <результат (3)) і (результат (1) <результат (4)))
'L'
кінець
якщо ((результат (2) <результат (1)) і (результат (2) <результат (3)) і (результат (2) <результат (4)))
'O'
кінець
якщо ((результат (3) <результат (2)) і (результат (3) <результат (1)) і (результат (3) <результат (4)))
'U'
кінець
якщо ((результат (4) <результат (2)) і (результат (4) <результат (1)) і (результат (4) <результат (3)))
'V'
кінець
% Для перевірки виводу і дані до паралельного порту
Select = вводу ('Введіть 0 для TRUE Output');
якщо (Виберіть == 0)
, Якщо (== 'L' ANS)
даних = [~ val1
, 1) val1
, 2) val1
, 3) val1
, 4)];
кінець
якщо (== 'O' ANS)
даних = [val1
, 1) ~ val1
, 2) val1
, 3) val1
, 4)];
кінець
якщо (== 'U' ANS)
даних = [val1
, 1) val1
, 2) ~ val1
, 3) val1
, 4)];
кінець
якщо (== 'V' ANS)
даних = [val1
, 1) val1
, 2) val1
, 3) ~ val1
, 4)];
кінець
Dio = digitalio ("паралельні", 'TPI1');
AddLine (DIO, 0:3, 'з');
putvalue (dio.Line (1:4), дані);
val1 = GetValue (DIO)
кінець
Закрити вхід = ('Введіть 5 для виходу');
якщо (Закрити == 5)
перерви;
кінець
кінець
% ---------- MARS MARS MARS MARS MARS ----------
%%%%% ВИЗНАЧЕННЯ FILE %%%%%
Функція відстань = визначити (файл, кодів)
[Filedata, FS] = wavread ('C: \ MATLAB7 \ роботи \ New Folder \ user.wav');
усіченої = екстракту (filedata);
білий гриб = MFCC (усічений);
D = disteu (білий гриб, кодів);
відстань = сума (хв (р, [], 2)) / розмір (д, 1);
% ---------- MARS MARS MARS MARS MARS ----------
%%%%% Ліндо, BUZO, GOLD %%%%% векторне квантування
функції центру тяжкості = vqlbg (кепстра, M)
ВПЕРШЕ% MATCHING
КРОК 1% - ініціалізація
центр ваги = Медель (кепстра);
центр ваги = тяжкості;
кепстра = кепстра;
Епсілон = 0,01;
% M = 8;% розмір кодів
м = 1;
а (м <М)
КРОК 2% --- ВІДДІЛ
temp_cent = тяжкості;
/ = 1;
для я = 1: м
центр ваги
, у) = temp_cent
, я) * (1 Епсілон);
J = J 1;
центр ваги
, у) temp_cent =
, I) * (1 - Епсілон);
J = J 1;
кінець
м = 2 * м;
test_var = 0;
D_prim = 99999999;% Init D_prim в достатній велике значення.
а (test_var == 0)
КРОК 3% --- РОЗПОДІЛ
відстань = disteu (кепстра, центр ваги);
[Магії, прим] = хв (відстань, [], 2);
Генпідрядна 4% --- UPDATED = сума (сума (відстань));
якщо (((D_prim - D) / D) <Епсілон)
test_var = 1;
ще
D_prim = D;
кінець
кінець
кінець
% ---------- MARS MARS MARS MARS MARS ----------
%%%%% ВИЯВЛЕННЯ EUCILIDIAN ВІДСТАНЬ %%%%%
Функція D = disteu (х, у)
[M, N] = розмір (х);
[M2, P] = розмір (у);
якщо (M ~ = M2)
помилка ('Матриця розміри не співпадають.')
кінець
D = нулі (N, P)
якщо (N <P)
копії = нулі (1, P);
при п = 1: N
(П,
<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Посмішка" border="0" />
= Сума ((х
, п копії) - у). ^ 2, 1);
кінець
ще
копії = нулі (1, N);
для р = 1
<img src="http://www.edaboard.com/images/smiles/icon_razz.gif" alt="Дражнити" border="0" />D
, р) = сума ((х - у
, р копій)). ^ 2, 1);
кінець
кінець
D = d ^ 0,5;
% ---------- MARS MARS MARS MARS MARS ----------%%%%% НАВЧАННЯ І MFCC %%%%%
Функція білими = вчитися (файл)
[Filedata, FS] = wavread ('C: \ MATLAB7 \ Work \ user.wav');
зрізаних = екстракт (filedata);
білий гриб = MFCC (усічений);
% ---------- MARS MARS MARS MARS MARS ----------%%%%% Витяги ОСОБЛИВОСТІ %%%%%
Функція sampledata = екстракт (Xin, довжина)
довжина = 16;
середнє значення = 0;
при р = 1:1000
середня = означає (ABS (Xin (я)) / 100);
кінець
Поріг = означає * 2;
для первий_індекс = 1: розмір (Xin)
якщо (ABS (синь (первий_індекс))> поріг)
перерви;
кінець
кінець
для end_index = 1: розмір (Xin)
Темп = розмір (Xin) - end_index;
якщо (ABS (Xin (температура ( 1)))> поріг)
перерви;
кінець
кінець
sampledata = Сінь (первий_індекс: (розмір (Xin) - end_index));
% ---------- MARS MARS MARS MARS MARS ----------
%%%%% Медель %%%%%
функція т = Медель (V);
[Nr_of_rows, nr_of_columns] = розмір (V);
для я = 1: nr_of_columns
м (я) = сума (V (1: nr_of_rows, я)) / nr_of_rows;
кінець
% ---------- MARS MARS MARS MARS MARS ----------%%%%% ВИЗНАЧЕННЯ MEL розташованих БАНК %%%%% ЧАСТОТИ
функцію т = melfb (р N, фс)
р = 20;% кількість фільтрів в Filterbank
п = 256;% довжини БПФ
FS = 22050;
F0 = 700 / Ф;
fn2 = поверсі (п / 2);
LR = журналу ( 1 0.5/f0) / (р 1);
% Конвертувати в БПФ бен чисел з 0 для постійного терміну
BL = N * (F0 * (ехр ([0 1 р р 1] * / г) - 1));
b1 = поверх (BL (1)) 1;
Ь2 = стелею (Ь (2));
b3 = поверсі (BL (3));
b4 = тт (fn2, стелею (BL (4))) - 1;
р = журналу (1 (b1: b4) / n/f0) / / г;
р = поверх (р);
м. = р - р;
р = [р (b2: b4) 1 р (1: b3)];
С = [b2: b4 1: b3] 1;
V = 2 * [1-годин (b2: b4) м. (1: b3)];
м = рідкі (R, C, V, р, 1 fn2);
% ---------- MARS MARS MARS MARS MARS ----------%%%%%- Кепстра %%%%% MEL
Функція кепстра = MFCC (х)
% FRAME БЛОКУВАННЯ
/ = 1;
я = 1;
[S1, S2] = розмір (х);
% Х (1: 256)
а ((J 256) <= S1)
для (А = 1: 256)
x_new (я, к) = X (К J-1);
кінець
я = я 1;
J = J 256;
кінець
% Вікон
/ = 1;
я = 1;
[S1, S2] = розмір (х);
W = кривляється (256);
а ((J 256) <= S1)
для (А = 1: 256)
x_new (я, Ь) = x_new (I, K) * ш (к);
кінець
I = I 1;
J = J 256;
кінець
Швидке перетворення Фур'є% TRANSFORM
/ = 1;
я = 1;
а ((J 256) <= S1)
x_new_freq (я, 1:256) = FFT (x_new (я, 1:256));
I = I 1;
J = J 256;
кінець
MEL% ПЕРІОДИЧНІСТЬ УПАКОВЦІ
nr_of_filters = 20;
м = melfb (nr_of_filters, 256, 11000);
П2 = 1 поверх (256 / 2);
я = 1;
/ = 1;
а ((J 256) <= S1)
для (А = 1: nr_of_filters)
z_prim = (м * (ABS (x_new_freq (I, 1: N 2)). ^ 2)');%'
г (я, Ь) = z_prim (к);
кінець
J = J 256;
I = I 1;
кінець
я = 1;
/ = 1;
а ((J 256) <= S1)
cepstrum_prim = DCT (г (я, 1: nr_of_filters));
для (А = 1: nr_of_filters)
кепстра (я, Ь) = cepstrum_prim (к);
кінець
J = J 256;
I = I 1;
кінець
дозвіл = я-1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%якщо і є інший код MATLAB, то і відправити її мені.
Будь ласка, допоможіть мені вирішити цю проблему.
Ось мій код.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Функція test_project
КМО;
закрити всі;
очистити всі;
= 0;
Data1 = [0 0 0 0]; data2 = [0 0 0 0]; data3 = [0 0 0 0]; data4 = [0 0 0 0]; даних = [0 0 0 0]; val1 = [0 0 0 0];
для я = 1:100
для я = 1:10
FS = 22050;
У1 = wavrecord (ПС, ПС, 1);
wavwrite (Y1, ПС, 16, 'C: \ MATLAB7 \ Work \ user.wav');
= Wavread ('C: \ MATLAB7 \ Work \ user.wav');
wavplay (а, фс);
п = вхід ('Enter 0');
(П == 0)
перерва;
ще
DISP ("Записати ваш голос заново ');
кінець
кінець
FileName = 'C: \ MATLAB7 \ Нові роботи Folder11L.wav'% \ Розрахунок кодів вектора.
білий гриб = вчитися ('C: \ MATLAB7 \ роботи \ New Folder11L.wav');
кодів = vqlbg (КЕП,
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Прохолодно" border="0" />
;
Результат (1) = визначити (назва файлу, кодів);
білий гриб = вчитися ('O.wav');
кодів = vqlbg (КЕП,
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Прохолодно" border="0" />
;
Результат (2) = визначити (назва файлу, кодів);
білий гриб = вчитися ('U.wav');
кодів = vqlbg (КЕП,
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Прохолодно" border="0" />
;
результат (3) = визначити (назва файлу, кодів);
білий гриб = вчитися ('V.wav');
кодів = vqlbg (КЕП,
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Прохолодно" border="0" />
;
результат (4) = визначити (назва файлу, кодів);
% Перевірка файлу.
якщо ((результат (1) <результат (2)) і (результат (1) <результат (3)) і (результат (1) <результат (4)))
'L'
кінець
якщо ((результат (2) <результат (1)) і (результат (2) <результат (3)) і (результат (2) <результат (4)))
'O'
кінець
якщо ((результат (3) <результат (2)) і (результат (3) <результат (1)) і (результат (3) <результат (4)))
'U'
кінець
якщо ((результат (4) <результат (2)) і (результат (4) <результат (1)) і (результат (4) <результат (3)))
'V'
кінець
% Для перевірки виводу і дані до паралельного порту
Select = вводу ('Введіть 0 для TRUE Output');
якщо (Виберіть == 0)
, Якщо (== 'L' ANS)
даних = [~ val1
кінець
якщо (== 'O' ANS)
даних = [val1
кінець
якщо (== 'U' ANS)
даних = [val1
кінець
якщо (== 'V' ANS)
даних = [val1
кінець
Dio = digitalio ("паралельні", 'TPI1');
AddLine (DIO, 0:3, 'з');
putvalue (dio.Line (1:4), дані);
val1 = GetValue (DIO)
кінець
Закрити вхід = ('Введіть 5 для виходу');
якщо (Закрити == 5)
перерви;
кінець
кінець
% ---------- MARS MARS MARS MARS MARS ----------
%%%%% ВИЗНАЧЕННЯ FILE %%%%%
Функція відстань = визначити (файл, кодів)
[Filedata, FS] = wavread ('C: \ MATLAB7 \ роботи \ New Folder \ user.wav');
усіченої = екстракту (filedata);
білий гриб = MFCC (усічений);
D = disteu (білий гриб, кодів);
відстань = сума (хв (р, [], 2)) / розмір (д, 1);
% ---------- MARS MARS MARS MARS MARS ----------
%%%%% Ліндо, BUZO, GOLD %%%%% векторне квантування
функції центру тяжкості = vqlbg (кепстра, M)
ВПЕРШЕ% MATCHING
КРОК 1% - ініціалізація
центр ваги = Медель (кепстра);
центр ваги = тяжкості;
кепстра = кепстра;
Епсілон = 0,01;
% M = 8;% розмір кодів
м = 1;
а (м <М)
КРОК 2% --- ВІДДІЛ
temp_cent = тяжкості;
/ = 1;
для я = 1: м
центр ваги
J = J 1;
центр ваги
J = J 1;
кінець
м = 2 * м;
test_var = 0;
D_prim = 99999999;% Init D_prim в достатній велике значення.
а (test_var == 0)
КРОК 3% --- РОЗПОДІЛ
відстань = disteu (кепстра, центр ваги);
[Магії, прим] = хв (відстань, [], 2);
Генпідрядна 4% --- UPDATED = сума (сума (відстань));
якщо (((D_prim - D) / D) <Епсілон)
test_var = 1;
ще
D_prim = D;
кінець
кінець
кінець
% ---------- MARS MARS MARS MARS MARS ----------
%%%%% ВИЯВЛЕННЯ EUCILIDIAN ВІДСТАНЬ %%%%%
Функція D = disteu (х, у)
[M, N] = розмір (х);
[M2, P] = розмір (у);
якщо (M ~ = M2)
помилка ('Матриця розміри не співпадають.')
кінець
D = нулі (N, P)
якщо (N <P)
копії = нулі (1, P);
при п = 1: N
(П,
<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Посмішка" border="0" />
= Сума ((х
кінець
ще
копії = нулі (1, N);
для р = 1
<img src="http://www.edaboard.com/images/smiles/icon_razz.gif" alt="Дражнити" border="0" />D
кінець
кінець
D = d ^ 0,5;
% ---------- MARS MARS MARS MARS MARS ----------%%%%% НАВЧАННЯ І MFCC %%%%%
Функція білими = вчитися (файл)
[Filedata, FS] = wavread ('C: \ MATLAB7 \ Work \ user.wav');
зрізаних = екстракт (filedata);
білий гриб = MFCC (усічений);
% ---------- MARS MARS MARS MARS MARS ----------%%%%% Витяги ОСОБЛИВОСТІ %%%%%
Функція sampledata = екстракт (Xin, довжина)
довжина = 16;
середнє значення = 0;
при р = 1:1000
середня = означає (ABS (Xin (я)) / 100);
кінець
Поріг = означає * 2;
для первий_індекс = 1: розмір (Xin)
якщо (ABS (синь (первий_індекс))> поріг)
перерви;
кінець
кінець
для end_index = 1: розмір (Xin)
Темп = розмір (Xin) - end_index;
якщо (ABS (Xin (температура ( 1)))> поріг)
перерви;
кінець
кінець
sampledata = Сінь (первий_індекс: (розмір (Xin) - end_index));
% ---------- MARS MARS MARS MARS MARS ----------
%%%%% Медель %%%%%
функція т = Медель (V);
[Nr_of_rows, nr_of_columns] = розмір (V);
для я = 1: nr_of_columns
м (я) = сума (V (1: nr_of_rows, я)) / nr_of_rows;
кінець
% ---------- MARS MARS MARS MARS MARS ----------%%%%% ВИЗНАЧЕННЯ MEL розташованих БАНК %%%%% ЧАСТОТИ
функцію т = melfb (р N, фс)
р = 20;% кількість фільтрів в Filterbank
п = 256;% довжини БПФ
FS = 22050;
F0 = 700 / Ф;
fn2 = поверсі (п / 2);
LR = журналу ( 1 0.5/f0) / (р 1);
% Конвертувати в БПФ бен чисел з 0 для постійного терміну
BL = N * (F0 * (ехр ([0 1 р р 1] * / г) - 1));
b1 = поверх (BL (1)) 1;
Ь2 = стелею (Ь (2));
b3 = поверсі (BL (3));
b4 = тт (fn2, стелею (BL (4))) - 1;
р = журналу (1 (b1: b4) / n/f0) / / г;
р = поверх (р);
м. = р - р;
р = [р (b2: b4) 1 р (1: b3)];
С = [b2: b4 1: b3] 1;
V = 2 * [1-годин (b2: b4) м. (1: b3)];
м = рідкі (R, C, V, р, 1 fn2);
% ---------- MARS MARS MARS MARS MARS ----------%%%%%- Кепстра %%%%% MEL
Функція кепстра = MFCC (х)
% FRAME БЛОКУВАННЯ
/ = 1;
я = 1;
[S1, S2] = розмір (х);
% Х (1: 256)
а ((J 256) <= S1)
для (А = 1: 256)
x_new (я, к) = X (К J-1);
кінець
я = я 1;
J = J 256;
кінець
% Вікон
/ = 1;
я = 1;
[S1, S2] = розмір (х);
W = кривляється (256);
а ((J 256) <= S1)
для (А = 1: 256)
x_new (я, Ь) = x_new (I, K) * ш (к);
кінець
I = I 1;
J = J 256;
кінець
Швидке перетворення Фур'є% TRANSFORM
/ = 1;
я = 1;
а ((J 256) <= S1)
x_new_freq (я, 1:256) = FFT (x_new (я, 1:256));
I = I 1;
J = J 256;
кінець
MEL% ПЕРІОДИЧНІСТЬ УПАКОВЦІ
nr_of_filters = 20;
м = melfb (nr_of_filters, 256, 11000);
П2 = 1 поверх (256 / 2);
я = 1;
/ = 1;
а ((J 256) <= S1)
для (А = 1: nr_of_filters)
z_prim = (м * (ABS (x_new_freq (I, 1: N 2)). ^ 2)');%'
г (я, Ь) = z_prim (к);
кінець
J = J 256;
I = I 1;
кінець
я = 1;
/ = 1;
а ((J 256) <= S1)
cepstrum_prim = DCT (г (я, 1: nr_of_filters));
для (А = 1: nr_of_filters)
кепстра (я, Ь) = cepstrum_prim (к);
кінець
J = J 256;
I = I 1;
кінець
дозвіл = я-1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%якщо і є інший код MATLAB, то і відправити її мені.