当前位置:文档之家› 基于matlab的语音信号处理程序

基于matlab的语音信号处理程序

wavefile='a.wav';
[y,fs,nbits]=wavread(wavefile);%读取信号,采样率和采样位数[10000,19999] sound(y,fs,nbits)
fs %采样频率这里每秒22050,发现采样频率为音频信号的典型值22050Hz nbits
Y=fft(y,1024);%数据点数
whos y
figure(1),
subplot(2,1,1),plot(y);title('原始信号波形');grid on
subplot(2,1,2),plot(abs(Y));title('原始信号频谱'); grid on%横坐标频率,纵坐标振幅%subplot(3,1,3),plot(angle(Y));title('原始信号相位');grid on
%双线性变换法设计的低通滤波器
fp=1000;%fp为通带频率
fc=1200;%fc为阻带起始频率
As=100;%As-阻带最小衰减(dB);
Ap=1;%Ap-通带波纹(dB);
fs1=fs;
wp=2*fp/fs1;%wp-椭圆滤波器通带截止角频率;
wc=2*fc/fs1;%Ws-椭圆滤波器阻带起始角频率;
[n,wn]=ellipord(wp,wc,Ap,As);
%n-椭圆滤波器最小阶数;
[b,a]=ellip(n,Ap,As,wn);%返回长度为n+1的滤波器系数行向量b和a, b为分子a 为分母
figure(2),freqz(b,a,512,fs1); %数字滤波器的频率响应函数,512表示选取单位圆的上半圆等间距的N个点作为频响输出;
x=filter(b,a,y);%一维数字滤波器,y2为滤波前输入,x为滤波结果序列
X=fft(x,1024);
figure(3),
subplot(2,1,1),plot(x);title('低通滤波后信号波形');grid on
subplot(2,1,2),plot(abs(X));title('低通滤波后信号频谱');grid on
sound(x,fs);
%分析图形,比较滤波前后时域波形和频域频谱。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %短时能量
y=y*2^nbits/2;
frameSize=256;
overlap=128;
%[y,fs,nbits]=wavReadInt(wavefile);
fprintf('length of %s is %g sec.\n',wavefile,length(y)/fs);
frameMat=buffer(y,frameSize,overlap);
frameNum=size(frameMat,2)
volume1=zeros(frameNum,1);
%volume2=zeros(frameNum,1);
for i=1:frameNum
frame=frameMat(:,i);
frame=frame-mean(frame);
volume1(i)=sum(abs(frame));
% volume2(i)=10*log10(sum(frame.^2));
end
time=(1:length(y))/fs;
frameTime=((0:frameNum-1)*(frameSize-overlap)+0.5*frameSize)/fs;
figure(4),plot(frameTime,volume1);ylabel('volume(Abs.sum)');title('短时能量')
%figure,plot(frameTime,volume2,'.-');ylabel('V olume(Decibels)');
xlabel('Time(sec)'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 短时过零率
overlap2=0;
frameMat2=buffer(y,frameSize,overlap);
%zcr1=sum(frameMat(1:end-1,:).*frameMat(2:end,:)<0);
zcr2=sum(frameMat(1:end-1,:).*frameMat(2:end,:)<=0);
time=(1:length(y))/fs;
frameNum=size(frameMat,2);
frameTime=((0:frameNum-1)*(frameSize-overlap)+0.5*frameSize)/fs;
%figure,plot(frameTime,zcr1,frameTime,zcr2);
%title('ZCR');xlabel('Time(sec)');legend('Method 1','Method 2');
figure(5),plot(frameTime,zcr2);
title('过零率');xlabel('Time(sec)');。

相关主题