您的位置:首页 > 编程语言 > MATLAB

MATLAB 数字滤波

2017-02-07 10:32 281 查看
数字滤波是常用的音频处理技术 

可根据技术指标,先利用 FDATool 工具

设计一个数字滤波器

再用 Filter 或 Filter2 函数即可实现滤波处理 

调用的 Filter 函数格式是 Y = filte (B,A,X) 其中 B 和 A 是滤波器传输函数的分子和分母系数 X 是输入变量 Y是实现滤波后的输出变量 

如果处理立体声音频信号,可分开处理,但用 FIR 滤波器时调用 Filter2 函数更方便

以012617137-scuba-diver-3.WAV 为例
实现数字滤波的程序如下

clear;
close all;
clc;
[X,FS]=audioread('012617137-scuba-diver-3.WAV'); % 将 WAV 文件转换成变量
%利用 FDATool 设计一个 LowpassButterworth 滤波器
%指标 FS=22050Hz Fp=1000Hz Ap=1dB Fs=3000Hz As=20dB
B =[0.0062,0.0187,0.0187,0.0062]; % 分子系数
A =[1,-2.1706,1.6517,-0.4312]; % 分母系数
Y=filter(B,A,X); % 实现数字滤波
t=(0:length(X)-1)/FS; % 计算数据时刻
subplot(2,2,1);plot(t,X); % 绘制原波形图
title(' 原信号波形图 '); % 加标题
subplot(2,2,3);plot(t,Y); % 绘制滤波波形图
title(' 滤波后波形图 '); % 加标题
xf=fft(X); % 作傅里叶变换求原频谱
yf=fft(Y); % 作傅里叶变换求滤波后频谱
fm=3000*length(xf)/FS; % 确定绘频谱图的上限频率
f=(0:fm)*FS/length(xf); % 确定绘频谱图的频率刻度
subplot(2,2,2);plot(f,abs(xf(1:length(f)))); % 绘制原波形频谱图
title(' 原信号频谱图 '); % 加标题
subplot(2,2,4);plot(f,abs(yf(1:length(f)))); % 绘制滤波后频谱图
title(' 滤波后信号频谱图 '); % 加标题
audiowrite('012617137-scuba-diver-3Filter.WAV',Y,FS); % 写成 WAV 文件


程序运行结果如图 1 所示 由图可知 滤波对波形影响不大

但对高频有较大衰减 试听会感觉到处理后的声音比较沉闷

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: