osr matlab,MATLAB 数字滤波

数字滤波是常用的音频处理技术

可根据技术指标,先利用 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所示 由图可知 滤波对波形影响不大

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

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB CIC(Cascade Integrator-Comb)滤波器是一种数字滤波器,可用于降低信号的采样率并减小信号中的噪声。它的工作原理是将一个级联的积分器和组合器组合在一起,以实现信号的滤波。 具体来说,CIC滤波器首先通过级联的积分器对输入信号进行积分,然后将结果通过组合器进行组合。在这个过程中,由于积分器的特性,CIC滤波器可以在不使用乘法器的情况下有效地降低采样率,从而减小计算量并降低功耗。 在MATLAB中,可以使用`cicdecim`函数创建CIC降采样滤波器。该函数的语法如下: ``` Hd = cicdecim(R,M,N,OSR) ``` 其中,`R`是CIC滤波器的积分器阶数,`M`是组合器阶数,`N`是CIC滤波器的差分延迟线数,`OSR`是过采样比率。函数返回一个CIC滤波器对象`Hd`,可以将其作为参数传递给`filter`函数来对输入信号进行滤波和降采样。 例如,以下代码演示了如何使用MATLAB创建一个CIC滤波器对象,并将其应用于输入信号进行滤波和降采样: ``` % 创建CIC滤波器对象 R = 2; M = 1; N = 4; OSR = 16; Hd = cicdecim(R, M, N, OSR); % 生成输入信号 fs = 1000; % 采样率 t = 0:1/fs:1; x = cos(2*pi*100*t) + cos(2*pi*200*t); % 对输入信号进行滤波和降采样 y = filter(Hd, x); % 绘制输入和输出信号 figure; subplot(2, 1, 1); plot(t, x); xlabel('Time (s)'); ylabel('Amplitude'); title('Input Signal'); subplot(2, 1, 2); t2 = 0:OSR/fs:length(y)/fs-1/fs/OSR; plot(t2, y); xlabel('Time (s)'); ylabel('Amplitude'); title('Filtered and Decimated Signal'); ``` 希望这可以帮助您开始使用MATLAB中的CIC滤波器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值