吉林工程技术师范学院课程设计论文
for k1=1:1:240 ma=abs(max(x3)); tc=0.6*ma; if x3(k1)>tc
x3(k1)=x3(k1)-tc; else if x3(k1)<-tc x3(k1)=x3(k1)+tc; else
x3(k1)=0; end end end j=1:240;
subplot(2,2,4);plot(j,x3);title('中心消波法处理后的波形')
4.6 基音周期检测实验
4.2.6 语音信号增强实验 clear clc
winsize=256; % 窗长 winsize=256; % 窗长 n=0.04; % 噪声水平
[speech,fs,nbits]=wavread('ah02.wav'); % 读入数据 size=length(speech);
numofwin=floor(size/winsize); % 帧数 %加窗
11
吉林工程技术师范学院课程设计论文
ham=hamming(winsize)'; %Generates Hamming Window hamwin=zeros(1,size); %Vector for window gain enhanced=zeros(1,size); %Vector for enhanced speech %产生带噪信号
x=speech'+ n*randn(1,size); %Contaminates signal with white noise %噪声估计
noisy=n*randn(1,winsize); %Sample of noise N = fft(noisy);
nmag= abs(N); %Estimated noise magnitude spectrum for q=1:2*numofwin-1
frame=x(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2); P percent overlap hamwin(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=hamwin(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)+ham; %Window gain %对带噪语音进行DFT y=fft(frame.*ham);
mag = abs(y); %Magnitude Spectrum phase = angle(y); %Phase Spectrum %幅度谱减 for i=1:winsize if mag(i)-nmag(i)>0 clean(i)= mag(i)-nmag(i); else;clean(i)=0; end end
%在频域中重新合成语音 fff=exp(j*phase); spectral=clean.*fff; %IDFT并重叠相加
enhanced(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=enhanced(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)+real(ifft(spectral));
12
吉林工程技术师范学院课程设计论文
end
% 除去Hamming窗引起的增益 for i=1:size if hamwin(i)==0 enhanced(i)=0; else
enhanced(i)=enhanced(i)/hamwin(i); end
4.7语音信号增强实验
4.2.7 语音信号端点检测实验 clc clear
x=wavread('nihao'); x = x / max(abs(x));
13
吉林工程技术师范学院课程设计论文
FrameLen = 240; FrameInc = 80; amp1 = 10; amp2 = 2; zcr1 = 10; zcr2 = 5;
maxsilence = 8; minlen = 15; status = 0; count = 0; silence = 0;
tmp2 = enframe(x(2:end) , FrameLen, FrameInc); tmp1 = enframe(x(1:end-1), FrameLen, FrameInc); signs = (tmp1.*tmp2)<0; diffs = (tmp1 -tmp2)>0.02; zcr = sum(signs.*diffs, 2);
amp = sum(abs(enframe(filter([1 -0.9375], 1, x), FrameLen, FrameInc)), 2); amp1 = min(amp1, max(amp)/4); amp2 = min(amp2, max(amp)/8); h=1;
for n=1:length(zcr) switch status
case {0,1} if amp(n) > amp1 x1(h) = max(n-count-1,1); status = 2; silence = 0; count = count + 1;
elseif amp(n) > amp2 | zcr(n) > zcr2 % status = 1;
14
吉林工程技术师范学院课程设计论文
count = count + 1; else status = 0; count = 0; end
case 2,
if amp(n) > amp2 | zcr(n) > zcr2
count = count + 1; else silence = silence+1; if silence < maxsilence count = count + 1; elseif count < minlen status = 0; silence = 0; count = 0;
else status = 3; end end case 3,
count = count-silence/2; x2(h) = x1(h) + count -1; h=h+1;
status = 0 ; silence=0; count=0; end end
15