← Back to Projects

Speaker Identification System

Speaker Identification with MFCC + GMM

Speak for four seconds and the system decides who you are — or decides you are not on the list. Built from scratch in MATLAB; 93.1% end to end.

View code

Role
Course Project · Team of four (my share: 25%)
Period
Sep. 2025 – Jan. 2026
Institution
SUSTech Supervised by Dr. Fei Chen

Why this matters

The hard part of speaker identification is not classification, it is rejection. A pure classifier hands every stranger to whichever enrolled user they happen to resemble most — exactly the wrong failure mode for access control or identity checks. So the decision cannot rest on who scores highest; it also has to ask whether that score is high enough, and whether first place is far enough clear of second.

What I did

  • I owned the overall code architecture, the audio file management layer, and the demo; MFCC extraction, preprocessing and GMM training were handled by my three teammates.
  • Routed training and recognition through one shared feature-extraction entry point, so the training set, test set and live recordings all pass through an identical preprocessing chain — a mismatch there is the most easily missed source of error in this kind of system.
  • Preprocessing chain: mono downmix, DC removal, amplitude normalization, resampling to 8 kHz, an 80–3400 Hz bandpass, and endpoint detection driven by short-time energy and zero-crossing rate.
  • Features are MFCCs with CMVN normalization, which suppresses the channel differences introduced by different microphones and recording levels.
  • Modelling uses a 16-component GMM per speaker, trained with EM.
  • The decision layer applies two thresholds — a stranger threshold (top score below it means unknown) and a score-margin threshold (first and second too close means uncertain) — yielding confirmed / uncertain / stranger.

Course project for Speech Signal Processing, done in a team of four. Both figures are from our group report.

The live identification window. Waveform on top, spectrogram in the middle, MFCC map below. The header row shows log-likelihood scores against all three enrolled speakers (lc -14.46, zzh -16.16, jlw -16.33), and the verdict goes to the highest. Both the stranger threshold and the score-margin threshold are editable fields.
The live identification window. Waveform on top, spectrogram in the middle, MFCC map below. The header row shows log-likelihood scores against all three enrolled speakers (lc -14.46, zzh -16.16, jlw -16.33), and the verdict goes to the highest. Both the stranger threshold and the score-margin threshold are editable fields.
Confusion matrix over 58 test utterances; 93.1% overall. The stranger row is the one that matters most — 15 of 16 impostors correctly rejected, which says more about whether the system is usable than raw classification accuracy does.
Confusion matrix over 58 test utterances; 93.1% overall. The stranger row is the one that matters most — 15 of 16 impostors correctly rejected, which says more about whether the system is usable than raw classification accuracy does.

Outcome

  • 93.1% overall accuracy (54 of 58 test utterances correct).
  • 15 of 16 impostor samples correctly rejected — a figure that says more about real usability than raw classification accuracy.
  • Delivered an interactive MATLAB GUI: record, play back, identify, save training samples, rebuild the voiceprint database and load WAV files, with waveform, spectrogram and MFCC map shown side by side.

Technologies

  • MATLAB
  • MFCC
  • GMM / EM
  • CMVN
  • Voice Activity Detection
  • Speech Signal Processing