www.pudn.com > lpc_specgram.rar   To Read all the content


[file head]:
I = wavread('北风');>读入原始语音
Q = I';
N = 256; > 窗长
Hamm = hamming(N); > 加窗
frame = 30;>需要处理的帧位置
M = Q(((frame - 1) * (N / 2) + 1):((frame - 1) * (N / 2) + N));
Frame = M .* Hamm';>加窗后的语音帧

[B,F,T] = specgram(I,N,N/2,N);
[m,n] = size(B);
for i = 1:m
FTframe1(i) = B(i,frame);
end

P1 =5;
ai1 = lpc(Frame,P1); > 计算lpc系数
LP1 = filter([0 -ai1(2:end)],1,Frame); > 建立语音帧的正则方程
FFTlp = fft(LP1);
E1 = Frame - LP1; > 预测误差

fLength(1 : 2 * N) = [M,zeros(1,N)];
Xm = fft(fLength,2 * N);
X = Xm .* conj(Xm);
Y = fft(X , 2 * N);
Rk = Y(1 : N);
PART1 = sum(ai1(2 : P1 + 1) .* Rk(1 : P1));
G = sqrt(sum(Frame.^2) - PART1);

A1 = (FTframe1 - FFTlp(1 : length(F'))) ./ FTframe1 ;
subplot(3,1,1),plot(F',20*log(abs(FTframe1)),F',(20*log(abs(1 ./ A1))),'-r');grid;
xlabel('频率/dB');ylabel('幅度');
title('P1 =5')

P2 =10;
ai2 = lpc(Frame,P2); > 计算lpc系数
LP2 = filter([0 -ai2(2:end)],1,Frame); > 建立语音帧的正则方程
FFTlp = fft(LP
... ...

[file tail]:
... ...
2);
E2 = Frame - LP2; > 预测误差

fLength(1 : 2 * N) = [M,zeros(1,N)];
Xm = fft(fLength,2 * N);
X = Xm .* conj(Xm);
Y = fft(X , 2 * N);
Rk = Y(1 : N);
PART2 = sum(ai2(2 : P2 + 1) .* Rk(1 : P2));
G = sqrt(sum(Frame.^2) - PART2);

A2 = (FTframe1 - FFTlp(1 : length(F'))) ./ FTframe1 ;
subplot(3,1,2),plot(F',20*log(abs(FTframe1)),F',(20*log(abs(1 ./ A2))),'-r');grid;
xlabel('频率/dB');ylabel('幅度');
title('P1 =10')

P3 =20;
ai3 = lpc(Frame,P3); > 计算lpc系数
LP3 = filter([0 -ai3(2:end)],1,Frame); > 建立语音帧的正则方程
FFTlp = fft(LP3);
E3 = Frame - LP3; > 预测误差

fLength(1 : 2 * N) = [M,zeros(1,N)];
Xm = fft(fLength,2 * N);
X = Xm .* conj(Xm);
Y = fft(X , 2 * N);
Rk = Y(1 : N);
PART3 = sum(ai3(2 : P3 + 1) .* Rk(1 : P3));
G = sqrt(sum(Frame.^2) - PART3);

A3 = (FTframe1 - FFTlp(1 : length(F'))) ./ FTframe1 ;
subplot(3,1,3),plot(F',20*log(abs(FTframe1)),F',(20*log(abs(1 ./ A3))),'-r');grid;
xlabel('频率/dB');ylabel('幅度');
title('P1 =20')