当前位置: 首页 > news >正文

Matlab语音信号去噪GUI:实现正弦噪声与高斯噪声的滤波处理,巴特沃斯低通与小波变换去噪功能

Matlab语音信号去噪,GUI界面。 分别添加了正弦噪声和高斯噪声,分别用了巴特沃斯低通滤波器和小波分解去噪。 每步处理都可以播放出信号声音。 具体工作如下: 1、加载语音信号,显示时域频域图; 2、添加正弦噪声; 3、分别使用巴特沃斯低通和小波变换去噪; 4、添加高斯白噪声; 5、再次使用巴特沃斯低通和小波变换去噪。 注:程序可直接运行,建议Matlab 2022b版本,低版本估计2018以上也行~也可发给你非GUI版本的代码。

最近在Matlab里折腾语音去噪挺有意思的,特别是用GUI实现实时播放功能。直接上硬货,先看效果:加载一段语音后能直接看到波形和频谱,点个按钮就能听到加噪前后的对比,两种去噪方案切换着玩,属实是声控玩家的快乐源泉。

先看核心代码结构:

function voice_denoise_gui app = figure('Position',[200 200 800 600]); % 界面控件:6个按钮+4个坐标轴 uicontrol('Style','pushbutton','String','加载语音','Position',[20 550 80 30],'Callback',@loadAudio); % ...其他按钮和坐标轴初始化代码... function loadAudio(~,~) [file,path] = uigetfile('*.wav'); [app.audio, app.fs] = audioread(fullfile(path,file)); % 绘制原始信号时域频域图 plot(app.audio_ax1, app.audio); fft_plot(app.audio, app.fs, app.audio_ax2); end end

这个GUI框架用figure直接搭建,比App Designer更轻量。重点在audioread加载音频后立刻绘制时域波形,fft_plot自定义函数里用了fft做快速傅里叶变换,记得加汉宁窗避免频谱泄露。

加正弦噪声的部分很暴力:

% 生成指定频率的正弦干扰 t = (0:length(app.audio)-1)/app.fs; noise = 0.3*sin(2*pi*3000*t)'; % 3kHz正弦波 app.noisy_audio = app.audio + noise; sound(app.noisy_audio, app.fs); % 实时播放

这里注意时间序列t要和原信号对齐,振幅0.3是经验值,太大会失真太小没效果。播放直接用sound函数,简单粗暴。

Matlab语音信号去噪,GUI界面。 分别添加了正弦噪声和高斯噪声,分别用了巴特沃斯低通滤波器和小波分解去噪。 每步处理都可以播放出信号声音。 具体工作如下: 1、加载语音信号,显示时域频域图; 2、添加正弦噪声; 3、分别使用巴特沃斯低通和小波变换去噪; 4、添加高斯白噪声; 5、再次使用巴特沃斯低通和小波变换去噪。 注:程序可直接运行,建议Matlab 2022b版本,低版本估计2018以上也行~也可发给你非GUI版本的代码。

巴特沃斯滤波的关键在阶数和截止频率:

function butter_denoise(app) [b,a] = butter(6, 2000/(app.fs/2), 'low'); % 6阶低通 filtered = filtfilt(b, a, app.noisy_audio); % 零相位滤波避免时移 end

butter(6,...)表示6阶滤波器,2000Hz截止频率。filtfilt正反双向滤波消除相位失真,实测比普通filter效果好很多。

小波去噪玩的是阈值艺术:

function wavelet_denoise(app) [thr,sorh] = ddencmp('den','wv',app.noisy_audio); cleaned = wdencmp('gbl',app.noisy_audio,'db4',5,thr,sorh); end

ddencmp自动计算阈值,'db4'小波基做5层分解。实际测试发现高频噪声被干掉的同时,语音中的爆破音(比如/p/、/t/)保留得比滤波器好。

当换成高斯白噪声时,巴特沃斯的表现就拉胯了——频谱上全是噪声根本切不掉。这时候小波的层级分解优势就出来了,通过调整各尺度系数保留语音特征。不过要注意小波去噪容易产生伪吉布斯现象,听着会有轻微回声感。

最后说个坑:GUI里连续播放音频前务必加clear sound,不然多个音频混在一起能让你怀疑人生。完整代码大概200行左右,核心逻辑就这些。想要非GUI版本的话其实更简单,把回调函数里的处理逻辑抽出来写成脚本就行。

http://www.jsqmd.com/news/477946/

相关文章:

  • NVMe1.4 Admin Command解析:Format与Identify的LBA格式与安全擦除机制
  • 雷达图像分辨率不够糊成一团?Music算法直接给你整出高清无码!这玩意儿在阵列信号处理里原本用来估计波达方向,但用在雷达成像上简直就是物理外挂
  • MacOS 15+环境下iVerilog与GtkWAVE的集成与实战
  • COMSOL波在可变折射率光纤中的传播
  • Qwen2.5-VL-7B-Instruct部署教程:Ubuntu 22.04 + NVIDIA驱动 + CUDA 12.1兼容配置
  • 彻底卸载OpenClaw(小龙虾)保姆级教程|无残留、保安全
  • 八大排序算法与 Java 代码实现
  • 我用一台 Windows 笔记本,把 OpenClaw 跑起来了(小白可复现)
  • WVP-PRO流媒体服务:无人观看场景下的智能流生命周期管理
  • 研究flow3d模拟选区激光熔化Inconel 718制件内部缺陷的形成机理,优化工艺参数,从...
  • 150+数字人形象免费选!lite-avatar形象库快速部署与使用全攻略
  • Java String 类笔记
  • STM32F103+ESP8266 AP模式实战:TCP/UDP通信与网络调试全流程解析
  • 2.0 ARP欺骗攻击(基础版)
  • CosyVoice2-0.5B声音克隆效果展示:四川话/英文/日文多语种真实案例集
  • 【C++】STL详解(三)—vector使用手册:不看你会后悔
  • Hibernate与JPA方言配置:跨数据库开发的统一接口
  • 分布式事务解决方案全景指南:2PC、TCC、SAGA 与 Seata 实战
  • 【Windows】Dify + Ollama/Xinference/GPUStack:一站式AI开发环境搭建指南
  • 硬件设计之电源反接防护:从基础二极管到高效MOS管的选型实战
  • 跨微服务的“数据孤岛”解法:利用声明式 API 构建去中心化的数据联邦
  • SecGPT-14B步骤详解:Chainlit前端对接vLLM服务全流程
  • 从零到精通:UNIX BENCH性能基准测试全流程实战
  • 深入解析HDMI中的EDID与E-EDID:从基础结构到实际应用
  • StructBERT中文句子相似度WebUI实战手册:Websocket实时结果推送实验
  • 01-SA8155P 冷启动EDL模式硬件配置与常见问题解析
  • 泰山派嵌入式Linux驱动开发基础入门篇
  • L2-006 数的遍历(递归经典 ,图论 )
  • Phi-3-Mini-128K部署优化:bfloat16 vs float16显存与推理速度实测对比
  • Qwen3-TTS问题解决:常见部署错误排查,快速搞定语音合成