ECE 310 Final Project Speaker Recognition

birthdaytestΤεχνίτη Νοημοσύνη και Ρομποτική

17 Νοε 2013 (πριν από 3 χρόνια και 8 μήνες)

126 εμφανίσεις











ECE 310 Final Project

Speaker Recognition


May 9, 2001


Jason P. Wyatt





















Abstract


The objectives of this project were to get “hands
-
on” experience with signal
processing in both the time and the frequency domain, to become fami
liar with
MATLAB programming, and to receive a small bit of insight into the principles of
speech analysis. This was accomplished by recording four speech segments from each
person in the ECE 310 class, all of them varying slightly. Comparisons and analysi
s were
then made on each signal, dependant upon the instructions given by Dr. Qi. These
instructions involved six different procedures to apply to the recorded signals, which
were speech editing, speech degradation, speech enhancement, pitch analysis, form
ant
analysis, and waveform comparison. Speech analysis was a simple cut
-
and
-
paste type
procedure. Speech degradation and speech enhancement were related sections, in which a
signal was taken, noise was added, and then a lowpass filter was used to help dimi
nish
that noise. Pitch analysis was a useful way to roughly tell if a speaker was male or female
based on the average pitch derived from the pitch contour. Formant analysis was a
slightly more useful approach that could actually be used to help distinguish

between
members of the same sex. And, finally, waveform comparison made use of both the pitch
and formant analyses to find the closest three files to a pre
-
defined reference file.







Introduction


The motivations for doing this sort of project were exp
lored in handouts that were
provided. The initial research into this field was done in the 1960’s with the hope of
finding some analysis or set of analyses that could distinguish the voice of each
individual person, much like a fingerprint does. In fact, t
his was thought likely enough
that the term, “…
voiceprint

was derived from the more familiar term
fingerprint
…”
(
Voice Recognition
, p.16). However, the, “…voiceprint identification method…had
many flaws…” (
Voice Recognition
, p. 17). At first, voice recogni
tion was done mainly
through trained humans, but this was deemed to be too arbitrary for use in courts and the
like, so it was attempted to automate the process through the use of computers.
Automation was seen as a perfect way to determine with absolute c
ertainty who an
individual was simply by recording a large enough amount of his or her speech to obtain
a match. After all, “…the major point to remember is that voice or vocal characteristics
are different from speech…” (
Speech Production
…, p.62). In othe
r words, just because a
person speaks with a regional accent does not necessarily mean that his vocal
characteristics have different properties, so a subject trying to change his voice to avoid
authorities would supposedly not succeed. However, it was even
tually determined that
certain procedures were, “…affected by the speaker’s mood and can be modified
intentionally by an uncooperative speaker or one with criminal intent…” (
Voice
Recognition
, p. 22). Therefore, projects such as this one and other more adv
anced
approaches are attempted to find the right combination of procedures (or entirely new
procedures) that will make voiceprint identification a reality.


The official problems to be solved in this project are described in detail in the
“Approach” sectio
n and were summarized in the “Abstract”. The idea is to be able to take
a reference signal and find other signals that are most likely made by that same person.
Basically, different analyses are done in each section of the procedures, culminating in a
wave
form comparison between a reference file and all other files, hopefully with the
outcome that the three closest signals will be the three other signals recorded by that
same person. Common approaches used to solve speech recognition are pitch and
formant,
but Delta
-
Cepstrum coefficients and perceptual linear predictive coefficients are
also used (but not in this particular project).


In summary, this project first takes signals and allows the student to become
familiar with these signals and their properti
es by doing editing and filtering on those
signals. After the student is familiar with how the signal behaves and what it looks like,
then pitch and formant analyses are done to quantify some mathematical properties of
those signals that are useful in voic
e recognition. Hopefully, the final result will be that
the computer will recognize a speaker, no matter what he or she says, as being a
particular individual that is easily distinguished from the other files recorded by the rest
of the class.







Approa
ch


The first direct problem to solve was speech editing. The “slow signal” was read
into MATLAB using the function wavread(). This function takes a wav file and turns it
into an array of numbers that can be graphed to simulate a spectrograph recording of
that
same speech file. After that file is graphed, each syllable of “Signals and Systems ECE
310” is clearly visible. Since there are five syllables in “Signals and Systems”, the section
containing the first five bursts of the plot were read into a tempora
ry variable, and the rest
of the original variable was read into a second temporary variable. Then these two
temporary arrays were put back into a third new variable in reverse order and the
wavwrite() function was used to create a new wav file. This new w
av file was then
plotted and listened to in order to confirm that it said “ECE 310 Signals and Systems”.


The next two sections were done together. First, the “fast signal” was read into
MATLAB in the same way as was done in speech editing. Then a random n
oisy signal
was generated at a variance specified by the user and was added on top of the fast signal.
The noise was made by using randn() to get a natural random assortment of numbers
based on the Gaussian pdf bell
-
curve. Then a lowpass filter was created

at a cutoff
frequency specified by the user by using butter() and was applied to the noisy signal by
using filter(). All signals and their fft’s were plotted in these sections to show that the
noise had been added and then diminished. Also, these signals
were turned back into wav
files for listening purposes using wavwrite().


The fourth section was pitch analysis, and while it was only required to analyze a
single signal, several signals were analyzed instead to show how pitch can easily be used
to tell m
ale from female when the speakers are all saying roughly the same thing for the
same length of time. Signals were read in using wavread(). Dr. Qi’s function pitch() was
then called, which returns a time frame for the plot, a frequency pitch contour, and an

average pitch. All signals were plotted, as were their pitch contours, but it was found that
average pitch had the most bearing on male versus female determination. Two males and
two females were analyzed in order to show trends between the two groups.


T
he fifth section of the project was formant analysis. Both slow and fast signals
were read in for three different people so that formant peak comparisons could be done
both between the slow and fast signals of each individual person, but also to show
diffe
rences between two different people. Wavread() was used for input, and Dr. Qi’s
formant() was used to analyze them. As a rather important side note, the formant()
function provided on the web was slightly modified so that it would also return the
indices o
f each of the formant peaks, which it did not originally do even though they
were calculated inside the function.


Finally, waveform comparison was done between the slow signal and all eighty
-
two other signals. There were several choices as to the best wa
y to compare these signals,
including direct psd (formant) comparison, comparison of the psd peaks, comparison of
the first few samples in the pitch contour, comparison of a histogram of the pitch contour,
and comparison of the average pitches. In the end,

it was decided that using both the
indices of the psd peaks and the average pitches would be a good comparison. Files were
read in and compared in a “for” loop. The differences in the average pitches and psd
peaks were then put into an array and sorted. I
gnoring the first element of each sorted
array (because that was the comparison of the slow reference file with itself), the three
closest files were found, and their pitch contours and formants were plotted.

Experimental Results


The speech editing proced
ure worked perfectly. This can easily be seen from the
following MATLAB plot that was generated by the code for this first section:




Plot 1 is the original signal. Plot 2 is the first half. Plot 3 is the second half. Plot 4 is the
recombined signal. It
is quite obvious even from these simple plots that the order of the
words has been reversed. Also, running the MATLAB code for this section creates a new
wav file called a03backwards.wav. Listening to this new file confirms what the plot
shows.

The degrada
tion and enhancement procedures also worked rather well, assuming
that reasonable values are used for the variance and cutoff frequencies. Here is the plot of
the original, noisy, and de
-
noised files (as well as the fft’s of those files) using a variance
o
f 0.08 and a cutoff of 0.04.




Output files of the noisy and de
-
noisy signals are called a04noise.wav and
a04denoise.wav, respectively. Listening to these files shows a very clear, noisy, and less
-
noisy aspect that was what was trying to be achieved in t
his step.




The pitch analysis results are as follows:




While the pitch contours do not do much to convince the user that a particular signal is
male or female, the average pitches do. That fprintf() output to the screen was:

The 1st average m
ale pitch frequency is 164.8001.

The 2nd average male pitch frequency is 150.2105.

The 1st average female pitch frequency is 220.6359.

The 2nd average female pitch frequency is 260.7830.

This clearly shows that the males are well below two hundred, while t
he females are well
above. So, pitch analysis is a useful tool in speech recognition, as least as far as gender.


Psd contour plots from the formant analysis section are more helpful than pitch
when determining a particular speaker, however, as can be see
n from the plot.




Formant contours are very close to all other formant contours for the same speaker, no
matter what that speaker is saying. These plots of the slow and fast signals for three
different people clearly show trends of being alike for the s
ame person and distinctly
different for different people.





The final procedure was a waveform comparison between the slow signal and all
other recorded signals. The point of this was to hopefully show that the computer would
pick the other three files

recorded by the same person as the three that were closest to the
reference. Unfortunately, errors do creep into these calculations, as can be seen from the
choices that the computer made.




The computer picked a59.wav, a72.wav, and a64.wav as the close
st to the reference file
of a03.wav. Unfortunately, only a64.wav is also a file created by me, namely the “Signals
and Systems ECE 310” file with noise in the background. However, this cannot be seen
as a total loss, because the computer did at least get o
ne of the matches correct.

Discussions

Overall, the project went very well, and I have learned quite a lot. Speech editing
is nothing more than moving about some arrays of numbers. Enhancement filters can be
used to remove both natural and intentional nois
e, to a reasonable extent. And pitch and
formant analysis can be used to give a general idea of whether two speakers are the same
person or not. The defect, however, is obvious in the waveform comparison. While these
approaches can be used to give a rough
estimate or to aid in human decisions about
whether two voices are the same, computer programs like these are simply not advanced
enough to be completely automated and foolproof. In other words, this is not a “black
box” where you do not have to know anyth
ing about how the program works and just
expect an accurate answer based on a certain set of inputs. Other things that I would like
to explore in the subject include Delta
-
Cepstrum coefficients and perceptual linear
predictive coefficients in order to see
how much they could help with or replace pitch and
formant analysis. Maybe a combination of all four would give a much higher
confirmation percentage.



Reference

Voice Recognition

by Richard L. Klevans and Robert D. Rodman

Speech Production, Labeling, and

Characteristics

by unknown




Appendix

%ECE 310 Final Project

%Jason P. Wyatt

%4
-
29
-
2001


clear all;

clc;


%SPEECH EDITING


%Getting the original signal

[yorg,fs,nbits]=wavread(
'a03.wav'
);

t=0:1./fs:length(yorg)./fs
-
1./fs;

subplot(2,2,1); plot(t',yorg); x
label(
't'
); ylabel(
'"Signals and
Systems ECE 310"'
);

axis([0 5
-
0.3 0.3]);

%sound(yorg, fs);


%Getting "Signals and Systems"

ysas(1:1:20000)=yorg(1:1:20000);

t=0:1./fs:length(ysas)./fs
-
1./fs;

subplot(2,2,2); plot(t',ysas); xlabel(
't'
); ylabel(
'"Signals

and
Systems"'
);

axis([0 2.5
-
0.3 0.3]);


%Getting "ECE 310"

yece(1:1:20000)=yorg(20001:1:40000);

t=0:1./fs:length(yece)./fs
-
1./fs;

subplot(2,2,3); plot(t',yece); xlabel(
't'
); ylabel(
'"ECE 310"'
);

axis([0 2.5
-
0.3 0.3]);


%Recombining into "ECE 310 Signals

and Systems"

ynew=[yece, ysas];

t=0:1./fs:length(ynew)./fs
-
1./fs;

subplot(2,2,4); plot(t',ynew); xlabel(
't'
); ylabel(
'"ECE 310 Signals
and Systems"'
);

axis([0 5
-
0.3 0.3]);

wavwrite(ynew,
'a03backwards.wav'
);

%pause; sound(ynew, fs);









%ECE 310 Fin
al Project

%Jason P. Wyatt

%4
-
29
-
2001


clear all;

clc;


%SPEECH DEGRADATION


fprintf(
'Enter the variance at which you want the Gaussian
\
n'
);

variance=input(
'noise to be added (max should be around 0.1): '
);

fprintf(
'
\
n'
);


[yorg,fs,nbits]=wavread(
'a04.wav
'
);

%sound(yorg,fs);

t=0:1./fs:length(yorg)./fs
-
1./fs;

subplot(3,2,1); plot(t',yorg); xlabel(
't'
); ylabel(
'Original Fast
Signal'
);

yf=fft(yorg);

yfs=fftshift(yf);

f=
-
length(yorg)./2:length(yorg)./2
-
1;

subplot(3,2,2); plot(f,abs(yfs)); xlabel(
'f'
); ylabel(
'
fft of Original
Fast Signal'
);


mu=0;

n=randn(size(yorg))*variance+mu*ones(size(yorg));

noise=[n,yorg];

wavwrite(noise, fs,
'a04noise.wav'
);

%pause; sound(noise, fs);

subplot(3,2,3); plot(t',noise); xlabel(
't'
); ylabel(
'Noisy Fast
Signal'
);

nf=fft(noise);

nfs=fftshift(nf);

subplot(3,2,4); plot(f,abs(nfs)); xlabel(
't'
); ylabel(
'Noisy fft'
);



%SPEECH ENHANCEMENT


fprintf(
'Enter the cutoff frequency at which you want the
\
n'
);

cutoff=input(
'noisy file to be filtered (should be around 0.05): '
);

fprintf(
'
\
n'
);


order=3;

[B,A]=butter(order,cutoff);

denoise=10*filter(B,A,noise);

subplot(3,2,5); plot(t', denoise); xlabel(
't'
); ylabel(
'Filtered Noisy
Signal'
);

wavwrite(denoise, fs,
'a04denoise.wav'
);

%pause; sound(denoise, fs);

denoisef=fft(denoise);

denoisefs=fftsh
ift(denoisef);

subplot(3,2,6); plot(f,abs(denoisefs)); xlabel(
'f'
); ylabel(
'fft of
Filtered Signal'
);



%ECE 310 Final Project

%Jason P. Wyatt

%4
-
29
-
2001


clear all;

clc;


%PITCH ANALYSIS


%1st Male Signal (i.e. Me)

[ymale,fs,nbits]=wavread(
'a03.wav'
);

%so
und(ymale,fs);

t=0:1./fs:length(ymale)./fs
-
1./fs;

subplot(4,2,1); plot(t',ymale); xlabel(
't'
); ylabel(
'1st Male Signal'
);


[t, f0, avgf0] = pitch(ymale, fs);

fprintf(
'
\
nThe 1st average male pitch frequency is %2.4f.
\
n'
,avgf0);

subplot(4,2,2); plot(t, f0);
xlabel(
't frame'
); ylabel(
'Pitch
-

1st
Male'
);


%2nd Male Signal

[ymale2,fs,nbits]=wavread(
'a05.wav'
);

%sound(ymale,fs);

t=0:1./fs:length(ymale2)./fs
-
1./fs;

subplot(4,2,3); plot(t',ymale2); xlabel(
't'
); ylabel(
'2nd Male
Signal'
);


[t, f0, avgf0] = pitch(ym
ale2, fs);

fprintf(
'
\
nThe 2nd average male pitch frequency is %2.4f.
\
n'
,avgf0);

subplot(4,2,4); plot(t, f0); xlabel(
't frame'
); ylabel(
'Pitch
-

2nd
Male'
);


%1st Female Signal

[yfemale,fs,nbits]=wavread(
'a81.wav'
);

%sound(yfemale,fs);

t=0:1./fs:length(yfem
ale)./fs
-
1./fs;

subplot(4,2,5); plot(t',yfemale); xlabel(
't'
); ylabel(
'1st Female
Signal'
);


[t, f0, avgf0] = pitch(yfemale, fs);

fprintf(
'
\
nThe 1st average female pitch frequency is %2.4f.
\
n'
,avgf0);

subplot(4,2,6); plot(t, f0); xlabel(
't frame'
); ylabel(
'Pitch
-

1st
Female'
);


%2nd Female Signal

[yfemale2,fs,nbits]=wavread(
'a82.wav'
);

%sound(yfemale,fs);

t=0:1./fs:length(yfemale2)./fs
-
1./fs;

subplot(4,2,7); plot(t',yfemale2); xlabel(
't'
); ylabel(
'2nd Female
Signal'
);


[t, f0, avgf0] = pitch(yfemale2, fs);

fprintf(
'
\
nThe 2nd average female pitch frequency is
%2.4f.
\
n
\
n'
,avgf0);

subplot(4,2,8); plot(t, f0); xlabel(
't frame'
); ylabel(
'Pitch
-

2nd Female'
);


%ECE 310 Final Project

%Jason P. Wyatt

%4
-
29
-
2001


clear all;

clc;


%FORMANT ANALYSIS

%NOTE! This uses
a slightly modified version of formant.m that also
%returns the indices.


%1
st

Male Slow

[yorg,fs,nbits]=wavread(
'a03.wav'
);

t=0:1./fs:length(yorg)./fs
-
1./fs;

subplot(6,2,1); plot(t',yorg); xlabel(
't'
); ylabel(
'Fast 1st Male'
);


[p,f,i1]=formant(yorg);

sub
plot(6,2,2); plot(f,p); xlabel(
'f'
); ylabel(
'PSD of left'
);


%1st Male Fast

[yorgf,fs,nbits]=wavread(
'a04.wav'
);

t=0:1./fs:length(yorgf)./fs
-
1./fs;

subplot(6,2,3); plot(t',yorgf); xlabel(
't'
); ylabel(
'Fast 1st Male'
);


[p,f,i1f]=formant(yorgf);

subplot(6,2
,4); plot(f,p); xlabel(
'f'
); ylabel(
'PSD of left'
);


%2nd Male Slow

[yorg2,fs,nbits]=wavread(
'a05.wav'
);

t=0:1./fs:length(yorg2)./fs
-
1./fs;

subplot(6,2,5); plot(t',yorg2); xlabel(
't'
); ylabel(
'Slow 2nd Male'
);


[p,f,i2]=formant(yorg2);

subplot(6,2,6); plot
(f,p); xlabel(
'f'
); ylabel(
'PSD of left'
);


%2nd Male Fast

[yorg2f,fs,nbits]=wavread(
'a06.wav'
);

t=0:1./fs:length(yorg2f)./fs
-
1./fs;

subplot(6,2,7); plot(t',yorg2f); xlabel(
't'
); ylabel(
'Fast 2nd Male'
);


[p,f,i2f]=formant(yorg2f);

subplot(6,2,8); plot(f,p
); xlabel(
'f'
); ylabel(
'PSD of left'
);


%Female Slow

[yorg3,fs,nbits]=wavread(
'a37.wav'
);

t=0:1./fs:length(yorg3)./fs
-
1./fs;

subplot(6,2,9); plot(t',yorg3); xlabel(
't'
); ylabel(
'Slow Female'
);


[p,fm,i3]=formant(yorg3);

subplot(6,2,10); plot(f,p); xlabel(
'
f'
); ylabel(
'PSD of left'
);


%Female Fast

[yorg3f,fs,nbits]=wavread(
'a38.wav'
);

t=0:1./fs:length(yorg3f)./fs
-
1./fs;

subplot(6,2,11); plot(t',yorg3f); xlabel(
't'
); ylabel(
'Fast Female'
);


[p,f,i3f]=formant(yorg3f);

subplot(6,2,12); plot(f,p); xlabel(
'f'
); y
label(
'PSD of left'
);


%Printing a table of the indices of the peaks

fprintf(
'
\
nIndices of the Peaks of Each PSD
\
n'
);

fprintf(
'
---------------------------------
\
n'
);

fprintf(
'1st Male Slow
\
t1st Male Fast
\
t2nd Male Slow
\
t2nd Male Fast
\
tFemale Slow
\
tFem
ale Fast
\
n'
);

for

i=1:1:5


fprintf(
'%2.5f
\
t%2.5f
\
t%2.5f
\
t%2.5f
\
t%2.5f
\
t%2.5f
\
n'
,i1(i),i1f(i),i2(i),i2f(i),i3(i),i3f(i));

end

fprintf(
'
\
n'
);






































%ECE 310 Final Project

%Jason P. Wyatt

%5
-
01
-
2001


clear all;

clc;


%WAVEFORM COMPARISION

%Note


This also uses a modified version of formant.m that returns the

%indices of the psd peaks.


%Getting the reference file

[yorg, fs, nbits] = wavread(
'a03.wav'
);

[tporg, fporg, avgf0org] = pitch(yorg, fs);

[psdorg, fforg,

indorg] = formant(yorg);


%Getting the data

for

i=1:83


if

i<10


filename = sprintf(
'a0%i.wav'
, i);


else


filename = sprintf(
'a%i.wav'
, i);

end




[x, fs, nbits] = wavread(filename);


[t, f0, avgf0] = pitch(x, fs);


[psd, fp, ind] = formant(
x);




diffavgf0(i) = abs(avgf0
-

avgf0org);


diffpsd(i) = norm(ind
-

indorg);



end


%Sorting the differences

sortedavgf0 = sort(diffavgf0);

sortedpsd = sort(diffpsd);


%By looking at the printouts of the sorted avgf0's and sorted psd's,

%it was det
ermined

%that the 3 closest avgf0's (excluding the comparison between a03.wav
%and itself) belonged

%to a59.wav, a72.wav, and a64.wav (in decending order of closeness).
%The 3 closest psd's

%were a63.wav, a52.wav, and a17.wav (also in decending order).


%
Printing out the closest avgf0's

fprintf(
'
\
nThe closest avgf0 to the reference file of a03.wav was
a59.wav,
\
n'
);

fprintf(
'which had a difference of %4.4f.
\
n'
,sortedavgf0(2));


fprintf(
'
\
nThe 2nd closest avgf0 to the reference file of a03.wav was
a72.wav,
\
n
'
);

fprintf(
'which had a difference of %4.4f.
\
n'
,sortedavgf0(3));


fprintf(
'
\
nThe 3rd closest avgf0 to the reference file of a03.wav was
a64.wav,
\
n'
);

fprintf(
'which had a difference of %4.4f.
\
n'
,sortedavgf0(4));


%Printing out the closest psd's

fprintf(
'
\
nThe closest psd to the reference file of a03.wav was
a63.wav,
\
n'
);

fprintf(
'which had a difference of %4.4f.
\
n'
,sortedpsd(2));


fprintf(
'
\
nThe 2nd closest psd to the reference file of a03.wav was
a52.wav,
\
n'
);

fprintf(
'which had a difference of %4.4f.
\
n'
,
sortedpsd(3));


fprintf(
'
\
nThe 3rd closest psd to the reference file of a03.wav was
a17.wav,
\
n'
);

fprintf(
'which had a difference of %4.4f.
\
n
\
n'
,sortedpsd(4));


%Combining each signals' avgf0 and psd to find the final winners

finala59 = diffavgf0(59) + dif
fpsd(59);

final(1) = finala59;

finala72 = diffavgf0(72) + diffpsd(72);

final(2) = finala72;

finala64 = diffavgf0(64) + diffpsd(64);

final(3) = finala64;

finala63 = diffavgf0(63) + diffpsd(63);

final(4) = finala63;

finala52 = diffavgf0(52) + diffpsd(52);

fi
nal(5) = finala52;

finala17 = diffavgf0(17) + diffpsd(17);

final(6) = finala17;


sortedfinal = sort(final);


%Both the final list and the sorted final list were looked at

%and the closest signals to the reference were a59, a72, and a64.


%Printint out the
final 3 and plotting

fprintf(
'The closest signal overall to the reference signal a03.wav is
a59.wav.
\
n'
);

fprintf(
'The 2nd closest signal overall is a72.wav.
\
n'
);

fprintf(
'The 3rd closest signal overall is a64.wav.
\
n
\
n'
);


t1=0:1./fs:length(yorg)./fs
-
1./fs
;

subplot(4,3,1); plot(t1, yorg); xlabel(
't'
); ylabel(
'Ref File a03'
);

subplot(4,3,2); plot(tporg, fporg); xlabel(
't'
); ylabel(
'Pitch a03'
);

subplot(4,3,3); plot(fforg, psdorg); xlabel(
'f'
); ylabel(
'PSD a03'
);


[ya59, fs, nbits] = wavread(
'a59.wav'
);

t2=0:
1./fs:length(ya59)./fs
-
1./fs;

[tpa59, fpa59, avgf0a59] = pitch(ya59, fs);

[psda59, ffa59, inda59] = formant(ya59);

subplot(4,3,4); plot(t2, ya59); xlabel(
't'
); ylabel(
'a59'
);

subplot(4,3,5); plot(tpa59, fpa59); xlabel(
't'
); ylabel(
'Pitch a59'
);

subplot(4,3
,6); plot(ffa59, psda59); xlabel(
'f'
); ylabel(
'PSD a59'
);


[ya72, fs, nbits] = wavread(
'a72.wav'
);

t3=0:1./fs:length(ya72)./fs
-
1./fs;

[tpa72, fpa72, avgf0a72] = pitch(ya72, fs);

[psda72, ffa72, inda72] = formant(ya72);

subplot(4,3,7); plot(t3, ya72); xlabe
l(
't'
); ylabel(
'a72'
);

subplot(4,3,8); plot(tpa72, fpa72); xlabel(
't'
); ylabel(
'Pitch a72'
);

subplot(4,3,9); plot(ffa72, psda72); xlabel(
'f'
); ylabel(
'PSD a72'
);


[ya64, fs, nbits] = wavread(
'a64.wav'
);

t4=0:1./fs:length(ya64)./fs
-
1./fs;

[tpa64, fpa64, avg
f0a64] = pitch(ya64, fs);

[psda64, ffa64, inda64] = formant(ya64);

subplot(4,3,10); plot(t4, ya64); xlabel(
't'
); ylabel(
'a64'
);

subplot(4,3,11); plot(tpa64, fpa64); xlabel(
't'
); ylabel(
'Pitch a64'
);

subplot(4,3,12); plot(ffa64, psda64); xlabel(
'f'
); ylabel
(
'PSD a64'
);