语音信号分析:浊音波形与短时频谱图 (窗长256)
语音信号分析:浊音波形与短时频谱图 (窗长256)
本文将使用MATLAB代码分析一段浊音的波形和短时频谱图,并比较使用矩形窗和汉明窗对结果的影响。
代码示例:
% 读取音频文件
[x,fs]=audioread('E:\语音信号分析\abc.wav');
% 分帧,窗长256,帧移128
e=fra(256,128,x);
% 取第20帧
ee=e(20,:);
% 绘制原始语音波形
subplot(2,2,1)
ee1=ee/max(ee);
plot(ee1)
xlabel('样点数')
ylabel('幅度')
title('原始语音')
axis([0,256,-1.5,1.5])
% 加矩形窗时的短时频谱图
% 对第20帧加矩形窗
r=fft(ee,1024); % 进行1024点FFT
r1=abs(r); % 计算幅值
r1=r1/max(r1); % 归一化
yuanlai=20*log10(r1); % 转换为对数幅度谱
signal(1:512)=yuanlai(1:512); % 取前512个点
pinlv=(0:1:511)*8000/1024; % 计算对应频率
subplot(2,2,2)
plot(pinlv,signal);
xlabel('频率/Hz')
ylabel('对数幅度/dB')
title('加矩形窗时语音谱')
axis([0,4000,-80,15])
% 加汉明窗时的短时频谱图
% 对第20帧加汉明窗
f=ee'.*hamming(length(ee)); % 计算汉明窗
f1=f/max(f); % 归一化
subplot(2,2,3)
plot(f1)
axis([0,256,-1.5,1.5])
xlabel('样点数')
ylabel('幅度')
title('窗选语音')
% 加汉明窗时的短时频谱图
% 对第20帧加汉明窗
r=fft(f,1024); % 进行1024点FFT
r1=abs(r); % 计算幅值
r1=r1/max(r1); % 归一化
yuanlai=20*log10(r1); % 转换为对数幅度谱
signal(1:512)=yuanlai(1:512); % 取前512个点
pinlv=(0:1:511)*8000/1024; % 计算对应频率
subplot(2,2,4)
plot(pinlv,signal);
xlabel('频率/Hz')
ylabel('对数幅度/dB')
title('加汉明窗时语音谱')
axis([0,4000,-80,15])
代码解释:
- 读取音频文件:
[x,fs]=audioread('E:\语音信号分析\abc.wav');该语句读取名为'abc.wav'的音频文件,并获取语音信号x和采样率fs。 - 分帧:
e=fra(256,128,x);使用自定义函数fra对语音信号进行分帧,窗长为256,帧移为128。 - 选择第20帧:
ee=e(20,:);取出第20帧的语音信号。 - 绘制原始语音波形:
subplot(2,2,1); plot(ee1); ...将原始语音信号进行归一化处理后,绘制波形图。 - 加矩形窗并计算频谱:
r=fft(ee,1024); ...对第20帧加矩形窗,进行1024点FFT,并计算幅值谱。 - 转换对数幅度谱:
yuanlai=20*log10(r1); ...将幅值谱转换为对数幅度谱,并绘制短时频谱图。 - 加汉明窗并计算频谱:
f=ee'.*hamming(length(ee)); ...对第20帧加汉明窗,进行1024点FFT,并计算幅值谱。 - 绘制汉明窗频谱: 类似步骤6,绘制汉明窗频谱。
结论:
通过比较矩形窗和汉明窗的短时频谱图,我们可以看到汉明窗可以有效地减少频谱泄露,获得更准确的频率信息。
注意:
fra函数是自定义的,需要根据实际情况编写。- 代码中的路径
'E:\语音信号分析\abc.wav'需要根据实际情况进行修改。 - 本文仅供参考,实际应用中需要根据具体需求进行调整。
原文地址: https://www.cveoy.top/t/topic/oy9k 著作权归作者所有。请勿转载和采集!