MFCC

来源:互联网 发布:mac有没有抢网速的软件 编辑:程序博客网 时间:2024/06/05 15:49

下面内容是当时的实验报告,用word写的。所以直接截图当时的内容,主要是做个记录而已。






matlab代码如下:

clear;clc;close all;z=[];z1=[];%语音采集 r=audiorecorder(16000,16,1);record(r);%开始录音but_stop=input('input 1 to stop record:');if but_stop == 1    stop(r);%停止录音endmyspeech = getaudiodata(r);%获取声音% wavwrite(myspeech,16000,16,'sound');%保存声音% myspeech=wavread('sound');%读取wav文件figure;plot(myspeech);title('语音');size_wave=size(myspeech,1);%预加重spreemp(1)=myspeech(1);for i=2:size_wave    spreemp(i)=myspeech(i)-0.95*myspeech(i-1);endfigure;plot(spreemp);title('预加重');%计算帧数numFrame=ceil((size_wave-400)/250)+1;%400 是每帧的长度,250是分帧间隔%hamming窗for i=1:400    hammwin(i)=0.54-0.46*cos(2*pi*i/(400-1));end%帧操作for i=1:numFrame    %加窗&&补零    shift=(i-1)*250;    for j=1:512        if shift+j > size_wave break;        end        if j <= 400 addwin(j)=hammwin(j)*spreemp(shift+j);        else addwin(j)=0;        end    end    if i==12        figure;        plot(1:512,addwin);          title('加窗');    end    %fft&&功率谱    FFT=fft(addwin);%这个函数有自带补零,不过我们还是自己手动补零了      if i==12        figure;        plot(1:512,abs(FFT));          title('FFT');    end       FFT_power=abs(FFT).*abs(FFT);   FFT_power(1:256)=FFT_power(256+1:512);   FFT_power(257:512)=0;    if i==12        figure;      plot(FFT_power);         title('功率谱');    end    %mel谱    fg=16000/2; %最大的语音频率    maxmelFreq=1125*log(1+fg/700);%最大的mel频率    sideWidth=maxmelFreq/(40+1);%Mel滤波器宽度    for k=1:40+2        tmp=700*(exp((k-1)*sideWidth/1125)-1);        melFilter(k)=ceil((256+1)*tmp/16000);    end%得到mel三角滤波器%     disp(i);%     disp(melFilter);    mel=zeros(1,40);    for k=1:40        for j=1:256            if j>= melFilter(k) && j <= melFilter(k+1)                mel(k)=mel(k)+(j-melFilter(k))/(melFilter(k+1)-melFilter(k))*FFT_power(j);            elseif j> melFilter(k+1) && j <= melFilter(k+2)                mel(k)=mel(k)+(melFilter(k+2)-j)/(melFilter(k+2)-melFilter(k+1))*FFT_power(j);            end        end    end%通过三角滤波器后的输出    if i==12        figure;        plot(mel);          title('梅尔谱');    end    if i==12        figure;        plot(log(mel));          title('对数梅尔谱');    end    %DCT    melRec=zeros(1,13);    for k=1:13        for j=1:40            melRec(k)=melRec(k)+log(mel(j))*cos(pi*k*(j-0.5)/40);        end    end    if i==12        figure;        stem(melRec);          title('倒梅尔谱');    end    %将所有帧的倒谱向量保存起来    melRec=abs(melRec);    z1=[z1;melRec];end    figure    imagesc(z1');    colorbar;    title('倒梅尔谱(未归一化)');        %归一化    avg=mean(z1,1);%每一维的均值    devia=std(z1,1,2);%每一维的标准差    for i=1:13        z(:,i)=(z1(:,i)-avg(i))/devia(i);    end        figure;    imagesc(z');    colorbar;    title('倒梅尔谱(归一化)');    %axis([0 600 0 13]);

0 0
原创粉丝点击