Matlab提取语音信号共振峰并画图代码
时间: 2024-01-22 09:20:16 浏览: 171
以下是一个基于滤波器的共振峰提取的Matlab示例代码,同时包括画图:
```matlab
% 读入语音信号
[y,fs] = audioread('example.wav');
% 设计数字滤波器
[b,a] = butter(6,[300 3000]/(fs/2),'bandpass');
% 将信号通过滤波器
y_filtered = filter(b,a,y);
% 使用Matlab的findpeaks函数检测滤波后信号的峰值
[pks,locs] = findpeaks(y_filtered,'MinPeakDistance',round(fs/50),'MinPeakHeight',0.1);
% 绘制语音信号和滤波后信号的波形图
t = (0:length(y)-1)/fs;
subplot(2,1,1)
plot(t,y)
title('语音信号')
xlabel('时间 (秒)')
ylabel('幅值')
subplot(2,1,2)
plot(t,y_filtered)
hold on
plot(locs/fs,pks,'ro')
title('滤波后信号和共振峰')
xlabel('时间 (秒)')
ylabel('幅值')
legend('滤波后信号','共振峰')
```
在上述代码中,我们首先使用`audioread`函数读入一个语音信号,然后使用`butter`函数设计一个6阶的带通滤波器,将语音信号通过滤波器得到滤波后的信号。接着,我们使用`findpeaks`函数检测滤波后信号的峰值,并通过`plot`函数绘制语音信号和滤波后信号的波形图,其中共振峰用红色圆圈标出。
阅读全文