四、项目内容的具体研究和分析结果
我们先自己通过声卡采集男女生声音信号,将文件保存为(**.WAV)的格式,然后通过Matlab里的‘audioread’函数将文件导入到Matlab里,通过调用函数显示出声音信号的频域波形。具体的函数如下: function pushbutton5_Callback(hObject, eventdata, handles)
h=waitbar(0,'please wait');
for i=1:1000
waitbar(i/1000,h)
end
close(h)
global x1;
global x2;
axes(handles.axes1);
plot(x1);
ylabel('幅值');
xlabel('t ');
title('时域图1');
axes(handles.axes3);
plot(x2);
ylabel('幅值');pcu h
xlabel('t ');
title('时域图2');
function pushbutton6_Callback(hObject, eventdata, handles)
global x1;
global x2;
global fs1;
global fs2;
axes(handles.axes4);
fs=8000;
global L1;
L1=length(x1);
NFFT = 2^nextpow2(L1); % Next power of 2 from length of y
Y = fft(x1,NFFT)/L1;
f = fs/2*linspace(0,1,NFFT/2+1);
% Plot single-sided amplitude spectrum.
plot(f,2*abs(Y(1:NFFT/2+1)));
ylabel('Magnitude (dB)');
xlabel('Frequency (Hz)');
title('频谱图');
axes(handles.axes5);
fs=8000;
global L2;
L2=length(x2);
NFFT = 2^nextpow2(L2); % Next power of 2 from length of Y = fft(x2,NFFT)/L2;
f = fs/2*linspace(0,1,NFFT/2+1);
% Plot single-sided amplitude spectrum.
plot(f,2*abs(Y(1:NFFT/2+1)));
ylabel('Magnitude (dB)');
xlabel('Frequency (Hz)');
title('频谱图');
男声女声
频域:男声VS女声
电极铜
男声
女声
4.2 男、女声波形区分方法
4.2.1 男、女声的差别
通过观察得到的图形,我们可以看出男声与女声的声音大部分集中于200-4000Hz 之间,而女声较男声更多的声音集中在较为低的频率段。所以女生声音有点比较尖的感觉,男声音听起来比较洪亮浑厚。
4.2.2区分方法
根据男、女声的差别我们可以总结出三种区分男、女声的方法:一是根据男、女声基因频率的范围来区分;二是根据男、女声频率主要集中在哪个频段来区分;三是根据男、女声低频成份、高频成分所占的比例来区分。
我们小组采用方法一‘通过观察得到的图形,我们可以看出男声与女声的声音大部分集中于200-4000Hz之间。人类基音范围人70~350hz,男声大概100~200hz,女生200~350hz。据此我们以200hz为界限判断男女声音。用汉宁窗函数滤去输入音频的高频部分,后经过椭圆滤波器(获得更窄的过渡带宽和较小的阻带波动)近似求出基音频率。
代码实现:
KKS689
function pushbutton7_Callback(hObject, eventdata, handles)
global x1;
global fs1;
data1=x1(:,1);
n=0:length(x1)-1;
% 对采集数据作滤波处理步态识别
blocksize =length(data1); % 计算窗函数长度
window = hanning(blocksize); % 计算汉宁窗函数
data2=window.*data1; % 对数据先作加窗处理
% wp=[70,400]; %100Hz--400Hz
% wp=wp*2/fs;
wp=3000*2/fs1;
[b,a]=ellip(4,0.1,20,wp); % 构造椭圆滤波器
data=filter(b,a,data2); % 求加窗处理后的数据经过滤波器的响应
[xmax,index]=max(data1);
timewin=floor(0.015*fs1);
xwin=data1(index-timewin:index+timewin);
[y,lags]=xcov(xwin);
ylen=length(y);
halflen=(ylen+1)/2 +30;
mesh设备yy=y(halflen: ylen);
[ymax,maxindex] = max(yy);
fmax=fs1/(maxindex+30);
disp(['Maximum occurred at ', num2str(fmax), ' Hz'])
f=fmax;
justify=f;%Hz
if justify<200 %limitHz以下判断是男的
msgbox( 'This is a handsome boy')
else
msgbox( 'This is a fair girl')
ca173end
4.3 抽样定理和信号的降采样处理及仿真 4.3.1抽样定理
时域抽样定理说明:一个频域受限的信号f(t) 如果频谱只占据-w m ~w m 的范围,则信号f(t)可以用等间隔的抽样值唯一地表示。而间隔必须不大 或者说,最低抽样频率为2f(m)
4.3.2信号的降采样处理及仿真
代码实现:
function pushbutton13_Callback(hObject, eventdata, handles) % hObject handle to pushbutton13 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) s=str2double(get(handles.edit1,'String')); s=1/s;
m 12)
2(m)m f f ωπ=(其中