基于MATLAB的加噪语音信号的滤波

2024-04-27 19:08

本文主要是介绍基于MATLAB的加噪语音信号的滤波,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MATLAB数字滤波器实现GUI界面设计

一.滤波器的简述

在MATLAB环境下IIR数字滤波器和FIR数字滤波器的设计方 法即实现方法,并进行图形用户界面设计,以显示所介绍迷你滤波器的设计特性。

在无线脉冲响应(IIR)数字滤波器设计中,先进行模拟滤波器的设计,然后进行模拟-数字滤波器转换,即采用脉冲响应不变法及双线性Z变化法设计数字滤波器,最后进行滤波器的频带转换。在有限脉冲响应(FIR)数字滤波器设计中,讨论了FIR线性相位滤波的特点和用窗口函数设计FIR数字滤波器两个问题。两类滤波器整个过程都是按照理论分析、编程设计、集体实现的步骤进行的。 为方便分析直观者直观、形象、方便的分析滤波器的特性,创新的设计出图形用户界面---滤波器分析系统。整个系统分为两个界面,其内容主要包括四个部分:System(系统)、Analysis(分析)、Tool(工具)、Help(帮助)。

数字滤波在DSP中占有重要地位。数字滤波器按实现的网络结构或者从单位脉冲响应,分为IIR(无限脉冲响应)和FIR(有限脉冲响应)滤波器。如果IRR滤波器和FIR滤波器具有相同的性能,那么通常IIR滤波器可以用较低的阶数获得高的选择性,执行速度更快,所有的存储单元更少,所以既经济又高效。

二.设计要求

1.在matlab平台上录制一段语音信号;

2.完成语音信号的谱分析;

3.对语音信号进行加噪以及加噪后信号的谱分析;

4.选择合适的滤波器进行滤波,确定相关指标;

5.实现滤波过程,显示滤波后的结果,并进行谱分析。

三.实验内容与步骤

  1. 语音信号的录入

打开matlab平台,先使用R=audiorecorder(44100,16,2)函数创建一个保存音频信息的对象,其中44100表示采样频率为44100Hz,16表示用16位存储,2表示两通道。再使用record(R)开始录音,对着电脑麦克风采集声音,录入的音频内容为“MATLAB的课程大作业”。stop(R)语句停止录入。然后将音频信息以数字矩阵存储。最后使用wavwrite函数保存这段音频。

原始语音

R=audiorecorder(44100,16,2);


v2-9d5be021baff16954e286bc2ddf78c57_b.jpg

record(R);

stop(R);

myword=getaudiodata(R);

plot(myspeech)

wavwrite(myspeech,44100,16,'myword');

程序图

波形图:

由输出的波形图可以看出,当采集“MATLAB的课程大作业”这句音频信息时,波动明显,但受到环境的影响其他地方也有轻微的波动。

  1. 语音信号的谱分析

wavread读取存储在电脑中的音频。suond函数回放语音信号,fft(y,n)则是对n点进行傅里叶变换,实现从时域到频域。然后用plot函数画出语音信号的时域波形和频域波形图。

 [y,fs,bits]=wavread('D:\Matalbe123\bin\souds.wav'); 
sound(y,fs);
n=length(y);
y_f=fft(y,n);
f=fs*(0:n/2-1)/n;
subplot 211;
plot(y);
xlabel('时间s');
ylabel('幅值 ');
title('加噪前的时域波形');
subplot 212;
plot(f,abs(y_f(1:n/2)));
xlabel('频率Hz');
ylabel('频率幅值');
title('加噪前的频谱图');
程序图:


v2-0cd377e7615b8a266bbe2252f0cecc6c_b.jpg

时域波形与频谱图如下:

由时域波形图可以看出声音信号主要集中在了2.5s~5.0s之间,在其他时间内只是有少量的波动。由频域波形图可以看出该声音信号的频率与人的发声频率相符合。

  1. 语音加噪及谱分析

对原始的语音信号进行加噪处理,使用randn函数产生一个与音频信号等长度的高斯随机噪声信号(噪声大小取决于随机函数的幅度倍数)。然后通过信号的叠加y_z=y+noise;,生成一个新的信号。再通过傅里叶变换得到信号在频域上的波形,最后画出时域与频域波形。

L=length(y);
noise=0.1*randn(L,2);
y_z=y+noise;
sound(y_z,fs);
n=length(y);
y_zf=fft(y_z,n);
f=(0:n/2-1)/n;
subplot 211;
plot(y_z);
xlabel('时间s');
ylabel('幅值');
title('加噪后的时域波形');
subplot 212;
plot(f,abs(y_zf(1:n/2)));
xlabel('频率Hz');
ylabel('频率幅值');
title('加噪后的频谱图');
程序图:

波形图如下:

当执行上述程序时,会听到嘈杂的声音层,且频率高于原始语音很多,由加噪后的频谱图与加噪前的频谱图相对比会明显发现在原时间内多了很多频率变化,观察到的频谱图变化与我们的目的是一致的,加噪成功。

  1. 滤波设计

由于噪声信号的频率高于原语音信号的频率,所以选择FIR低通滤波器。在数字信号处理中,脉冲响应不变法会产生频谱混叠现象,使频率响应偏离模拟滤波器的频响特性,为避免这一现象我们采用双线性变换法。经尝试fp=1000;fc=1200;As=100;Ap=1;

fp=1100;fc=1300;As=100;Ap=1;

fp=1300;fc=1500;As=100;Ap=1;

fp=1400;fc=1600;As=100;Ap=1;

fp=1500;fc=1700;As=100;Ap=1;

中效果最好的一组为:fp=1300;fc=1500;As=100;Ap=1;

因此设计如下:

fp=1300;fc=1500;As=100;Ap=1;

wc=2*pi*fc/fs;

wp=2*pi*fp/fs;

wdel=wc-wp;

beta=0.112*(As-8.7);

N=ceil((As-8)/2.285/wdel);

wn= kaiser(N+1,beta);

ws=(wp+wc)/2/pi;

b=fir1(N,ws,wn);

freqz(b,1);

程序图:

滤波器频率特性如图

  1. 滤波结果及谱分析

将加噪后音频通过此滤波器进行滤波,再进行滤波后去噪信号的谱分析,选用了函数x=fftfilt(b,y_z),利用FFT的重叠相加法对信号进行滤波处理。

滤波程序清单如下:

x=fftfilt(b,y_z);

X=fft(x,n);

subplot 211;

plot(f,abs(X(1:n/2)));

title('滤波后的频谱');

subplot 212;

plot(x);

title('滤波后的波形');

sound(x,fs,bits)

程序图:

v2-12c6a021680b707ce185ccdafcdc060f_b.jpg



v2-d37da759b056108375906a16e2d18840_b.jpg

去噪后的谱分析如下所示:

执行程序后听到的音频依旧含有噪音信号,不如原始语音清晰,但比加噪后的语音有了明显的改进,可以比较清晰的听到原语音。由谱分析图可以看出频率高于1500Hz的音频信号都被滤除了,开始有点接近原始信号的波形图.。

四.语音信号图


v2-e2fd516a0854148c3dab84417aa0dbea_b.jpg

原始语音


v2-2bf48bc395e55ab8c9154ee96025793c_b.jpg

加噪后


v2-d37da759b056108375906a16e2d18840_b.jpg

减噪后

  1. 实验总结与体会

这次是用Matlab对语音信号的处理进行了一系列的操作。在Matlab平台上实现了语音的录制、加噪、滤波以及谱分析。比较加噪后的频谱可以发现高于1500Hz的噪音已经滤除,通过声音的回放也可以发现去除了比较尖锐的干扰噪音。由于设计的滤波器程序功能单一,仅能处理一般条件下的语音信号,不能进行精度较高的语音信号处理。

Matlab是英文Matrix Laboratory(矩阵实验室)的缩写,它是由美国Math Word公司推出的用于图形处理和数值计算的数学计算。在Matlab环境下,用户可以集成的进行程序设计、图形绘制、数字值计算、输入输出文件管理等操作。MATLAB优秀的数值计算能力和卓越的数据可视化能力使其在同类软件中脱颖而出。

这篇关于基于MATLAB的加噪语音信号的滤波的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/941296

相关文章

使用Python实现文本转语音(TTS)并播放音频

《使用Python实现文本转语音(TTS)并播放音频》在开发涉及语音交互或需要语音提示的应用时,文本转语音(TTS)技术是一个非常实用的工具,下面我们来看看如何使用gTTS和playsound库将文本... 目录什么是 gTTS 和 playsound安装依赖库实现步骤 1. 导入库2. 定义文本和语言 3

讯飞webapi语音识别接口调用示例代码(python)

《讯飞webapi语音识别接口调用示例代码(python)》:本文主要介绍如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代... 目录前言一、环境二、引入库三、代码实例四、运行结果五、总结前言基于python3 讯飞webAPI语音

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

无线路由器哪个品牌好用信号强? 口碑最好的三个路由器大比拼

《无线路由器哪个品牌好用信号强?口碑最好的三个路由器大比拼》不同品牌在信号覆盖、稳定性和易用性等方面各有特色,如何在众多选择中找到最适合自己的那款无线路由器呢?今天推荐三款路由器让你的网速起飞... 今天我们来聊聊那些让网速飞起来的路由器。在这个信息爆炸的时代,一个好路由器简直就是家庭网编程络的心脏。无论你

电脑显示hdmi无信号怎么办? 电脑显示器无信号的终极解决指南

《电脑显示hdmi无信号怎么办?电脑显示器无信号的终极解决指南》HDMI无信号的问题却让人头疼不已,遇到这种情况该怎么办?针对这种情况,我们可以采取一系列步骤来逐一排查并解决问题,以下是详细的方法... 无论你是试图为笔记本电脑设置多个显示器还是使用外部显示器,都可能会弹出“无HDMI信号”错误。此消息可能

Open3D 基于法线的双边滤波

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 输入参数: 输出参数: 参数影响: 2.2完整代码 三、实现效果 3.1原始点云 3.2滤波后点云 Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客 一、概述         基于法线的双边

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

6.4双边滤波

目录 实验原理 示例代码1 运行结果1 实验代码2 运行结果2 实验原理 双边滤波(Bilateral Filtering)是一种非线性滤波技术,用于图像处理中去除噪声,同时保留边缘和细节。这种滤波器结合了空间邻近性和像素值相似性的双重加权,从而能够在去噪(平滑图像)的同时保留图像的边缘细节。双边滤波器能够在的同时,保持边缘清晰,因此非常适合用于去除噪声和保持图像特征。在Op

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时