news 2026/6/9 19:57:42

打开Matlab先给自己整杯咖啡,咱们今天要玩点有意思的语音信号处理。先从硬盘里拽个wav文件进来,我习惯用audioread直接怼

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
打开Matlab先给自己整杯咖啡,咱们今天要玩点有意思的语音信号处理。先从硬盘里拽个wav文件进来,我习惯用audioread直接怼

Matlab语音信号去噪程序,使用低通巴特沃斯滤波器。 1、读取一段歌曲的信号,绘制时域频域图,并播放。 2、添加正弦噪声; 3、设计巴特沃斯低通滤波器; 4、使用滤波器去除噪声,并画出时域频域图,播放,与原始信对比,发现去噪效果很好; 5、对信号添加高斯白噪声; 6、去除高斯白噪声,并播放,发现去噪效果还可以,但不如正弦噪声去噪效果好(这是肯定的,因为高斯白噪声是随机噪声,不可能完全去除的)。 注:另自己按公式编写了DFT与IDFT函数,与Matlab自带fft函数运行结果一样。

[raw, fs] = audioread('周杰伦_晴天.wav'); soundsc(raw(1:fs*3,1), fs); % 播放前3秒单声道 t = (0:length(raw)-1)/fs; subplot(211); plot(t, raw); title('原唱时域:杰伦在唱歌');

这时候频谱图必须安排上,但咱不用现成的fft,自己写的DFT函数得拿出来秀。注意看这个三重循环,虽然效率被Matlab自带的fft吊打,但自己写的用着就是爽:

function X = myDFT(x) N = length(x); X = zeros(1,N); for k = 0:N-1 for n = 0:N-1 X(k+1) = X(k+1) + x(n+1)*exp(-1j*2*pi*k*n/N); end end end

频谱画出来长这样:

freq = linspace(0, fs, length(raw)); raw_fft = myDFT(raw(:,1)); subplot(212); plot(freq, abs(raw_fft)); title('杰伦歌声的频谱,高频在抖腿');

接下来搞事情——加个800Hz的正弦噪声。注意这里的相位随机扰动,纯属防止波形太完美:

noise = 0.3*sin(2*pi*800*t' + randn*pi); noisy_sig = raw(:,1) + noise(1:length(raw)); soundsc(noisy_sig, fs); % 能听到持续蜂鸣声

该巴特沃斯出场了!设计个6阶低通,截止频率设500Hz比较稳妥。看这个butter函数的返回值,直接搞出传输函数的分子分母:

order = 6; cutoff = 500/(fs/2); [b,a] = butter(order, cutoff, 'low'); filtered_sig = filtfilt(b, a, noisy_sig);

滤波后频谱明显看到800Hz那个刺头被削了。但别急,先检查群延迟——用filtfilt搞零相位滤波才是正确姿势,不然音乐变鬼畜就翻车了。

Matlab语音信号去噪程序,使用低通巴特沃斯滤波器。 1、读取一段歌曲的信号,绘制时域频域图,并播放。 2、添加正弦噪声; 3、设计巴特沃斯低通滤波器; 4、使用滤波器去除噪声,并画出时域频域图,播放,与原始信对比,发现去噪效果很好; 5、对信号添加高斯白噪声; 6、去除高斯白噪声,并播放,发现去噪效果还可以,但不如正弦噪声去噪效果好(这是肯定的,因为高斯白噪声是随机噪声,不可能完全去除的)。 注:另自己按公式编写了DFT与IDFT函数,与Matlab自带fft函数运行结果一样。

到高斯白噪声环节得换打法,这里直接randn伺候:

gauss_noise = 0.2*randn(size(raw(:,1))); gauss_sig = raw(:,1) + gauss_noise;

这时候低通滤波器有点力不从心了,毕竟白噪声全频段搞事情。不过还是能救回点人声:

gauss_filtered = filtfilt(b,a,gauss_sig); soundsc(gauss_filtered, fs); % 能听但带点闷罐声

最后验证自写IDFT的正确性,拿滤波后的信号反向操作:

recovered = real(myIDFT(myDFT(filtered_sig))); err = max(abs(recovered - filtered_sig)); % 误差小于1e-10稳了

实测发现正弦噪声消除效果堪比降噪耳机,但高斯噪声就像雨天擦玻璃——总有点糊。不过自己从头撸DFT的过程倒是治好了我的代码洁癖,原来矩阵运算还能这么暴力美学。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/7 21:47:33

实战笔记】手把手拆解S7-200交通灯控制(附梯形图骚操作)

No.865 基于S7-200 PLC和组态王智能交通灯控制系统 带解释的梯形图程序,接线图原理图图纸,io分配,组态画面 最近在厂里折腾老设备改造,拿S7-200 PLC搞了个十字路口交通灯控制系统。这玩意儿看着简单,实际调试时红绿灯…

作者头像 李华
网站建设 2026/6/7 6:03:06

信息抽取新选择:SiameseUIE模型在云实例上的实战体验

信息抽取新选择:SiameseUIE模型在云实例上的实战体验 在受限云环境中部署信息抽取模型,常常面临系统盘空间紧张、PyTorch版本锁定、依赖冲突频发等现实困境。本文带你亲历 SiameseUIE 模型在真实云实例上的开箱即用过程——无需安装、不改环境、不占空间…

作者头像 李华
网站建设 2026/6/7 6:03:04

Local SDXL-Turbo应用案例:IP形象设计中服装/配饰元素实时替换

Local SDXL-Turbo应用案例:IP形象设计中服装/配饰元素实时替换 1. 为什么IP设计师需要“秒级换装”能力 你有没有遇到过这样的场景:客户发来一张IP形象线稿,要求在2小时内提供5套不同风格的服装方案——赛博风夹克、国潮刺绣T恤、复古针织开…

作者头像 李华
网站建设 2026/6/7 6:03:02

QLDependency:青龙面板依赖管理的革命性解决方案

QLDependency:青龙面板依赖管理的革命性解决方案 【免费下载链接】QLDependency 青龙面板全依赖一键安装脚本 / Qinglong Pannel Dependency Install Scripts. 项目地址: https://gitcode.com/gh_mirrors/ql/QLDependency 你是否也曾在深夜对着青龙面板的&qu…

作者头像 李华
网站建设 2026/6/7 6:02:59

Qwen2.5-7B部署慢?量化+镜像双优化提速指南

Qwen2.5-7B部署慢?量化镜像双优化提速指南 你是不是也遇到过这样的情况:下载完 Qwen2.5-7B-Instruct,兴冲冲想跑起来,结果发现—— 模型加载要3分钟,首 token 延迟2秒多,生成速度卡在30 tokens/s&#xff…

作者头像 李华
网站建设 2026/6/6 10:25:00

Maya-glTF插件全流程实战指南:从基础配置到跨平台协作

Maya-glTF插件全流程实战指南:从基础配置到跨平台协作 【免费下载链接】maya-glTF glTF 2.0 exporter for Autodesk Maya 项目地址: https://gitcode.com/gh_mirrors/ma/maya-glTF 3D模型转换是连接设计与开发的关键环节,maya-glTF插件作为Autode…

作者头像 李华