Этот пример показывает, как сжать речевой сигнал использование дискретного косинусного преобразования (DCT).
Загрузите файл, содержащий слово, "сильное", произнесенное женщиной и мужчиной. Сигналы выбираются на уровне 8 кГц.
load(fullfile(matlabroot,'examples','signal','strong.mat')) % To hear, type soundsc(her,fs), pause(1), soundsc(him,fs)
Используйте дискретное косинусное преобразование, чтобы сжать розеточный речевой сигнал. Разложите сигнал на базисные векторы DCT. Существует столько же условий в разложении, сколько существуют выборки в сигнале. Коэффициенты расширения в векторном X
измеряются, сколько энергии хранится в каждом из компонентов. Сортировка коэффициентов от самого большого до самого маленького.
x = her';
X = dct(x);
[XX,ind] = sort(abs(X),'descend');
Найдите, сколько коэффициентов DCT представляет 99,9% энергии в сигнале. Выразите номер как процент общего количества.
need = 1; while norm(X(ind(1:need)))/norm(X)<0.999 need = need+1; end xpc = need/length(X)*100;
Обнулите коэффициенты, которые содержат остающийся 0,1% энергии. Восстановите сигнал от сжатого представления. Постройте исходный сигнал, его реконструкцию и различие между двумя.
X(ind(need+1:end)) = 0; xx = idct(X); plot([x;xx;x-xx]') legend('Original',[int2str(xpc) '% of coeffs.'],'Difference', ... 'Location','best')
% To hear, type soundsc(x,fs), pause(1), soundsc(xx,fs)
Повторите анализ для мужского голоса. Найдите, сколько коэффициентов DCT представляет 99,9% энергии и выражает номер как процент общего количества.
y = him'; Y = dct(y); [YY,ind] = sort(abs(Y),'descend'); need = 1; while norm(Y(ind(1:need)))/norm(Y)<0.999 need = need+1; end ypc = need/length(Y)*100;
Установите остальную часть коэффициентов обнулять и восстанавливать сигнал от сжатой версии. Постройте исходный сигнал, его реконструкцию и различие между двумя.
Y(ind(need+1:end)) = 0; yy = idct(Y); plot([y;yy;y-yy]') legend('Original',[int2str(ypc) '% of coeffs.'],'Difference', ... 'Location','best')
% To hear, type soundsc(y,fs), pause(1), soundsc(yy,fs)
В обоих случаях, приблизительно половина коэффициентов DCT достаточны, чтобы восстановить речевой сигнал обоснованно. Если необходимая энергетическая часть составляет 99%, количество необходимых коэффициентов уменьшает приблизительно до 20% общего количества. Получившаяся реконструкция является нижней, но все еще понятной.
Анализ этих и других выборок предполагает, что больше коэффициентов необходимо, чтобы охарактеризовать речь человека, чем женщина.