资源简介

函数可以作出时域波形图和频域频谱图,并且计算基因频率自动判断音频文件是男声还是女声声音。ds函数输入变量是文件名和降采样的间隔,通过插值的办法保证了原信号的长度,可以画出时域及频域图像,并且判断男女声,最后播放降采样之后的声音。新人第一次发资源,很简单,望支持,做的信号作业,和我一样的小白可以参考,大虾就不用看了。

资源截图

代码片段和文件信息

function ds(filer)

[yfs]=audioread(file);
y=y(:1);
yy=downsample(yr);     %降采样
t=interp(yyr);         %插值

n=0:length(t)-1;        %建立一个信号等长的序列
time=n/fs;              %建立时间序列,作为横坐标
subplot(211);         %图1:时域波形图
plot(timet);           %作图
title(‘音频信号波形图‘)  %标题
xlabel(‘时间/s‘);       %标注横坐标
ylabel(‘幅值‘);         %标注纵坐标
grid on;                %打开网格线
%=======频域图像======
N=length(t);            %取信号矩阵的长度
Y1=fft(tN);            %N点傅里叶变换
mag=abs(Y1);            %取模
f=n*fs/N;               %频率序列
subplot(212);         %图2:频谱图
           %取1/2作图
plot(f(1:fix(N/2))mag(1:fix(N/2)));
title(‘音频信号fft频谱图‘);%标题
xlabel(‘频率/Hz‘);       %标注横坐标
ylabel(‘幅度‘);          %标注纵坐标
grid on;                 %打开网格线
%======基因频率提取======
[~index]=max(t);
timewin=floor(0.015*fs);
xwin=t(index-timewin:index+timewin);
[y~]=xcov(xwin);
ylen=length(y);
halflen=(ylen+1)/2 +30;
yy=y(halflen: ylen);
[~maxindex] = max(yy);
fmax=fs/(maxindex+30);
disp([file‘基音频率为 ‘ num2str(fmax) ‘ Hz‘])
%======通过基因频率判断男女声======
if fmax<250;
    disp([file‘ 是男声文件‘]);
else
    disp([file‘ 是女声文件‘]);
end;
sound(tfs);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        1296  2015-05-24 13:59  ds.m
     文件        1294  2015-05-19 20:59  man_or_woman.m

评论

共有 条评论