MATLAB设计语音信号的处理与滤波系统GUI界面

目录

  • MATLAB设计语音信号的处理与滤波系统GUI界面
  • 前言
  • 一、GUI界面设计
  • 二、部分代码
    • 1.系统录音
    • 2.语音播放
    • 3.语音滤波
    • 4.语音回放
    • 5.加噪处理
    • 6.滤噪处理
  • 三、演示视频
  • 总结

前言

前段时间用MATLAB设计了FIR数字滤波器的GUI界面,画出了FIR数字滤波器的幅度响应。本次在之前的基础上升级改造,用MATLAB设计语音信号的处理与滤波系统的GUI界面。语音信号的处理与滤波系统主要功能:录制一段自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;给定滤波器的性能指标,采用窗函数法和双线性变换法设计滤波器,并画出滤波器的频率响应;然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;回放语音信号;换一个与你性别相异的人录制同样一段语音内容,分析两段内容相同的语音信号频谱之间有什么特点;再录制一段同样长时间的背景噪声叠加到你的语音信号中,分析叠加前后信号频谱的变化,设计一个合适的滤波器,能够把该噪声滤除。

一、GUI界面设计

GUI界面设计所用的控件主要是可编辑文本框、静态文本框、pushbutton按钮,radiobutton单选框、坐标区,设计过程请参考我上一篇博文:MATLAB设计FIR数字滤波器GUI界面

本次设计的语音信号的处理与滤波系统GUI界面如下:

二、部分代码

1.系统录音

这里我写死了录音功能,点击系统录音按钮将会默认录音4秒。大家可以修改修改,增加暂停、继续等功能。

代码如下:

    fs = 8000;           % 采样频率duration = 4;        % 时间长度(秒) % 创建一个录音文件:fs =8000Hz, 16-bit, 单通道voice = audiorecorder(fs, 16, 1);   recordblocking(voice, duration);   % 录音4秒钟stop(voice);y = getaudiodata(voice);ymax = max(abs(y));  % 归一化y = y/ymax;audiowrite('C:\Users\32076\Desktop\数字信号实训\Gxust\系统录音.wav',y,fs); % 存储录音文件

2.语音播放

点击语音播放按钮,将会在相应的坐标区生成相应的图像,包括原始语音信号波形图和原始语音信号频谱图,并且播放刚刚的录音文件。这里有几个点要说一下:一是我为什么不用传参来处理,因为参数是在上一次执行的函数那里生成,也就是说我执行这一步就先要执行上一步,否则系统运行就会报错,我觉得有时候这样操作有点多余,所以没有用传参处理。不过必不可少的时候还是要传参的。二是x轴标题和y轴标题问题,在有多个坐标区的时候必须要指定坐标区,否则会无法显示或者只显示到最后一个坐标区。而且xlabel函数和ylabel函数要写在plot函数下面,否则无法正常显示出x轴标题和y轴标题。

代码如下:

    fs = 8000;           % 采样频率duration = 4;        % 时间长度(秒) n = duration*fs;     % 采样点数t = (1:n)/fs;y = audioread('C:\Users\32076\Desktop\数字信号实训\Gxust\系统录音.wav');  %读取音频plot(handles.axes1,t,y);                          % 画出声音的时域波形图xlabel(handles.axes1,'时间/s');                   % x轴标题ylabel(handles.axes1,'相对信号强度');              % y轴标题L = length(y);X=fft(y,L);A = fftshift(X);A=abs(A);ws = 2* pi* fs;w1 = (-ws/2 + (0:L-1) * ws/L)/(2 * pi);plot(handles.axes2,w1, abs(A)); xlabel(handles.axes2,'频率/Hz');ylabel(handles.axes2,'幅度');clear soundsound(y);

3.语音滤波

和上篇博客一样,先获取输入参数,再判断要设计什么滤波器。下面代码是矩形窗设计低通滤波器的。

代码如下:

if get(handles.radiobutton1,'value')    %矩形窗设计低通滤波器ws1=2*pi*fs1/Fs;wpu = 2*pi*fpu/Fs;Bt = ws1 - wpu; %计算过渡带M0 = ceil(1.8*pi/Bt); %求阶数MM0 = M0 + mod(M0 + 1,2);wc = (wpu+ws1)/2/pi; %计算理想低通滤波器通带截止频率(关于pi归一化) hn = fir1(M0-1,wc,boxcar(M0)); %求矩形窗[Hw,w] = freqz(hn);w = w/pi;plot(handles.axes3,w,20*log10(abs(Hw)));   %低通滤波器幅度响应图xlabel(handles.axes3,'ω/π');ylabel(handles.axes3,'20log|H(e^j^\omega)|(dB)');final=fftfilt(hn,y,1024);ynfft=fftshift(fft(final));plot(handles.axes6,w1,abs(ynfft));    %滤波后声音频谱图xlabel(handles.axes6,'频率/Hz');ylabel(handles.axes6,'幅度');audiowrite('C:\Users\32076\Desktop\数字信号实训\Gxust\滤波后.wav',final,fs);x=audioread('C:\Users\32076\Desktop\数字信号实训\Gxust\滤波后.wav');plot(handles.axes5,t,x);                          % 画出滤波后声音的时域波形图xlabel(handles.axes5,'时间/s');                   % x轴标题ylabel(handles.axes5,'相对信号强度');                     % y轴标题

4.语音回放

用audioread函数读取到路径中的音频文件,再用sound函数播放就行。
代码如下:

    y=audioread('C:\Users\32076\Desktop\数字信号实训\Gxust\滤波后.wav');clear soundsound(y);

5.加噪处理

y是原声,z是加噪之后的声音,下面代码是加噪并求出加噪之后的频谱图,播放加噪后的音频。通过对比发现,信噪比snr = 10时加噪之后的频谱图效果明显,且音噪和原声也清晰。
代码如下:

    fs = 8000;           % 采样频率y = audioread('C:\Users\32076\Desktop\数字信号实训\Gxust\系统录音.wav');L = length(y);ws = 2* pi* fs;w1 = (-ws/2 + (0:L-1) * ws/L)/(2 * pi);%添加高斯白噪声snr = 10; %设定信噪比,单位dbnoise = randn(size(y));              % 用randn函数产生高斯白噪声Nx = length(y);                      % 求出信号x长signal_power = 1/Nx*sum(y.*y);     % 求出信号的平均能量noise_power = 1/Nx*sum(noise.*noise);% 求出噪声的能量noise_variance = signal_power / ( 10^(snr/10) );    % 计算出噪声设定的方差值noise = sqrt(noise_variance/noise_power)*noise;       % 按噪声的平均能量构成相应的白噪声z = y + noise;                         % 合成带噪语音audiowrite('C:\Users\32076\Desktop\数字信号实训\Gxust\加噪.wav',z,fs); % 存储录音文件X = fft(z,L);B = fftshift(X);B=abs(B);plot(handles.axes4,w1,abs(B));xlabel(handles.axes4,'频率/Hz');ylabel(handles.axes4,'幅度');clear soundsound(z);

6.滤噪处理

主要用凯泽窗滤波来进行滤噪处理,这就需要传参了,把我们语音滤波那步设计的凯泽窗窗函数传下来就行,避免重新设计凯泽窗窗函数。
代码如下:

    z = audioread('C:\Users\32076\Desktop\数字信号实训\Gxust\加噪.wav');  %带噪语言hn = handles.hn;%% 凯泽窗滤波FS = 8000;x1 = fftfilt(hn,z);sf1 = x1;    %滤波后的信号clear soundsound(sf1,FS);

三、演示视频

MATLAB设计语音信号的处理与滤波系统GUI界面

总结

总的来说,MATLAB的GUI界面不难,要实现什么功能就在具体的回调函数下面写函数就行,上一篇博客忘记分享一篇关于GUI设计的笔记博客文章了:Matlab的GUI界面学习手记
有关语音信号处理的函数网上也有很多相关的材料。

MATLAB设计语音信号的处理与滤波系统GUI界面相关推荐

  1. 基于matlab的语音信号滤波处理

    基于matlab的语音信号滤波处理 摘要:本课程设计的主要目的是在MATLAB环境下,使用窗口设计法设计一个滤波器,并对语音信号进行滤波去噪.开发平台为MATLAB,设计方法为窗口设计法.用麦克风采集 ...

  2. 基于MATLAB的高频信号设计,基于Matlab的语音信号滤波器的设计与实现

    1.设计原理 设计数字滤波器的任务就是寻求一个因果稳定的线性时不变系统,并使系统函数H(z)具有指定的频率特性. 2.设计内容 以Matlab实现语音信号的低通滤波器设计为例: (1)语音信号的采集 ...

  3. matlab如何采集两路语音信号,基于MATLAB的语音信号采集与处理

    内容介绍 原文档由会员 大雨倾盆 发布 基于MATLAB的语音信号采集与处理 2.4万字 114页 原创作品,已通过查重系统 摘要 语音信号处理作为目前发展最为迅速的信息科学研究领域的核心技术,它是一 ...

  4. 基于matlab的语音信号去噪毕业论文,MATLAB的FIR数字滤波器语音信号的去噪研究和仿真...

    摘要:语音信号作为人类语言交流的重要手段,语音处理的质量直接影响人们的正常通信.本文基于MATLAB对语音信号及加噪信号进行时域和频域分析,设计了FIR数字滤波器,完成对加噪信号滤波的处理.结果表明设 ...

  5. 基于matlab 的语音信号分析和处理,基于matlab_的语音信号分析和处理

    基于matlab_的语音信号分析和处理 1 基于MATLAB 的语音信号分析和处理 福建师范大学协和学院 信息技术系 电子信息科学与技术专 124122006028 王祯飞 指导老师 黄小芬[摘要]本 ...

  6. 判断清浊音 matlab,基于MATLAB的语音信号的清浊音分析.doc

    基于MATLAB的语音信号的清浊音分析 目录 1 语音信号概述1 1.1 语音信号的基本组成1 1.2 语音信号的"短时谱"1 1.3 基音周期2 1.4 短时分析技术2 2 语音 ...

  7. matlab语音加入正弦噪声,基于Matlab的语音信号去噪声处理 毕业论文.doc

    基于Matlab的语音信号去噪声处理 毕业论文 本科毕业论文(设计) 题目:基于Matlab的语音信号去噪声处理 姓 名: 学 号: 1142051102 专 业: 电子信息工程 院 系: 电子通信工 ...

  8. 头歌:实验6(2)语音信号单音干扰滤波实训

    第1关:低通滤波器设计 1.已知语音信号频率范围是:300Hz~3.4kHz,现有一噪声为7kHz,理想低通滤波器的截止频率应该选择多少__B__kHz A.3 B.5 C.8 D.10 第2关:语音 ...

  9. Matlab语音采集与读写程序,基于MATLAB的语音信号录制采集和分析的程序设计

    理 论广 角 ● I 基于 MATLAB的语音信号录制采集和分析的程序设计 刘 晓炯 (西北民族大学电气工程学院 甘肃 兰州I 730030) [摘 要]语音信号处理技术是语音处理领域中新近发展起来的 ...

最新文章

  1. localStorage、sessionStorage、Cookie的区别及用法
  2. linux下apache和jboss集群和负载均衡
  3. 通过邮箱验证注册——.net代码
  4. 2019小程序没必要做了_2019微信小程序的发展前景怎么样?有必要开发微信小程序吗?...
  5. linux egrep新添的正则表达式元字符
  6. 你还在问android横竖屏切换的生命周期?
  7. 【渝粤教育】国家开放大学2018年春季 0233-21T学前儿童语言教育 参考试题
  8. Educational Codeforces Round 114总结
  9. 编程语言_如何正确地学习编程语言
  10. mysql数据库导入导出和密码修改
  11. A browser for WinCE/Windows base WebKit. (zz)
  12. svn打分支与分支合并回主干
  13. c语言教程 define,C语言中define的用法
  14. String对象不可改变的特性
  15. Centos7安装Rarlinux解压rar文件
  16. 方差分析软件_重复测量方差分析的操作教程及结果解读
  17. 游戏编程入门学习笔记17——网络篇——显示本机IP
  18. leetcode每日一题1725. 可以形成最大正方形的矩形数目 哈希表存储 到 贪心遍历 优化~
  19. PT100高精度测温电路 AD623+REF3030(转)
  20. python的一系列绘图基础

热门文章

  1. arm服务器芯片主板,技嘉展示Ampere Altra ARM服务器的R272-P30主板
  2. 移植ubuntu 16.04.4 到arm平台
  3. 如何下载Centos的内核源代码
  4. PAT1019 数字黑洞 分数 20
  5. 在Linux上配置SMB文件共享
  6. Web服务器Nginx企业级优化
  7. iReport条形码Barcode
  8. 手机投屏时电视显示服务器有问题,小屏变大屏,手机投屏这几招你学废了么?...
  9. WIN7下给C盘扩容
  10. gui-gio:温度转换器的demo2