1 简介 首先,需要对录音文件进行一次滤波,也就是设计一个带通滤波器,将550Hz~1600Hz之外的音频滤掉;接下来,也是最重要的,就是将语音片段分割开来,只有在分割开来的语音片段
1 简介
首先,需要对录音文件进行一次滤波,也就是设计一个带通滤波器,将550Hz~1600Hz之外的音频滤掉;接下来,也是最重要的,就是将语音片段分割开来,只有在分割开来的语音片段上进行单个片段的FFT分析才能识别这个片段内所含的音频;接下来就是对这个片段进行FFT分析,分析出来的结果一般不会是简单的含有两个峰的FFT信号,因为存在噪声,所以还得考虑到如何将分析出来的大致的FFT结果和我们已知的拨号音频率对应上。
2 部分代码
clear;clc;%% 初始化相关数据
A=10;%振幅
fs=44100; %采样频率
N=8820; % 信号样点数,每个音频播放时长
y = [];%用来存储音频数据
i_all = [];%用来记录每次i的值
f = [697,1209;697,1336;697,1477;770,1209;770,1336;770,1477;852 1209;852 1336;852 1477;941 1336];%从1-9-0的频率
% myrecorder = audiorecorder(44100,16,1);
%% 生成随机音频并播放
for j=1:10
i = randi([1 10]);
i_all = [i_all i];
y = [y A*sin(2*pi*f(i,1)*(0:N-1)/fs)+A*sin(2*pi*f(i,2)*(0:N-1)/fs) zeros(1,4410) ];
% y = [y A*sin(2*pi*f(i,1)*(0:N-1)/fs)+A*sin(2*pi*f(i,2)*(0:N-1)/fs) zeros(1,randi([1,8820]))];
end
%sound(y,fs);
% disp('record start!');
% recordblocking(myrecorder,length(y)/10000);
% disp('record end!');
% myrecorder_array = getaudiodata(myrecorder);
% plot((1:length(myrecorder_array))/44100,myrecorder_array);
audiowrite('MySound.wav',y,fs);
for i =1:length(i_all)
if i_all(i) == 10
i_all(i) = 0;
end
end
disp(i_all);
3 仿真结果
4 参考文献
[1]沈泉波, and 韩慧莲. "基于HMM的语音识别系统的Matlab仿真." 电声技术 36.10(2012):56-57.