您的位置:首页 > 汽车 > 时评 > 安徽省建设工程_佛山小程序开发制作_关键词优化师_地推怎么做最有效

安徽省建设工程_佛山小程序开发制作_关键词优化师_地推怎么做最有效

2025/3/29 19:59:13 来源:https://blog.csdn.net/2401_85464956/article/details/143871544  浏览:    关键词:安徽省建设工程_佛山小程序开发制作_关键词优化师_地推怎么做最有效
安徽省建设工程_佛山小程序开发制作_关键词优化师_地推怎么做最有效

文章目录

  • 前言
  • 1.外观设计
    • 1.1 组件布局
    • 1.2 修改组件标签
  • 2.代码部分设计
    • 2.1成员变量
      • 2.1.1组件成员变量
      • 2.1.2自定义成员变量
    • 2.2 回调函数
      • 2.2.1 导入音频
      • 2.2.2 加噪处理
      • 2.2.3 播放音频
    • 2.3滤波器设计
    • 2.4信噪比
  • 3.完整版功能展示
  • 结语

前言

在实际应用中,语音信号往往会受到各种噪声的干扰,这会影响语音的质量和可懂度。因此,语音信号去噪是一个重要的研究领域。本篇博客主要介绍了基于matlab开发的语音去噪系统的设计,包含了巴特沃斯滤波器、切比雪夫II型滤波器、卡尔曼滤波器、维纳滤波器四种滤波器对加噪信号的处理,通过对比信噪比和频谱图来衡量去噪效果。

1.外观设计

本篇博客基于App Designer 开发的语音信号去噪系统。
App Designer 是 MATLAB 中用于创建图形用户界面(GUI)应用程序的一个集成开发环境(IDE),它提供了一种直观且高效的方式来设计、开发和部署具有交互功能的 MATLAB 应用程序。

1.1 组件布局

直接从组件库将需要的组件拖拽到设计视图即可,调整一下大小即可

1.2 修改组件标签

直接在坐标去修改标签即可,也可在设计视图直接修改,当然也可以在回调中修改,为了更好的初始化app,所以不建议在回调中改标签
在这里插入图片描述

2.代码部分设计

因为matlab支持面向对象编程思想,同时本身App Designer是一个类,回调函数就是类中的方法(函数),所以此处通过成员变量(属性)回调函数两部分介绍。

2.1成员变量

2.1.1组件成员变量

这部分是根据组件选择,自动导入的,不需要自行定义

    % Properties that correspond to app componentsproperties (Access = public)UIFigure             matlab.ui.FigureButton_5             matlab.ui.control.ButtonButton_4             matlab.ui.control.ButtonButton_3             matlab.ui.control.ButtonButtonGroup_2        matlab.ui.container.ButtonGroupButton_2             matlab.ui.control.RadioButtonButton               matlab.ui.control.RadioButtonSNREditField_2       matlab.ui.control.NumericEditFieldSNREditField_2Label  matlab.ui.control.LabelSNREditField         matlab.ui.control.NumericEditFieldSNREditFieldLabel    matlab.ui.control.LabelButtonGroup          matlab.ui.container.ButtonGroupsharewavButton       matlab.ui.control.RadioButtontestwavButton        matlab.ui.control.RadioButtonEditField_4          matlab.ui.control.NumericEditFieldEditField_4Label     matlab.ui.control.LabelEditField_3          matlab.ui.control.NumericEditFieldEditField_3Label     matlab.ui.control.LabelEditField_2          matlab.ui.control.NumericEditFieldEditField_2Label     matlab.ui.control.LabelEditField            matlab.ui.control.NumericEditFieldLabel_2              matlab.ui.control.LabelDropDown             matlab.ui.control.DropDownLabel                matlab.ui.control.LabelImage                matlab.ui.control.ImageUIAxes               matlab.ui.control.UIAxesUIAxes_8             matlab.ui.control.UIAxesUIAxes_7             matlab.ui.control.UIAxesUIAxes_6             matlab.ui.control.UIAxesUIAxes_5             matlab.ui.control.UIAxesUIAxes_4             matlab.ui.control.UIAxesend% Public properties that correspond to the Simulink modelproperties (Access = public, Transient)Simulation simulink.Simulationend

2.1.2自定义成员变量

为了方便起见,此处自定义了以下成员变量

properties (Access = private)% 原始信号时域序列y_origin% 原始信号频域序列Y_origin% 抽样频率Fs% 加噪后的时域序列y_with_noise% 加噪后的频域序列Y_with_noise% 降噪后的时域序列y_noise_redude% 降噪后的频域序列Y_noise_redude% 将横坐标转换成单位秒t% 抽样周期Tend

关于成员变量是私有还是公共,都可以,个人建议私有属性

2.2 回调函数

回调函数设计很具个性化,可以根据自己的需要在各种组件的回调中设计,本篇博客提供一种设计方案,并不是最好的或者最佳的。

2.2.1 导入音频

音频加载,此处选用单选按钮组件中设计回调函数,如图所示
在这里插入图片描述
此处回调代码部分:

function ButtonGroupSelectionChanged(app, event)selectedButton = app.ButtonGroup.SelectedObject;% selectedButton.Textapp.init(selectedButton.Text);plot(app.UIAxes,app.t,app.y_origin)app.UIAxes.YLim=[-1 1];plot(app.UIAxes_4,(1:length(app.Y_origin))*2/length(app.Y_origin),abs(app.Y_origin))app.UIAxes_4.YLim=[0 800];app.ButtonGroup_2SelectionChanged();end

注:在此处我们定义了额外的app.init(selectedButton.Text);,用来在坐标区显示相应的频域与时域图,可以自行完善

2.2.2 加噪处理

此处提供了两种噪声,高斯全频噪声高斯高频噪声,选用单选按钮组件中设计回调函数

% Selection changed function: ButtonGroup_2function ButtonGroup_2SelectionChanged(app, event)selectedButton = app.ButtonGroup_2.SelectedObject;switch selectedButton.Textcase '高斯全频'% 加入高斯白噪声,即加噪后的序列y1app.y_with_noise=app.y_origin+0.2*rand(size(app.y_origin))-0.1;app.Y_with_noise=fft(app.y_with_noise);case '高斯高频'% 高斯白噪声noise=0.2*rand(size(app.y_origin));% 设计高通滤波器Fs2 = 44100;  % Sampling FrequencyFstop = 9600;            % Stopband FrequencyFpass = 12000;           % Passband FrequencyDstop = 0.0001;          % Stopband AttenuationDpass = 0.057501127785;  % Passband Rippledens  = 20;              % Density Factor% Calculate the order from the parameters using FIRPMORD.[N, Fo, Ao, W] = firpmord([Fstop, Fpass]/(Fs2/2), [0 1], [Dstop, Dpass]);% Calculate the coefficients using the FIRPM function.b  = firpm(N, Fo, Ao, W, {dens});Hd = dfilt.dffir(b);hpf=filter(Hd,noise);app.y_with_noise=app.y_origin+hpf;app.Y_with_noise=fft(app.y_with_noise);endplot(app.UIAxes_5,app.t,app.y_with_noise)app.UIAxes_5.YLim=[-1 1];plot(app.UIAxes_7,(1:length(app.Y_with_noise))*2/length(app.Y_with_noise),abs(app.Y_with_noise))app.UIAxes_7.YLim=[0 800];end

也可以相应在坐标区显示对应的的频域与时域图,可自行完善

2.2.3 播放音频

此处设计了三个状态按钮,分别用来播放原声、加噪后的声音、降噪后的声音
回调函数:

% Button pushed function: Button_3function Button_3Pushed(app, event)sound(app.y_origin,app.Fs)end% Button pushed function: Button_4function Button_4Pushed(app, event)sound(app.y_with_noise,app.Fs)end% Button pushed function: Button_5function Button_5Pushed(app, event)sound(app.y_noise_redude,app.Fs)end

2.3滤波器设计

此处我们在下拉框中设计的回调函数,提供了四种滤波器,滤波器具体实现代码可以自行设计,也可以选择其他滤波器,这里只提供框架

        function DropDownValueChanged(app, event)value = app.DropDown.Value;switch valuecase "巴特沃斯低通"app.EditField.Visible="on";app.EditField_2.Visible="on";app.EditField_3.Visible="on";app.EditField_4.Visible="on";% 具体代码实现方式app.calculate_snr();case "切比雪夫低通"app.EditField.Visible="on";app.EditField_2.Visible="on";app.EditField_3.Visible="on";app.EditField_4.Visible="on";% 具体代码实现方式app.calculate_snr();case "维纳滤波"app.EditField.Visible="off";app.EditField_2.Visible="off";app.EditField_3.Visible="off";app.EditField_4.Visible="off";% 具体代码实现方式app.calculate_snr();case '卡尔曼滤波'app.EditField.Visible="off";app.EditField_2.Visible="off";app.EditField_3.Visible="off";app.EditField_4.Visible="off";% 具体代码实现方式app.calculate_snr();endend

此处我们还定义了四个编辑字段(数字)组件,用来输入相关滤波器的技术指标

2.4信噪比

信噪比的基本定义是信号功率与噪声功率的比值,通常用分贝(dB)来表示
具体代码实现方式:

        function calculate_snr(app)% 计算滤波前的信噪比% 原始信号功率psignal=P(app.y_origin);% 噪声功率pnoise=P(app.y_with_noise-app.y_origin);% 信噪比SNR_Original=10*log10(psignal/pnoise);% disp(SNR_Original)app.SNREditField.Value=SNR_Original;% 计算滤波后的信噪比% 降噪后的功率psignal_after=P(app.y_origin);% 噪声功率pnoise=P(app.y_noise_redude-app.y_origin);SNR_After=10*log10(psignal_after/pnoise);% disp(SNR_After)app.SNREditField_2.Value=SNR_After;end

这自定义了P()函数
具体代码:

function p=P(y)
p=sum(abs(y).^2)/length(y);
end

也可以使用snr()函数直接实现,注意区分信号功率噪声信号功率

3.完整版功能展示

此处展示:加入的是高斯高频噪声,,选用切比雪夫低通滤波器,对比信噪比,起到一定的降噪效果
在这里插入图片描述
上述代码只是部分代码展示,完整版代码可以私信我免费获取

结语

通过本次语音信号去噪系统的设计,一定会加深你对滤波过程的理解。如有不足,欢迎交流!!!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com