资源简介
主要对不同窗函数加窗效果进行比较,验证选择合适的窗函数进行加窗变换是语言信号处理的一种有效方法。分别用矩形窗、汉纳窗、汉明窗、布莱克曼窗对采集的原始语音信号进行窗宽为N 的加窗FFT变换,得到利用不同窗函数对语音信号进行加窗FFT变换后的信号频谱图。观察不同窗函数的加窗效果,分析窗函数的适用情况。
代码片段和文件信息
%读取语音信号,频谱分析
[xfsbits]=wavread(‘C:\Users\mm\Desktop\语音信号\music1.wav‘);
n=length(x)
X=fft(xn);
figure;plot(x);title(‘语音信号波形‘);
figure;plot(abs(X));title(‘语音信号频谱‘)
sound(xfsbits);
%设计长度N=21中心频率Wc=π/4,主要对四种窗函数特性进行分析,矩形窗、汉宁窗、汉明窗、布莱克曼窗、卷积窗。观察比较其主瓣宽度,旁瓣衰减,过渡带宽等特性指标。
%程序如下:
N=21;
wc=pi/4;
n=0:N-1;
r=(N-1)/2;
hdn=sin(wc*(n-r))/pi./(n-r);
if rem(N2)~=0
hdn(r+1)=wc/pi;
End
wn1=boxcar(N);
hn1=hdn.*wn1‘;
wn2=hanning(N);
hn2=hdn.*wn2‘;
wn3=hamming(N);
hn3=hdn.*wn3‘;
wn4=blackman(N);
hn4=hdn.*wn4‘;
wn50=(hamming(N))‘;
wn51=wn50;
wn5=wn50.*wn51;
hn5=hdn.*wn5;
figure(1);
subplot(211); stem(nhn1‘.‘); title(‘矩形窗设计得h(n)‘)
hw=fft(hn1512); w=2*[0:511]/512;
subplot(212); plot(w20*log10(abs(hw))); grid; title(‘矩形窗幅度特性(dB)‘)
figure(2);
subplot(211); stem(nhn2‘.‘); title(‘汉宁窗设计得h(n)‘)
hw=fft(hn2512); w=2*[0:511]/512;
subplot(212); plot(w20*log10(abs(hw))); grid; title(‘汉宁窗幅度特性(dB)‘)
figure(3);
subplot(211); stem(nhn3‘.‘); title(‘汉明窗设计得h(n)‘)
hw=fft(hn3512); w=2*[0:511]/512;
subplot(212); plot(w20*log10(abs(hw))); grid; title(‘汉明窗幅度特性(dB)‘)
figure(4);
subplot(211); stem(nhn4‘.‘); title(‘布莱克曼窗设计得h(n)‘)
hw=fft(hn4512); w=2*[0:511]/512;
subplot(212); plot(w20*log10(abs(hw))); grid; title(‘布莱克曼窗幅度特性(dB)‘)
figure(5);
subplot(211); stem(nhn5‘.‘); title(‘汉明自卷积窗设计得h(n)‘)
hw=fft(hn5512); w=2*[0:511]/512;
subplot(212); plot(w20*log10(abs(hw))); grid; title(‘汉明自卷积窗幅度特性(dB)‘)
%本段程序是对采集的语音信号进行加窗傅立叶变换变换,观察其短时谱,与原始信号频谱进行比较。对整段语音信号作加窗处理,将局部频谱进行放大,便于细节对比。共比较了五种窗:矩形窗、汉宁窗、汉明窗、布莱克曼窗、卷积窗(汉明)的加窗处理效果。
%程序如下:
[xfsbits]=wavread(‘C:\Users\mm\Desktop\语音信号\music1.wav‘); %读取语音
n=length(x);
Repeat = 1;
x1 = x(1:n);
X=fft(xn);
plot(abs(X));axis([01000003500])title(‘语音信号频谱‘); %原始信号的频谱
sound(xfsbits);
while Repeat == 1
disp(‘选择窗函数‘);
disp(‘1:boxcar‘);
disp(‘2:hanning‘);
disp(‘3:hamming‘);
disp(‘4:blackman‘);
Ans = input(‘Choose=‘); %case语句选择不同窗函数做加窗变换
switch Ans
case 1
w = (boxcar(n))‘;
x2 = x1.*w; %加窗方法:时域卷积
Xk2= fft(x2n);
figure;
plot(abs(Xk2))axis([01000003500])title(‘加矩形窗后的信号频谱‘);
case 2
w = (hanning(n))‘;
Xk2 = fft(x2n);
x2 = x1.*w;
figure;
plot(abs(Xk2))axis([01000003500])tit
评论
共有 条评论