bonjour;
dans le cadre de mon projet d’implémentation d'un algorithme de reconnaissance des mots isoles sur une carte DSP,j'ai commencé par concevoir le block d'extraction des paramètres MFCC sous Simulink.
j'ai utilise le block Embedded MATLAB Function
voici mon code .m
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
function c  =mfcc2(s)
% mfcc2: réécriture de l'algorithme MFCC
% Entrees:
%  s : signal de la parole a analyser
%  fs : fréquence échantillonnage
%  k: nombre de coefficients a creer
% Sortie
%  c : matrice des coefficients
 
% variables:
% p : nombre de filtre a creer dans le banc de
%     filtres
%p=floor(3*log(fs));
 
eml.extrinsic('hamming');
eml.extrinsic('enframe');
eml.extrinsic('melbankm');
eml.extrinsic('idct');
eml.extrinsic('melcepst');
eml.extrinsic('fft');
eml.extrinsic('logarithme');
eml.extrinsic('log');
fs=11025;
p=12;
%n: taille des "frames" en échantillons optimale 
%   (une puissance de 2, generalement n=256 ou n=512
n=pow2(floor(log2(0.03*fs)));
% fl,fh: fixent le debut (fl) et la fin (fh)
% de la bande passante de fs a utiliser
fl=0;
fh=0.5; 
% w: indique la fonction de ponderation a utiliser
% ici 'M' => Hamming.
w='m';
% inc : duree de recouvrement des fenetres
%  (les fenetres se recouvrent toutes les...)
inc=floor(n/2);
% creation des frames ponderees par Hamming
z=enframe(s,hamming(n),inc);
%[k,l]=size(z);
% Premiere etape : f est la transorme rapide 
% de Fourier de z
f=fft(z.');
 
% creation du banc de filtre
% p : nombre de filtre a creer dans le banc de filtre
% n : taille des frames en échantillons
% fs : frequence d'echantillionnage du signal
%      d'entree
% fl, fh : fraction de fs a utiliser
% w : type de fenetre de ponderation a utiliser.
[m,a,b]=melbankm(p,n,fs,fl,fh,w);
% m: matrice du banc de filtre
% a et b sont les bornes de la partie utilisee dans f
% on applique le banc de filtre au signal f (en fait
% seulement a la partie delimitee entre a et b) par
% un produit matriciel m * f
% puis on prend le logarithme des coefficients.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
%[y]=logarithme(f,m);
 
y=log(m*(abs(f(a:b,:)).^2));
 
% %%%y=log(m*(abs(f(a:b,:))));
% 
% % creation du cepstre en temps que tel:
% % tranformee en cosinus discret reel:
c=idct(y);
Après l'exécution de mon code, Simulink m'a donne les erreurs suivantes:
Subscripting into an mxArray is not supported.

Function 'Embedded MATLAB Function' (#494.1789.1797), line 63, column 14:
"f(a:b,:)"

Undefined function or variable 'y'. The first assignment to a local variable determines its class.

Function 'Embedded MATLAB Function' (#494.1929.1930), line 69, column 8:
"y"
svp aidez moi