speech production
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I am trying to generate the /a/ vowel by using speech production model (digital filters)by following codes.
I am not able to hear the /a/.
function dfcoeff;
imp=[1 zeros(1,33075)]; %create impulse response
[b,a]=gp(0.88); % generate glottal pulse filter coefficients
gp88=filter(b,a,imp); % create a single glottal pulse period, 120 long
Ff=5512.5; % folding frequency is 5000 Hz
a1=0.98; % radius for pole 1
p1=710; % angle for pole 1
a2=0.96; % radius for pole 2
p2=1100.0; % angle for pole 2
a3=0.85; % radius for pole 3
p3=2450.0; % angle for pole 3
a4=0.85; %radius for pole 4
p4=3600.0; % angle for pole 4
sf=10; % scale factor for z-plane
[b,a]=allpoles(Ff,p1,a1,p2,a2,p3,a3,p4,a4,sf);% all-pole filter
%freqz(a,b) %view frequency response
y=filter(b,a,gp88);% filter response
x=conv(y,[1 -1]);% model of sound passing lips
soundsc(x,11025);
function [b,a]= gp(ap)
% returns digital filter coefficients using parameter ap.
e=2.71828;
b=[0 -ap*e*log(ap)];
a=[1 -2*ap ap^2];
function [b,a]=allpoles(Ff,p1,a1,p2,a2,p3,a3,p4,a4,sf)
% Ff = folding frequency
% p# = radius of pole pair # from origin
% a# = frequency location of pole pair #
% sf = pole-zero plot scale factor
% b = vector of input coefficients
% a = vector of output coefficients
% [b,a] = allpoles(p1,a1,p2,a2,p3,a3,p4,a4)
p1a=p1*(cos(a1*pi/Ff)+sin(a1*pi/Ff)*j);
p1b=conj(p1a);
p2a=p2*(cos(a2*pi/Ff)+sin(a2*pi/Ff)*j);
p2b=conj(p2a);
p3a=p3*(cos(a3*pi/Ff)+sin(a3*pi/Ff)*j);
p3b=conj(p3a);
p4a=p4*(cos(a4*pi/Ff)+sin(a4*pi/Ff)*j);
p4b=conj(p4a);
[b,a]=zp2tf([],[p1a;p1b;p2a;p2b;p3a;p3b;p4a;p4b],sf);
Any suggestion?
0 Kommentare
Antworten (0)
Siehe auch
Kategorien
Mehr zu Signal Processing Toolbox finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!