当前位置 : 主页 > 编程语言 > python >

【滤波器】基于iir带阻滤波器实现信号去噪含Matlab源码

来源:互联网 收集:自由互联 发布时间:2022-06-18
1 简介 滤波降噪技术在现代产业发展中扮演着重要的地位,MATLAB软件则为数字滤波器的设计提供便捷的平台.为了滤除语音信号中夹杂的高频噪声成分,利用MATLAB仿真软件设计一个数字IIR低

1 简介

滤波降噪技术在现代产业发展中扮演着重要的地位,MATLAB软件则为数字滤波器的设计提供便捷的平台.为了滤除语音信号中夹杂的高频噪声成分,利用MATLAB仿真软件设计一个数字IIR低通滤波器.用MATLAB对加噪语音信号进行滤波,通过对比滤波前后语音信号的时域波形和频谱来检验该滤波器的滤波效果.实验结果表明,该滤波器对高频噪声信号有很好的滤波效果.

2 完整代码

%% P2_2_1 语音信号采样,画出时域和频域的图
[y,fs] = audioread('myname.wav');% y为采样数据;fs为采样频率
sound(y,fs); % 播放语言信号myname
N = length(y); % 信号的长度
t = (0:N-1)/fs; % 时域范围
figure(1);subplot(211);plot(t,y); title('音频时域图');%音频信号时域图
xlabel('Time');ylabel('Amplitude');
Y = fft(y,N); % FFT分析频谱
df = fs/length(Y); % 计算谱线间隔
f = 0:df:(fs/2-df); % 频谱范围,截取前半段(抽样频率高于最大频率的2倍)
Yf = abs(Y); % 幅度响应
Yf = Yf(1:length(Yf)/2);% 由于幅度响应是偶函数,所以截取一半
% 画图
figure(1);
subplot(212);axis([0,fs/5,0,5000]);plot(f,Yf);title('音频频谱图');
%% P2_2_2 加入噪声之后的时域和频域图
y = y(:,1); y = y';
nt = randn(1,length(y)); % 生成高斯噪声
%设计BPF得到4KHZ到5KHZ的噪音
fp1 = 4000;fp2 = 5000; % BPF指标
WP1 = 2*pi*fp1/fs;WP2 = 2*pi*fp2/fs;% 将模拟指标转换为数字指标
wn1 = [WP1 WP2];
b = fir1(34,wn1,'bandpass');
yn = filter(b,1,nt); % 噪声的信号
s = y+yn; % 将带限噪音和原来的音频混合
%sound(s,fs);
S = fft(s,N);
Sf = abs(S); % 幅度
DF = fs/length(S); % 计算谱线间隔
f = 0:DF:(fs/2-DF); % 频谱范围,截取前半段(抽样频率高于最大频率的2倍)
Sf = Sf(1:length(Sf)/2); % 由于幅度响应是偶函数,所以截取一半
% 画图
figure(2);
subplot(211);plot(t,s); title('加入噪声的音频时域图');
xlabel('Time');ylabel('Amplitude');grid on;
subplot(212);axis([0,fs/5,0,10000]);plot(f,Sf);title('加入噪声的音频频谱图');
xlabel('Frequency');ylabel('Amplitude');grid on;
%% P2_2_3 设计滤波器,并滤波
%设计带阻滤波器滤除噪声
FP1 = 3500;FS1 = 3600;FP2 = 5600;FS2 = 5500;
rp2 = 1;rs2 = 40;
FP = [FP1 FP2];FS = [FS1 FS2];
wp = 2*pi*FP/fs; % 将模拟指标转换为数字指标
ws = 2*pi*FS/fs; % 用切比雪夫IIR滤波器
[n,wn] = cheb1ord(wp,ws,rp2,rs2); % 滤波器的最小阶数为n,wn为系统频带
[bz,az] = cheby1(n,rp2,wp,'stop');
yfilt = filter(bz,az,s); % 将加噪的信号通过带阻滤波器进行滤波
sound(yfilt,fs); % 播放滤波后的语音信号
Yfil = abs(fft(yfilt,N));
Yf = Yfil(1:length(Yfil)/2);
% 画图
figure(3);
subplot(211);plot(t,yfilt);title('去噪时域图');
subplot(212);axis([0,fs/5,0,10000]);plot(f,Yf);title('去噪频域图');

3 运行结果

【滤波器】基于iir带阻滤波器实现信号去噪含Matlab源码_频域

【滤波器】基于iir带阻滤波器实现信号去噪含Matlab源码_语音信号_02

【滤波器】基于iir带阻滤波器实现信号去噪含Matlab源码_频域_03

4 参考文献

[1]黄晓珊, 徐国保. 基于MATLAB语音降噪IIR滤波器的设计[J]. 现代计算机(专业版), 2016(22):48-52.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

【滤波器】基于iir带阻滤波器实现信号去噪含Matlab源码_时域_04



网友评论