数字信号升采样

前言

虽然Audition等音频处理工具现在可以轻松实现音频信号的升降采样操作,但还是想亲手操作一下才能更深刻地体会其原理。

理论部分数字信号处理书上写得很清楚,假如要升采样N倍,那就在原始信号每两个点之间补N-1零,原本有a个点的信号补零后变成了N*a个点,最后过一个低通滤波器就可以了。假如我们手中有一个采样率是8kHz的信号,根据采样定理信号中最大的频率成分应该是4kHz,无论对其升采样多少倍,信号中最大的频率成分依旧是4kHz。用8k采样频率打开原始信号,和用升采样后相应的采样频率打开升采样后的信号,听起来应该是一模一样的,所以低通滤波的截止频率定为原信号的采样频率的一半。
采样频率为8kHz的音频
对上个音频升采样所得音频
可以看到,fs=8kHz升采样两倍到fs=16kHz,但4kHz以上的语谱图漆黑一片,因为低通滤波器滤掉了4kHz以上的频率成分。而4kHz以下的部分和原始信号完全一致,听起来也毫无差异。

现在我们对一个fs=8kHz的信号升采样两倍到fs=16kHz。

一、操作步骤

1.设计低通滤波器

用matlab的filterDesigner(老版本叫fdatool)功能设计一个低通滤波器。
在这里插入图片描述

响应类型选择低通,设计方法选择FIR滤波器,采样频率为16000Hz,通常滤波器的边缘无法做到极为锋利,所以会让出一定频率。通带频率定为3800Hz,阻带频率定为4000Hz(事实证明让通带阻带截止频率相等会报错),阻带衰减设为60dB其他参数默认即可。设计好的低通滤波器为158阶。之后点击目标——生成C文件——导出为双精度浮点数。这时就已经成功导出我们需要的低通滤波器的参数啦。

在这里插入图片描述
得到的参数如下:

const int BL = 159;
const real64_T B[159] = {
   
   0.001896059819653,  0.00820094837682,  0.01314470859597,  0.01066527577552,
  0.0009246408389606,-0.005814546012738,-0.002930262262176, 0.003349544159389,
   0.003146652916839, -0.00209518582678, -0.00309180989114, 0.001386488161517,
   0.003041700406133,-0.0009218026015368, -0.00304631268199,0.0005614333728956,
   0.003100614445479,-0.000237163275515,-0.003190847597665,-8.734993325528e-05,
   0.003304776236801, 0.000438069901197,-0.003423584634794,-0.0008263738009497,
   0.003529681299126, 0.001253489063053,-0.003613907436449,-0.001721095555101,
   0.003669424233881,  0.00223419572336
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值