基于MATLAB的有噪声语音信号处理
为了验证滤波器的可使用性,我们用常用的sin函数来进行验证。其具体程序及运行结果如下:
t=[0:1/1023:1];
s=sin(2*pi*t);
N=length(s);
y=s+0.5*rand(1,N);
subplot(2,1,1);
plot(y);
title('加噪语音信号的时域波形','fontweight','bold');
S=fft(y);
subplot(2,1,2);
plot(abs(S));
title('加噪语音信号的频域波形','fontweight','bold');
Ft=8000;
Fp=1000;
Fs=1200;
wp=2*pi*Fp/Ft;
ws=2*pi*Fs/Ft;
[n11,wn11]=buttord(wp,ws,1,50,'s'); %求低通滤波器的阶数和截止频率
[b11,a11]=butter(n11,wn11,'s'); %求S域的频率响应的参数
[num11,den11]=bilinear(b11,a11,0.5); %利用双线性变换实现频率响应S域到Z域的变换
z11=filter(num11,den11,s);
sound(z11);
m11=fft(z11); %求滤波后的信号
figure;
subplot(2,2,1);
plot(abs(S),'g');
title('滤波前信号的频谱','fontweight','bold');
grid;
subplot(2,2,2);
plot(abs(m11),'r');
title('滤波后信号的频谱','fontweight','bold');
grid;
subplot(2,2,3);
plot(y);
title('滤波前信号的波形','fontweight','bold');
grid;
subplot(2,2,4);
plot(z11);
title('滤波后的信号波形','fontweight','bold');
grid;
用自己设计的各滤波器分别对加噪的语音信号进行滤波,在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。
函数fftfilt用的是重叠相加法实现线性卷积的计算。调用:y=fftfilter(h,x,M)。其中,h是系统单位冲击响应向量;x是输入序列向量;y是系统的输出序列向量;M是有用户选择的输入序列的分段长度,缺省时,默认的输入向量的重长度M=512。
函数filter的调用格式:yn=filter(B,A.xn),它是按照直线型结构实现对xn的滤波。其中xn是输入信号向量,yn输出信号向量。
由于所设计的滤波器有六个,故我们需要进行六次滤波,然后比较得出哪种滤波器的效果最好。下面我们以IIR低通为例:
[y,fs,nbits]=wavread (‘OriSound’); %IIR低通
n = length (y) ; %求出语音信号的长度
Noise=0.2*randn(n,2); %随机函数产生噪声
s=y+Noise; %语音信号加入噪声
S=fft(s);
Ft=8000;
Fp=1000;
Fs=1200;
wp=2*pi*Fp/Ft;
ws=2*pi*Fs/Ft;
[n11,wn11]=buttord(wp,ws,1,50,’s’);%求低通滤波器的阶数和截止频率
[b11,a11]=butter(n11,wn11,’s’); %求S域的频率响应的参数
[num11,den11]=bilinear(b11,a11,0.5); %利用双线性变换实现频率响应S域到Z域的变换
z11=filter(num11,den11,s);
sound(z11);
m11=fft(z11); %求滤波后的信号
figure;
subplot(2,2,1);
plot(abs(S),’g’);
title(‘滤波前信号的频谱’,’fontweight’,’bold’);
axis([ 0 150000 0 4000]);
grid;
subplot(2,2,2);
plot(abs(m11),’r’);
title(‘滤波后信号的频谱’,’fontweight’,’bold’);
axis([ 0 150000 0 4000]);
grid;
subplot(2,2,3);
plot(s);
title(‘滤波前信号的波形’,’fontweight’,’bold’);
axis([95000 100000 -1 1]);
grid;
subplot(2,2,4);
plot(z11);
title(‘滤波后的信号波形’,’fontweight’,’bold’);
axis([95000 100000 -1 1]);
grid;
程序结果如下图:
图 4-2 IIR低通滤波器
经过以上的加噪处理后,可在Matlab中用函数sound对声音进行回放。其调用格式:sound(y,Fs),sound(y)和sound(y,Fs,bits)。可以察觉滤波前后的声音有明显的变化。比较后可得;低通效果较好,高通其次,带通最差。对原始语音信号具体程序及运行结果如附录(II) 比较滤波前后语音信号的波形及频谱
相关文章
- 基于Affine-SURF-GTM的图像配准算法研究和matlab仿真
- 【Visual-Hull + Bregman】基于Visual-Hull + Bregman算法的三维重建算法matlab仿真
- 【MATLAB教程案例98】基于混沌序列的图像加解密matlab仿真,并进行各类攻击测试
- 【MATLAB教程案例96】基于GA优化的WSN最大覆盖率和最少节点部署数量matlab仿真
- 【MATLAB教程案例94】基于Matlab的IHS图像融合算法仿真案例
- 【MATLAB教程案例79】基于移动节点WSN的最短路由matlab仿真——应用于车组网或无人机组网等
- 【MATLAB教程案例47】基于双目相机拍摄图像的三维重建matlab仿真
- 【MATLAB教程案例45】基于双目视觉的图像深度信息提取算法matlab仿真
- 【MATLAB教程案例24】基于matlab的有参图像质量评价仿真与分析,包括MSE,PSNR,NK,AD,SC,MD,NAE
- 【MATLAB教程案例14】基于ACO蚁群优化算法的函数极值计算matlab仿真及其他应用
- 【MATLAB教程案例1~10总结】通信类matlab仿真经验和技巧总结
- 基于BP神经网络的调制方式识别算法MATLAB仿真,识别不同SNR下的MFSK和MPSK
- 基于matlab的costas锁相环仿真
- 基于GA优化的OSPF协议网络路由matlab仿真
- 使用Field_II_ver_3_24_windows_gcc工具箱实现超声波数据成像matlab仿真
- 【ACF和AMDF】基于ACF和AMDF合作算法的语音编码matlab仿真
- 【GA,WSN覆盖】基于遗传优化的无线传感器网络覆盖问题的matlab仿真
- 【PSO运输优化】基于MATLAB的PSO运输优化算法的仿真
- 【频谱共享】基于认知无线电的VCG拍卖机制频谱共享算法的MATLAB仿真
- 基于MATLAB的小波去噪
- 基于matlab编程卡尔曼滤波跟踪目标实例源码
- 基于MATLAB语音分析处理系统
- MATLAB安装机器人工具箱 Matlab_Robotic_Toolbox_v10.2
- 《数字图像处理与机器视觉——Visual C++与Matlab实现》——1.1 Matlab操作简介
- 基于 MATLAB SVM 方法对数字进行分类训练和预测【100010771】