⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jin.m

📁 录制一段个人自己的语音信号
💻 M
字号:
%---First Step---%

%---------------------------利用函数wavread对语音信号的采集--------------------------------%
close all;
i=1;
[x,fs,bits]=wavread('my voice.wav');   %,x:语音数据;fs:采样频率;bits:采样点数
sound(x,fs,bits);                      %话音回放
N=length(x);
n=0:N-1;
figure(i);
plot(n,x);                             %画出原始语音信号的波形
xlabel('n');
ylabel('x(n)');
title('原始语音信号');

%---Second Step---%

%----------------------------语音信号的FFT频谱分析-------------------------%
f=fft(x,N);            %对语音号进行快速傅里叶变换,得出频谱
i=i+1;
figure(i);
plot(abs(n),abs(f));     
xlabel('k');
ylabel('|y(k)|');
title('FFT后的波形');

%---Third Step---%

%----------------用kaiser窗函数法设计FIR数字滤波器---------------------%
p=1;
while(p);
temp=menu('请选择FIR滤波器的类型','LowPass','HighPass','BandPass');
i=i+1;
figure(i);
switch(temp)
    
                              case 1 
%--------------------------设计FIRLowPass--------------------------------%

Wp=2*pi*1000/fs;                       %通带频率数字指标
Ws=2*pi*1200/fs;                       %阻带频率数字指标
w1=Ws-Wp;                              %过渡带宽
N2=ceil((100-7.95)/(2.286*w1));        %求出FIR滤波器的阶数  ceil:朝正无穷方向舍入 
beita=0.1102*(100-8.7);                %由阻带最小衰减指标确定形状参数beita
wn1=(Ws+Wp)/2;                         %理想截止频率
k=fir1(N2,wn1/pi,kaiser(N2+1,10.056)); %使用标准频率响应的加窗设计函数fir1设计LowPass滤波器
[H,f]=freqz(k,1,512,fs);               %求出数字滤波器频率响应
plot(f,20*log10(abs(H)));              %FIR低通滤波器衰减特性
xlabel('频率/Hz');
ylabel('振幅/dB');
grid on;
axis([0,5000,-200,10]);
title('FIR低通滤波器衰减特性');

%----------滤波前后波形比较--------------------------------%
i=i+1;
figure(i);
z=fftfilt(k,x);                  %利用函数fftfilt对信号进行滤波
subplot(2,2,1);
plot(n,x);                       %画出原语音信号的波形
xlabel('n');
ylabel('x(n)');
title('原始语音信号');
subplot(2,2,3);
plot(n,z);                       %FIRLowPass后的波形
title('FIRLowPass后的波形');
%-----------滤波前后语音信号频谱---------------------
subplot(2,2,2);
[H,f]=freqz(x,1,512,fs);        
plot(f,20*log10(abs(H)));          %滤波前语音信号频谱
xlabel('频率/Hz');
ylabel('振幅/dB');
title('FIRLowPass前语音信号频谱');
grid on;
subplot(2,2,4);
[H,f]=freqz(z,1,512,fs);
plot(f,20*log10(abs(H)));          %滤波后语音信号频谱
xlabel('频率/Hz');
ylabel('振幅/dB');
title('FIRLowPass后语音信号频谱');
grid on;
sound(z,fs,bits);                  %播放滤波后的语音 


                                case 2
%----------------------------设计FIRHighPass----------------------------%

Wp=2*pi*4800/fs;                                  %通带频率数字指标
Ws=2*pi*5000/fs;                                  %阻带频率数字指标
Wdelta=Ws-Wp;                                     %过渡带宽
Wc=(Wp+Ws)/2;                                     %理想截止频率
N1=12.8*pi/Wdelta;                                %求出FIR滤波器的阶数
N3=ceil(N1);                                      %N3朝N1正无穷方向舍入 
d=fir1(N3,Wc/pi,'high',kaiser(N3+1,10.056));      %使用标准频率响应的加窗设计函数fir1设计HighPass滤波器
[H,f]=freqz(d,1,512,fs);                          %求出数字滤波器频率响应
 plot(f,20*log10(abs(H)));                        %画出FIRHighPass衰减特性
 xlabel('频率/Hz');
 ylabel('振幅/dB');
 grid on;
 axis([2000,8000,-180,20]);
 title('FIRHighPass器衰减特性');   
  
%----------滤波前后波形比较----------------------
i=i+1;
figure(i);
z=fftfilt(d,x);                  %利用函数fftfilt对信号进行滤波
subplot(2,2,1);
plot(n,x);                       %画出原语音信号的波形
xlabel('n');
ylabel('x(n)');
title('原始语音信号');
subplot(2,2,3);
plot(n,z);                       %FIRHighPass后的波形
title('FIRHighPass后的波形');
%-----------滤波前后语音信号频谱---------------------%

subplot(2,2,2);
[H,f]=freqz(x,1,512,fs);        
plot(f,20*log10(abs(H)));         %滤波前语音信号频谱
xlabel('频率/Hz');
ylabel('振幅/dB');
title('FIRHighPass前语音信号频谱');
grid on;
subplot(2,2,4);
[H,f]=freqz(z,1,512,fs);
plot(f,20*log10(abs(H)));          %滤波后语音信号频谱
xlabel('频率/Hz');
ylabel('振幅/dB');
title('FIRHighPass后语音信号频谱');
grid on;
sound(z,fs,bits); 


                                  case 3
%-----------------------------设计FIRBandPass----------------------------------%
      

 wp1=2*pi*1000/fs;                         %通带频率数字指标
 ws1=2*pi*1200/fs;                         %阻带频率数字指标
 wp2=2*pi*3000/fs;
 ws2=2*pi*3200/fs;
 wc1=(wp1+ws1)/2;                          %理想截止频率
 wc2=(wp2+ws2)/2;
 wc=[wc1,wc2];
 Wdelta=ws1-wp1;                           %过渡带宽
 N2=12.8*pi/Wdelta;
 N3=ceil(N2);
 k=fir1(N3,wc/pi,kaiser(N3+1,10.056));
 z=fftfilt(k,x);
 [H,f]=freqz(k,1,512,fs);
  plot(f,20*log10(abs(H)));                %画出FIR带通滤波器衰减特性
  xlabel('频率/Hz');
  ylabel('振幅/dB');
  grid on;
  axis([0,5000,-180,20]);
  title('FIR带通滤波器衰减特性');
  
%----------滤波前后波形比较----------------------%
i=i+1;
figure(i);
z=fftfilt(k,x);
subplot(2,2,1);
plot(n,x);                       %画出原语音信号的波形
xlabel('n');
ylabel('x(n)');
title('原始语音信号');
subplot(2,2,3);
plot(n,z);                       %FIR带通滤波后的波形
title('FIRBandPass后的波形');

%-----------滤波前后语音信号频谱---------------------%

subplot(2,2,2);
[H,f]=freqz(x,1,512,fs);        
plot(f,20*log10(abs(H)));         %滤波前语音信号频谱
xlabel('频率/Hz');
ylabel('振幅/dB');
title('FIRBandPass前语音信号频谱');
grid on;
subplot(2,2,4);
[H,f]=freqz(z,1,512,fs);
plot(f,20*log10(abs(H)));          %滤波后语音信号频谱
xlabel('频率/Hz');
ylabel('振幅/dB');
title('FIRBandPass后语音信号频谱');
grid on;
sound(z,fs,bits);
    
       end
       p=menu('Do you want To Continue?','Yes','No');
       if p==2
           p=0;
       end
   end 
   
%---Third Step---%  
 
%-------------------------------------设计IIR数字滤波器--------------------------------------%
p=1;
while(p)
  i=i+1;
  figure(i);
  temp=menu('请选择IIR滤波器的类型','LowPass','HighPass','BandPass');
  switch(temp)
      
      
                               case 1
%-----------------------------设计LowPass----------------------------------%
wp=2*pi*1000/fs;
ws=2*pi*1200/fs;
Rp=1;
Rs=100;
Ts=1/fs;
Wp=2/Ts*tan(wp/2);Ws=2/Ts*tan(ws/2);             %按频率转换公式进行转换
[N,Wn]=ellipord(Wp,Ws,Rp,Rs,'s');                %计算模拟滤波器的最小阶数
[z,p,k]=ellipap(N,Rp,Rs);                        %设计模拟原型滤波器
[Bap,Aap]=zp2tf(z,p,k);                          %零点极点增益形式转换为传递函数形式
[b,a]=lp2lp(Bap,Aap,Wn);                         %低通转换为低通滤波器的频率转化
[bz,az]=bilinear(b,a,fs);                        %运用双线性变换法得到数字滤波器传递函数
[H,f]=freqz(bz,az,512,fs);
plot(f,20*log10(abs(H)));
axis([0,5000,-150,10]);
title('N=10 频率响应');                          %画出LowPass的幅频和相频特性
 grid on;
 
%----------滤波前后波形比较----------------------
i=i+1;
figure(i);
y=filter(bz,az,x);
subplot(2,2,1);
plot(n,x);                       %画出原语音信号的波形
xlabel('n');
ylabel('x(n)');
title('原始语音信号');
subplot(2,2,3);
plot(n,y);                       %IIRLowPass后的波形
title('IIRLowPass后的波形');

%-----------滤波前后语音信号频谱---------------------


subplot(2,2,2);
[H,f]=freqz(x,1,512,fs);        
plot(f,20*log10(abs(H)));         %滤波前语音信号频谱
xlabel('频率/Hz');
ylabel('振幅/dB');
title('IIR低通滤波前语音信号频谱');
grid on;
subplot(2,2,4);
[H,f]=freqz(y,1,512,fs);
plot(f,20*log10(abs(H)));          %滤波后语音信号频谱
xlabel('频率/Hz');
ylabel('振幅/dB');
title('IIR低通滤波后语音信号频谱');
grid on;
sound(y,fs,bits);   
 
 
     case 2
         
%--------------------------设计HighPass-------------------------------%
fs1=60000;                         %信号重采样
x1=resample(x,fs1,fs); 
N2=length(x1);
n1=0:N2-1;  
Rp=1;
Rs=100;
fb=5000;fc=4800;
fn=fs1/2;
bishape=inline('2*fs*tan(f*2*pi/2/fs)/2/pi','f','fs');
[m,wn]=ellipord(fb ,fc ,1,100,'s');
[b,a]=ellip(m,1,100,bishape(fb,fs1)*2*pi,'high','s');      %椭圆模拟高通滤波
[bz,az]=bilinear(b,a,fs1);                                 %双线性模拟到数字变换
[H,f]=freqz(bz,az,512,fs1);
plot(f,20*log10(abs(H)));
axis([0,10000,-150,10]);
xlabel('频率/Hz');ylabel('振幅/dB');
title('IIR高通滤波器衰减特性');
grid on; 


%----------滤波前后波形比较----------------------
i=i+1;
figure(i);
y=filter(bz,az,x1);
subplot(2,2,1);
plot(n1,x1);                       %画出原语音信号的波形
xlabel('n');
ylabel('x(n)');
title('原始语音信号');
subplot(2,2,3);
plot(n1,y);                       %IIR高通滤波后的波形
title('IIRHighPass后的波形');
%-----------滤波前后语音信号频谱---------------------

subplot(2,2,2);
[H,f]=freqz(x1,1,512,fs1);        
plot(f,20*log10(abs(H)));         %滤波前语音信号频谱
xlabel('频率/Hz');
ylabel('振幅/dB');
title('IIRHighPass前语音信号频谱');
grid on;
subplot(2,2,4);
[H,f]=freqz(y,1,512,fs1);
plot(f,20*log10(abs(H)));          %滤波后语音信号频谱
xlabel('频率/Hz');
ylabel('振幅/dB');
title('IIRHighPass后语音信号频谱');
grid on;
sound(y,fs1,bits);   

     case 3
%--------------------------设计BandPass-----------------------------------%
fs1=8000;
x1=resample(x,fs1,fs); 
N2=length(x1);
n1=0:N2-1;  
fc=[1000 3200];
fb=[1200 3000];
fn=fs/2;
bishape=inline('2*fs*tan(f*2*pi/2/fs)/2/pi','f','fs');
[N,wn]=ellipord(fb ,fc ,1,100,'s');
[b,a]=ellip(N,1,100,bishape(fb,fs1)*2*pi,'s');      %模拟带通滤波
[bz,az]=bilinear(b,a,fs1);                          %双线性模拟到数字变换
[H,f]=freqz(bz,az,512,fs1);
plot(f,20*log10(abs(H)));
axis([0,6000,-150,10]);
xlabel('频率/Hz');ylabel('振幅/dB');
title('IIR带通滤波器衰减特性');
grid on; 
   
%----------滤波前后波形比较----------------------
i=i+1;
figure(i);
y=filter(bz,az,x1);
subplot(2,2,1);
plot(n1,x1);                       %画出原语音信号的波形
xlabel('n');
ylabel('x(n)');
title('原始语音信号');
subplot(2,2,3);
plot(n1,y);                       %IIR带通滤波后的波形
title('IIRBandPass后的波形');
%-----------滤波前后语音信号频谱---------------------

subplot(2,2,2);
[H,f]=freqz(x1,1,512,fs1);        
plot(f,20*log10(abs(H)));         %滤波前语音信号频谱
xlabel('频率/Hz');
ylabel('振幅/dB');
title('IIRBandPass前语音信号频谱');
grid on;
subplot(2,2,4);
[H,f]=freqz(y,1,512,fs1);
plot(f,20*log10(abs(H)));          %滤波后语音信号频谱
xlabel('频率/Hz');
ylabel('振幅/dB');
title('IIRBandPass后语音信号频谱');
grid on;
sound(y,fs,bits);   
  end                          
  p=menu('Do you want To Continue?','Yes','No');
       if p==2
          p=0;
       end  
   
end
temp=menu('Do you want to close all windows','Yes','No');
    if temp==1
        close all
    end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -