概述
以根据ellipord函数设计IIR低通滤波器为例,对一段添加了噪声的语音进行低通滤波:
clc,clear,close all
%%读取音频并进行频谱分析
[x0,fs]=audioread('test.wav'); %加载语音
[x1,fs1]=audioread('airplane.mp3'); %加载噪声音频
%下一步向语音中添加噪声,并自动对齐数组长度,向短对齐
x = x0(:,1) + x1(1:length(x0(:,1)),1); %len_x0 < len_x1
player = audioplayer(x,fs);
play(player)
x=x(:,1);
FS=length(x);
X=fft(x);
t=(0:FS-1)/fs;
figure(1)
subplot(2,1,1);plot(t,x);
title('原始语音信号时域波形');
xlabel('时间');
ylabel('赋值');
grid on;
subplot(2,1,2);plot(abs(X));
title('原始语音信号频谱');
xlabel('频率');
ylabel('幅度');
axis([0 1000000 0 8]);
grid on;
%%
%根据ellipord函数设计IIR低通滤波器
Fp=600; %截止频率,自定义设置
Fs=1200;
Ft=8000;
As=100;
Ap=1;
wp=2*pi*Fp/Ft;
ws=2*pi*Fs/Ft;
[n,wn]=ellipord(wp,ws,Ap,As,'s');
[b,a]=ellip(n,Ap,As,wn,'s');
[B,A]=bilinear(b,a,1);
[h,w]=freqz(B,A);
figure(2);
plot(w*Ft/pi/2,abs(h));
title('IIR低通滤波器');
xlabel('频率');
ylabel('幅度');
grid on;
%%
%利用IIR低通滤波器对音频进行低通滤波
% [x,fs]=audioread('airplane.mp3');
x=x(:,1);
Y=fft(x);
y=filter(B,A,x);
Y1=fft(y);
n=0:length(x)-1;
t=(0:FS-1)/fs;
figure(3);
subplot(3,1,1);plot(t,y);grid on;
title('IIR低通滤波器滤波后语音信号时域波形');
xlabel('时间');
ylabel('赋值');
subplot(3,1,2);plot(n,abs(Y));grid on;
title('滤波前语音信号频谱');
xlabel('频率');
ylabel('幅度');
subplot(3,1,3);plot(n,abs(Y1));grid on;
title('滤波后语音信号频谱');
xlabel('频率');
ylabel('幅度');
pause(5) %待原始音频播放完毕
player_LP = audioplayer(y,fs); %继续播放滤波后的语音
play(player_LP)
效果:
可以明显看出:经过低通滤波器后,设定截止频率以上的音频部分被滤除,实现了低通滤波效果。
参考来源:毛利工作室——Matlab:语音信号处理与滤波
最后
以上就是丰富手机为你收集整理的IIR数字滤波器设计_MATLAB语音滤波实验01的全部内容,希望文章能够帮你解决IIR数字滤波器设计_MATLAB语音滤波实验01所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复