语音信号的数字滤波
一、实验目的:
1、掌握使用FFT 进行信号谱分析的方法
2、设计数字滤波器对指定的语音信号进行滤波处理
二、实验内容
设计数字滤波器滤除语音信号中的干扰(4 学时)
1、使用Matlab 的fft 函数对语音信号进行频谱分析,找出干扰信号的频谱;
2、设计数字滤波器滤除语音信号中的干扰分量,并进行播放对比。
三、实验原理
通过观察原语音信号的频谱,幅值特别大的地方即为噪声频谱分量,根据对称性,发现有四个频率的正弦波干扰,将它们分别滤掉即可。采用梳状滤波器,经过计算可知,梳状滤波器h[n]={1,A ,1}的频响|H(w)|=|A+2cos(w)|,由需要滤掉的频率分量的频响w, 即可得到A ,进而得到滤波器的系统函数h[n]。而由于是在离散频域内进行滤波,所以令w=(2k*pi/N)即可。
对原信号和四次滤波后的信号分别进行FFT 变换,可以得到它们的幅度相应。最后,将四次滤波后的声音信号输出。
四、matlab 代码
clc;clear;close all;
[audio_data,fs]=wavread('SunshineSquare.wav'); %读取未处理声音 sound(audio_data,fs);
N = length(audio_data);
K = 0:2/N:2*(N-1)/N; %K为频率采样点 %sound(audio_data,fs);
%进行一次FFT 变换
FFT_audio_data=fft(audio_data);
mag_FFT_audio_data = abs(FFT_audio_data);
%画图
figure(1)
%原信号时域
subplot(2,1,1);plot(audio_data);grid;
title('未滤波时原信号时域');xlabel('以1/fs为单位的时间');ylabel('采样值'); %FFT幅度相位
subplot(2,1,2);plot(K,mag_FFT_audio_data);grid;
title('原信号幅度');xlabel('以pi 为单位的频率');ylabel('幅度');
%构造h[n]={1,A ,1}的梳状滤波器,计算A=2cosW,妻子W 为要滤掉的频率 %由原信号频谱可知要分四次滤波,滤掉频响中幅度大的频率分量
%第一次滤波
a = [1,0,0,0];%y[n]的系数
[temp,k]=max(FFT_audio_data);
A1=-2*cos(2*pi*k/N);
h1=[1,A1,1];
audio_data_h1 = filter(h1,a,audio_data);
FFT_audio_data_h1=fft(audio_data_h1);
%第二次滤波
[temp1,k]=max(FFT_audio_data_h1);
A2=-2*cos(2*pi*k/N);
h2=[1,A2,1];
audio_data_h2 = filter(h2,a,audio_data_h1);
FFT_audio_data_h2=fft(audio_data_h2);
%第三次滤波
[temp2,k]=max(FFT_audio_data_h2);
A3=-2*cos(2*pi*k/N);
h3=[1,A3,1];
audio_data_h3 = filter(h3,a,audio_data_h2);
FFT_audio_data_h3=fft(audio_data_h3);
%第四次滤波
[temp3,k]=max(FFT_audio_data_h3);
A4=-2*cos(2*pi*k/N);
h4=[1,A4,1];
audio_data_h4 = filter(h4,a,audio_data_h3);
FFT_audio_data_h4=fft(audio_data_h4);
mag_FFT_audio_data_h1 = abs(FFT_audio_data_h1);
mag_FFT_audio_data_h2 =abs(FFT_audio_data_h2);
mag_FFT_audio_data_h3 =abs(FFT_audio_data_h3);
mag_FFT_audio_data_h4 =abs(FFT_audio_data_h4);
figure(2)
%每次滤波后的时域结果
subplot(2,2,1);plot(audio_data_h1);grid;
title('第一次滤波后');xlabel('以1/fs为单位的时间');ylabel('时域采样值');
subplot(2,2,2);plot(audio_data_h2);grid;
title('第二次滤波后');xlabel('以1/fs为单位的时间');ylabel('时域采样值');
subplot(2,2,3);plot(audio_data_h3);grid;
title('第三次滤波后');xlabel('以1/fs为单位的时间');ylabel('时域采样值'); subplot(2,2,4);plot(audio_data_h4);grid;
title('第四次滤波后');xlabel('以1/fs为单位的时间');ylabel('时域采样值');
%每次滤波后的频域结果
figure(3)
subplot(2,2,1);plot(K,mag_FFT_audio_data_h1);grid;
title('第一次滤波幅度');xlabel('以pi 为单位的频率');ylabel('幅度');
subplot(2,2,2);plot(K,mag_FFT_audio_data_h2);grid;
title('第二次滤波幅度');xlabel('以pi 为单位的频率');ylabel('幅度');
subplot(2,2,3);plot(K,mag_FFT_audio_data_h3);grid;
title('第三次滤波幅度');xlabel('以pi 为单位的频率');ylabel('幅度');
subplot(2,2,4);plot(K,mag_FFT_audio_data_h4);grid;
title('第四次滤波幅度');xlabel('以pi 为单位的频率');ylabel('幅度');
%输出音乐文件
wavwrite(audio_data_h4,fs,'SunshineSquare_LG.wav');
五、实验结果
原信号的时域和频域图
滤波后的时域图
滤波后的频响
六、总结
通过这次实验,对数字信号的频谱分析和滤波的含义有了更深的了解,以及更加形象具体的认识。一开始遇到的困难是不知道如何寻找噪音的频率,后来发现频响中幅度大的点对应的w 即为噪音频率。
语音信号的数字滤波
一、实验目的:
1、掌握使用FFT 进行信号谱分析的方法
2、设计数字滤波器对指定的语音信号进行滤波处理
二、实验内容
设计数字滤波器滤除语音信号中的干扰(4 学时)
1、使用Matlab 的fft 函数对语音信号进行频谱分析,找出干扰信号的频谱;
2、设计数字滤波器滤除语音信号中的干扰分量,并进行播放对比。
三、实验原理
通过观察原语音信号的频谱,幅值特别大的地方即为噪声频谱分量,根据对称性,发现有四个频率的正弦波干扰,将它们分别滤掉即可。采用梳状滤波器,经过计算可知,梳状滤波器h[n]={1,A ,1}的频响|H(w)|=|A+2cos(w)|,由需要滤掉的频率分量的频响w, 即可得到A ,进而得到滤波器的系统函数h[n]。而由于是在离散频域内进行滤波,所以令w=(2k*pi/N)即可。
对原信号和四次滤波后的信号分别进行FFT 变换,可以得到它们的幅度相应。最后,将四次滤波后的声音信号输出。
四、matlab 代码
clc;clear;close all;
[audio_data,fs]=wavread('SunshineSquare.wav'); %读取未处理声音 sound(audio_data,fs);
N = length(audio_data);
K = 0:2/N:2*(N-1)/N; %K为频率采样点 %sound(audio_data,fs);
%进行一次FFT 变换
FFT_audio_data=fft(audio_data);
mag_FFT_audio_data = abs(FFT_audio_data);
%画图
figure(1)
%原信号时域
subplot(2,1,1);plot(audio_data);grid;
title('未滤波时原信号时域');xlabel('以1/fs为单位的时间');ylabel('采样值'); %FFT幅度相位
subplot(2,1,2);plot(K,mag_FFT_audio_data);grid;
title('原信号幅度');xlabel('以pi 为单位的频率');ylabel('幅度');
%构造h[n]={1,A ,1}的梳状滤波器,计算A=2cosW,妻子W 为要滤掉的频率 %由原信号频谱可知要分四次滤波,滤掉频响中幅度大的频率分量
%第一次滤波
a = [1,0,0,0];%y[n]的系数
[temp,k]=max(FFT_audio_data);
A1=-2*cos(2*pi*k/N);
h1=[1,A1,1];
audio_data_h1 = filter(h1,a,audio_data);
FFT_audio_data_h1=fft(audio_data_h1);
%第二次滤波
[temp1,k]=max(FFT_audio_data_h1);
A2=-2*cos(2*pi*k/N);
h2=[1,A2,1];
audio_data_h2 = filter(h2,a,audio_data_h1);
FFT_audio_data_h2=fft(audio_data_h2);
%第三次滤波
[temp2,k]=max(FFT_audio_data_h2);
A3=-2*cos(2*pi*k/N);
h3=[1,A3,1];
audio_data_h3 = filter(h3,a,audio_data_h2);
FFT_audio_data_h3=fft(audio_data_h3);
%第四次滤波
[temp3,k]=max(FFT_audio_data_h3);
A4=-2*cos(2*pi*k/N);
h4=[1,A4,1];
audio_data_h4 = filter(h4,a,audio_data_h3);
FFT_audio_data_h4=fft(audio_data_h4);
mag_FFT_audio_data_h1 = abs(FFT_audio_data_h1);
mag_FFT_audio_data_h2 =abs(FFT_audio_data_h2);
mag_FFT_audio_data_h3 =abs(FFT_audio_data_h3);
mag_FFT_audio_data_h4 =abs(FFT_audio_data_h4);
figure(2)
%每次滤波后的时域结果
subplot(2,2,1);plot(audio_data_h1);grid;
title('第一次滤波后');xlabel('以1/fs为单位的时间');ylabel('时域采样值');
subplot(2,2,2);plot(audio_data_h2);grid;
title('第二次滤波后');xlabel('以1/fs为单位的时间');ylabel('时域采样值');
subplot(2,2,3);plot(audio_data_h3);grid;
title('第三次滤波后');xlabel('以1/fs为单位的时间');ylabel('时域采样值'); subplot(2,2,4);plot(audio_data_h4);grid;
title('第四次滤波后');xlabel('以1/fs为单位的时间');ylabel('时域采样值');
%每次滤波后的频域结果
figure(3)
subplot(2,2,1);plot(K,mag_FFT_audio_data_h1);grid;
title('第一次滤波幅度');xlabel('以pi 为单位的频率');ylabel('幅度');
subplot(2,2,2);plot(K,mag_FFT_audio_data_h2);grid;
title('第二次滤波幅度');xlabel('以pi 为单位的频率');ylabel('幅度');
subplot(2,2,3);plot(K,mag_FFT_audio_data_h3);grid;
title('第三次滤波幅度');xlabel('以pi 为单位的频率');ylabel('幅度');
subplot(2,2,4);plot(K,mag_FFT_audio_data_h4);grid;
title('第四次滤波幅度');xlabel('以pi 为单位的频率');ylabel('幅度');
%输出音乐文件
wavwrite(audio_data_h4,fs,'SunshineSquare_LG.wav');
五、实验结果
原信号的时域和频域图
滤波后的时域图
滤波后的频响
六、总结
通过这次实验,对数字信号的频谱分析和滤波的含义有了更深的了解,以及更加形象具体的认识。一开始遇到的困难是不知道如何寻找噪音的频率,后来发现频响中幅度大的点对应的w 即为噪音频率。