实验二利用MATLAB工具箱对混杂噪声的音频信号进行滤波

这篇具有很好参考价值的文章主要介绍了实验二利用MATLAB工具箱对混杂噪声的音频信号进行滤波。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验二利用MATLAB工具箱对混杂噪声的音频信号进行滤波

一、小提琴音频的加噪去噪处理

要求:选择子作业1中的音频信号,自行给定滤波器的系统函数,分别采用时域线性卷积和差分方程两种方法对音频信号进行滤波处理,比较滤波前后信号的波形和回放的效果。
最终整体效果如下图:
实验二利用MATLAB工具箱对混杂噪声的音频信号进行滤波

1、音频信号的构建

①音乐信号的产生:

  采用Adobe Audition提取出一首小提琴音乐的一个音符的音频信号,如下图所示:
实验二利用MATLAB工具箱对混杂噪声的音频信号进行滤波
上下信号波形分别为左右声道。如何判断为一个音符的信号呢?通过Adobe Audition的频谱分析进行判断,语谱图如下图所示:
实验二利用MATLAB工具箱对混杂噪声的音频信号进行滤波
语谱图是将信号的频谱和时间结合,横轴为时间,纵轴为频率,颜色的深浅表征信号的幅度。通过在一段音乐信号的语谱图中,找到在一定时间段内各频率分量稳定的区间,则可判断其为一个音符。通过上图的各频率成分的颜色可得知,在该时间段下,在某几段频率区间中,颜色波形十分稳定。
  通过MATLAB对该音乐信号进行频谱分析可得:(左图为时域信号,右图为频域信号)
实验二利用MATLAB工具箱对混杂噪声的音频信号进行滤波
将上图与前一幅图对比可知,频域图显示能量高的地方,其对应语谱图上的颜色更鲜艳,则说明其表征了音频信号的能量分布。

②噪声信号的产生:

  因为本实验是要对信号作滤波处理,所以我在该音乐信号中通过Adobe Audition软件添加了主要能量分布在低频的高斯白噪声,其时域波形和语谱图如下图所示:
实验二利用MATLAB工具箱对混杂噪声的音频信号进行滤波
由上图可见,该噪声能量的大部分分布在400Hz以下,主要能量分布在100Hz以下,因此后续的滤波器设计选择使用低通滤波器。
  通过MATLAB对该噪声信号进行频谱分析可得:(左图为时域信号,右图为频域信号)
实验二利用MATLAB工具箱对混杂噪声的音频信号进行滤波
可见该噪声的主要能量分布在200Hz以下。

③混杂信号的产生:

  通过Adobe Audition软件的多轨功能将音乐信号和噪声信号进行叠加,因此该噪声为加性噪声,叠加后的时域图和语谱图如下图所示:
实验二利用MATLAB工具箱对混杂噪声的音频信号进行滤波
由上图可知,在200Hz的频率成分以下叠加了主要的噪声。
  通过MATLAB对该混杂信号进行频谱分析可得:(左图为时域信号,右图为频域信号)
实验二利用MATLAB工具箱对混杂噪声的音频信号进行滤波

2、滤波器的设计

①MATLAB滤波器设计工具:

  在MATLAB的应用程序中选择Filter Design & Analysis如下图所示:
实验二利用MATLAB工具箱对混杂噪声的音频信号进行滤波
则得到如下界面:
实验二利用MATLAB工具箱对混杂噪声的音频信号进行滤波
以下为对上图序号框区域的介绍:

  1. 选择高通/低通/带通/带阻等滤波器类型以及滤波器实现方法(如IIRFIR);
  2. 选择滤波器阶数,阶数越高,陡峭性越好;
  3. 分别设置幅频特性坐标的单位,信号采样率,通带截止频率和阻带截止频率;
  4. 该区域可以通过在Analysis菜单栏进行选择来显示该滤波器的不同参数指标或者数据分析;
  5. 该区域为所设计滤波器的简要信息:结构,阶数,稳定性和滤波器来源。
②滤波器参数

  上图为我所设计的滤波器,为高通滤波器,IIR结构的巴特沃斯滤波器,阶数为由软件自动设置为符合条件的最小阶数45阶,原信号的采样率8000,通带截止频率为250Hz,阻带截止频率为200Hz。
实验二利用MATLAB工具箱对混杂噪声的音频信号进行滤波
在上图所示的选项卡中可以看到滤波器系数,这个系数为系统函数 H ( Z ) H(Z) H(Z)分子和分母在 Z − n Z^{-n} Zn前面的系数,它是由23个分式相乘而成。
  该工具生成的代码如下所示:

    function Hd = my_filter_code2
    %MY_FILTER_CODE2 Returns a discrete-time filter object.
    
    % MATLAB Code
    % Generated by MATLAB(R) 9.0 and the Signal Processing Toolbox 7.2.
    % Generated on: 19-Oct-2022 14:56:51
    
    % Butterworth Highpass filter designed using FDESIGN.HIGHPASS.
    
    % All frequency values are in Hz.
    Fs = 8000;  % Sampling Frequency
    
    Fstop = 200; % Stopband Frequency
    Fpass = 250; % Passband Frequency
    Astop = 80;  % Stopband Attenuation (dB)
    Apass = 1;   % Passband Ripple (dB)
    match = 'stopband';  % Band to match exactly
    
    % Construct an FDESIGN object and call its BUTTER method.
    h  = fdesign.highpass(Fstop, Fpass, Astop, Apass, Fs);
    Hd = design(h, 'butter', 'MatchExactly', match);
    
    % [EOF]

3、利用该滤波器对混杂音频信号进行滤波

  主要代码如下:

    % ==========MATLAB工具箱生成的滤波器========== %
    H = my_filter_code2;
    x_filtered = filter(H, x1);

x_filtered为已经被滤波的信号,H为所设计的滤波器。
滤波效果如下:
实验二利用MATLAB工具箱对混杂噪声的音频信号进行滤波
由图可见,低频部分的分量被很好滤除,且对比该图和原小提琴信号的时域和频域图,时域部分看不出差别,频域部分除被滤除的部分,其他部分基本一致。最后将滤波之后的数据用audiowrite函数导出得到wav文件,其声音相对于混杂音频有极大的恢复且与原音频几乎没有差别。文章来源地址https://www.toymoban.com/news/detail-415551.html

附录:MATLAB代码

1、小提琴音频的加噪去噪处理代码

    clear;
clc;
format long;

% ==========原始信号========== %
[x1, fs1] = audioread('./实验二语音信号/小提琴.wav');

N1 = length(x1);  % 整个图由N1个样点构成
dt1 = 1 / fs1;
tscale1 = dt1 * N1;  % X轴显示的时间长度,单位为秒
t1 = 0 : dt1 : tscale1 - tscale1 / N1;

subplot(1, 2, 1);
plot(t1 .* 1000, x1);
title('小提琴信号时域图');
xlabel('t/ms', 'FontName', '宋体', 'FontWeight', 'normal', 'FontSize', 14);
ylabel('电压/V', 'FontName', '宋体', 'FontWeight', 'normal', 'FontSize', 14);
grid on;

y1 = fft(x1);
realy = 2 * abs(y1(1 : length(x1))) / length(x1);
realf = (0 : length(x1) - 1) * (fs1 / length(x1)); 
subplot(1, 2, 2);
stem(realf, realy, '.');
title('小提琴信号频谱图');
axis([0, 4000, 0, 0.04]);
xlabel('f/Hz', 'FontName', '宋体', 'FontWeight', 'normal', 'FontSize', 14);
ylabel('电压/V', 'FontName', '宋体', 'FontWeight', 'normal', 'FontSize', 14);
grid on;

figure;
% ==========噪声信号========== %
[x3, fs3] = audioread('./实验二语音信号/噪声.wav');

N3 = length(x3);  % 整个图由N1个样点构成
dt3 = 1 / fs3;
tscale3 = dt3 * N3;  % X轴显示的时间长度,单位为秒
t3 = 0 : dt3 : tscale3 - tscale3 / N3;

subplot(1, 2, 1);
plot(t3 .* 1000, x3);
title('噪声信号时域图');
xlabel('t/ms', 'FontName', '宋体', 'FontWeight', 'normal', 'FontSize', 14);
ylabel('电压/V', 'FontName', '宋体', 'FontWeight', 'normal', 'FontSize', 14);
grid on;

y3 = fft(x3);
realy = 2 * abs(y3(1 : length(x3))) / length(x3);
realf = (0 : length(x3) - 1) * (fs3 / length(x3)); 
subplot(1, 2, 2);
stem(realf, realy, '.');
title('噪声信号频谱图');
axis([0, 4000, 0, 0.04]);
xlabel('f/Hz', 'FontName', '宋体', 'FontWeight', 'normal', 'FontSize', 14);
ylabel('电压/V', 'FontName', '宋体', 'FontWeight', 'normal', 'FontSize', 14);
grid on;

figure;
% ==========小提琴混杂噪声信号========== %
[x2, fs2] = audioread('./实验二语音信号/小提琴混杂声音_缩混.wav');

N2 = length(x2);  % 整个图由N2个样点构成
dt2 = 1 / fs2;
tscale2 = dt2 * N2;  % X轴显示的时间长度,单位为秒
t2 = 0 : dt2 : tscale2 - tscale2 / N2;

subplot(1, 2, 1);
plot(t2 .* 1000, x2);
title('小提琴混杂噪声信号时域图');
xlabel('t/ms', 'FontName', '宋体', 'FontWeight', 'normal', 'FontSize', 14);
ylabel('电压/V', 'FontName', '宋体', 'FontWeight', 'normal', 'FontSize', 14);
grid on;

y2 = fft(x2);
realy = 2 * abs(y2(1 : length(x2))) / length(x2);
realf = (0 : length(x2) - 1) * (fs2 / length(x2)); 
subplot(1, 2, 2);
stem(realf, realy, '.');
title('小提琴混杂噪声信号频谱图');
axis([0, 4000, 0, 0.04]);
xlabel('f/Hz', 'FontName', '宋体', 'FontWeight', 'normal', 'FontSize', 14);
ylabel('电压/V', 'FontName', '宋体', 'FontWeight', 'normal', 'FontSize', 14);
grid on;

figure;
% ==========MATLAB工具箱生成的滤波器========== %
H = my_filter_code2;
x_filtered = filter(H, x1);

subplot(1, 2, 1);
plot(t1 .* 1000, x_filtered);
title('小提琴去噪信号时域图');
xlabel('t/ms', 'FontName', '宋体', 'FontWeight', 'normal', 'FontSize', 14);
ylabel('电压/V', 'FontName', '宋体', 'FontWeight', 'normal', 'FontSize', 14);
grid on;

y_filtered = fft(x_filtered);
realy = 2 * abs(y_filtered(1 : length(x_filtered))) / length(x_filtered);
realf = (0 : length(x_filtered) - 1) * (fs2 / length(x_filtered)); 
subplot(1, 2, 2);
stem(realf, realy, '.');
title('小提琴去噪信号频谱图');
axis([0, 4000, 0, 0.04]);
xlabel('f/Hz', 'FontName', '宋体', 'FontWeight', 'normal', 'FontSize', 14);
ylabel('电压/V', 'FontName', '宋体', 'FontWeight', 'normal', 'FontSize', 14);
grid on;

audiowrite('./实验二语音信号/小提琴去噪.wav', x_filtered, 8000);

到了这里,关于实验二利用MATLAB工具箱对混杂噪声的音频信号进行滤波的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MATLAB第57期】基于MATLAB的双隐含层BP神经网络回归预测模型(无工具箱版本及工具箱版本对比)

    数据为案例数据 。103行样本,7输入1输出数据。 训练集数据的R2为:0.9022 测试集数据的R2为:0.87266 训练集数据的MAE为:1.8189 测试集数据的MAE为:2.1658 训练集数据的MBE为:-0.00088469 测试集数据的MBE为:0.3059 数据与无工具版本相同,数据顺序也相同。 训练集数据的R2为:1 测试

    2024年02月16日
    浏览(52)
  • 遗传算法与Matlab GA工具箱

    GA是一种进化算法,基本原理效仿生物界“物竞天择,适者生存”的演化法则。 一些基本概念 种群population:问题潜在的解集 个体individual:每一个可能的解,通过基因编码一定数目的个体形成一个种群 适应度fitness:由此判断个体的优良,进而进行选择 选择selection、交叉cr

    2024年02月09日
    浏览(59)
  • Matlab样条工具箱及曲线拟合

    Matlab样条工具箱提供了样条的建立、操作、绘制等功能. 建立一个样条曲线或曲面,根据前缀可分为4类: 前缀 类别 cs* 三次样条 pp* 分段多项式样条 sp* B样条,系数为基函数系数 rp* 有理B样条 函数操作:求值、求导数、求积分等; 节点操作:节点重数的设定、修改等. 1.三次

    2024年02月08日
    浏览(61)
  • matlab系统辨识工具箱及其反向验证

    系统辨识工具箱 什么时候使用系统辨识,当系统传递函数不确定(在多大程度上不确定?)时,通过对输入输出数据采集,通过数学迭代找到控制对象的近似模型。在找到近似模型(传递函数)后,就可以使用线性化调参工具对系统控制参数进行整定,进行控制系统设计。 调用命

    2024年02月05日
    浏览(51)
  • matlab机器人工具箱基础使用

    资料:https://blog.csdn.net/huangjunsheng123/article/details/110630665 test1.m

    2024年02月12日
    浏览(56)
  • 在Matlab中安装LibSVM工具箱

    1 下载工具箱 地址:LibSVM下载地址 下拉网页: 2 注意事项: 2.1 注意测试数据 ==官网下载的数据包中没有Matlab对应的数据集格式,点此下载:heart_scale.mat.== 链接: https://pan.baidu.com/s/15LYMilm8asw9EYkHmifLyg 提取码: trws 复制这段内容后打开百度网盘手机App,操作更方便哦 –来自百度

    2024年02月04日
    浏览(45)
  • 利用pytorch自定义CNN网络(一):torchvision工具箱

    本文是利用pytorch自定义CNN网络系列的第一篇,主要介绍 torchvision工具箱及其使用,关于本系列的全文见这里。 笔者的运行环境:CPU (AMD Ryzen™ 5 4600U) + pytorch (1.13,CPU版) + jupyter; 本文所用到的资源:链接:https://pan.baidu.com/s/1WgW3IK40Xf_Zci7D_BVLRg 提取码:1212 torchvision是基于pyt

    2024年02月14日
    浏览(41)
  • 【文献阅读笔记】利用CVX工具箱求解复数问题的方法

    方法一: 使用hermitian CVX工具箱支持复数的问题,因此可以直接使用复数的模式 使用hermitian 代码模式如下: 约束中第一个循环指的是约束中的不等约束 约束中第二个循环指的是约束中的等式约束 方法二: 将复数问题转换为实值问题 按照我的理解,是将复数转

    2023年04月21日
    浏览(42)
  • MATLAB曲线拟合工具箱(cftool)介绍(完结)

    本文通过实例对MATLAB曲线拟合工具箱进行详细讲解,帮助大家更容易理解曲线拟合工具箱(cftool)。 已知 x = [0 0.2 0.50.8 0.9 1.3 1.4 1.9 2.1 2.2 2.5 2.6 2.9 3.0]; y = [1.27792.1596 2.7311 2.5974 2.4068 1.6215 1.4178 0.9955 0.9666 0.8837 0.9639 1.00311.1233 1.1583]; 并且根据某种物理或数学关系确定y=f(x)的表达

    2024年02月02日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包