语音信号分析:浊音波形与短时频谱图 (窗长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])

代码解释:

  1. 读取音频文件: [x,fs]=audioread('E:\语音信号分析\abc.wav'); 该语句读取名为'abc.wav'的音频文件,并获取语音信号x和采样率fs
  2. 分帧: e=fra(256,128,x); 使用自定义函数fra对语音信号进行分帧,窗长为256,帧移为128。
  3. 选择第20帧: ee=e(20,:); 取出第20帧的语音信号。
  4. 绘制原始语音波形: subplot(2,2,1); plot(ee1); ... 将原始语音信号进行归一化处理后,绘制波形图。
  5. 加矩形窗并计算频谱: r=fft(ee,1024); ... 对第20帧加矩形窗,进行1024点FFT,并计算幅值谱。
  6. 转换对数幅度谱: yuanlai=20*log10(r1); ... 将幅值谱转换为对数幅度谱,并绘制短时频谱图。
  7. 加汉明窗并计算频谱: f=ee'.*hamming(length(ee)); ... 对第20帧加汉明窗,进行1024点FFT,并计算幅值谱。
  8. 绘制汉明窗频谱: 类似步骤6,绘制汉明窗频谱。

结论:

通过比较矩形窗和汉明窗的短时频谱图,我们可以看到汉明窗可以有效地减少频谱泄露,获得更准确的频率信息。

注意:

  • fra函数是自定义的,需要根据实际情况编写。
  • 代码中的路径'E:\语音信号分析\abc.wav'需要根据实际情况进行修改。
  • 本文仅供参考,实际应用中需要根据具体需求进行调整。
语音信号分析:浊音波形与短时频谱图 (窗长256)

原文地址: https://www.cveoy.top/t/topic/oy9k 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录