Matlab:语音信号处理与滤波

Matlab:语音信号处理与滤波文章目录语音信号的采集对语音信号进行频谱分析设计数字滤波器利用滤波器进行滤波语音信号的采集首先利用win自带的录音机(没有的话手机录也行),录下一段语音信号,时间40秒左右。运用MATLAB对语音进行采样[x,fs]=audioread(‘D:\1234.mp3’);plot(x);出现如下的图对语音信号进行频谱分析处理语音信号的时域波形图对语音信号进行快速傅立叶变换,得到信…

大家好,又见面了,我是你们的朋友全栈君。

注:本文章仅供参考,本人并非通信专业,相关知识早已忘得差不多了,所以不要再问我相关问题啦~sorry

语音信号的采集

首先利用win自带的录音机(没有的话手机录也行),录下一段语音信号,时间40秒左右。运用MATLAB对语音进行采样

[x,fs]=audioread('D:\1234.mp3');
plot(x);

出现如下的图
语音信号


对语音信号进行频谱分析

处理语音信号的时域波形图
对语音信号进行快速傅立叶变换,得到信号的频谱

clear
[x,fs]=audioread('D:\1234.mp3');
x=x(:,1);
FS=length(x);
X=fft(x);
t=(0:FS-1)/fs;
figure(1)

subplot(2,1,1);plot(t,x);
title('原始语音信号时域波形');
xlabel('时间');
ylabel('赋值');
grid on;

subplot(2,1,2);plot(abs(X));
title('原始语音信号频谱');
xlabel('频率');
ylabel('幅度');
axis([0 1000000 0 8]);
grid on;

频谱


设计数字滤波器

可以运用窗函数法、双线性变换法设计低通、高通、带通三种滤波器。本次选用双线性变换法进行设计

(1) 利用ellipord函数设计IIR低通滤波器

Fp=1500;
Fs=1200;
Ft=8000;
As=100;
Ap=1;
wp=2*pi*Fp/Ft;
ws=2*pi*Fs/Ft;
[n,wn]=ellipord(wp,ws,Ap,As,'s');
[b,a]=ellip(n,Ap,As,wn,'s');
[B,A]=bilinear(b,a,1);
[h,w]=freqz(B,A);
figure(2);
plot(w*Ft/pi/2,abs(h));
title('IIR低通滤波器');
xlabel('频率');
ylabel('幅度');
grid on;

低通滤波器
(2) 利用ellipord函数设计IIR高通滤波器

Fp=1200;
Fs=2200;
Ft=8000;
As=100;
Ap=1;
wp=2*pi*Fp/Ft;
ws=2*pi*Fs/Ft;
[n,wn]=ellipord(wp,ws,Ap,As,'s');
[b,a]=ellip(n,Ap,As,wn,'high','s');
[B,A]=bilinear(b,a,1);
[h,w]=freqz(B,A);
figure(4);
plot(w*Ft/pi/2,abs(h));
title('IIR高通滤波器');
xlabel('频率');
ylabel('幅度');
grid on;

高通滤波器

(3) 利用ellipord函数设计IIR带通滤波器

Fp1=1200;
Fp2=3000;
Fs1=1000;
Fs2=3200;
Ft=8000;
As=100;
Ap=1;
wp=[2*pi*Fp1/Ft,2*pi*Fp2/Ft];
ws=[2*pi*Fs1/Ft,2*pi*Fs2/Ft];
[n,wn]=ellipord(wp,ws,Ap,As,'s');
[b,a]=ellip(n,Ap,As,wn,'s');
[B,A]=bilinear(b,a,1);
[h,w]=freqz(B,A);
figure(6);
plot(w*Ft/pi/2,abs(h));
title('IIR带通滤波器');
xlabel('频率');
ylabel('幅度');
grid on;

带通滤波器

利用滤波器进行滤波

(1)IIR低通滤波器

[x,fs]=audioread('D:\1234.mp3');
x=x(:,1);
Y=fft(x);
y=filter(B,A,x);
Y1=fft(y);
n=0:length(x)-1;
t=(0:FS-1)/fs;
figure(7);
subplot(3,1,1);plot(t,y);grid on;
title('IIR低通滤波器滤波后语音信号时域波形');
xlabel('时间');
ylabel('赋值');
subplot(3,1,2);plot(n,abs(Y));grid on;
title('滤波前语音信号频谱');
xlabel('频率');
ylabel('幅度');
axis([0 1000000 0 8]);
subplot(3,1,3);plot(n,abs(Y1));grid on;
title('滤波后语音信号频谱');
xlabel('频率');
ylabel('幅度');
axis([0 1000000 0 8]);

在这里插入图片描述

(2)IIR高通滤波器

[x,fs]=audioread('D:\1234.mp3');
x=x(:,1);
Y=fft(x);
y=filter(B,A,x);
Y1=fft(y);
n=0:length(x)-1;
t=(0:FS-1)/fs;
figure(7);
subplot(3,1,1);plot(t,y);grid on;
title('IIR高通滤波器滤波后语音信号时域波形');
xlabel('时间');
ylabel('赋值');
subplot(3,1,2);plot(n,abs(Y));grid on;
title('滤波前语音信号频谱');
xlabel('频率');
ylabel('幅度');
axis([0 1000000 0 8]);
subplot(3,1,3);plot(n,abs(Y1));grid on;
title('滤波后语音信号频谱');
xlabel('频率');
ylabel('幅度');
axis([0 1000000 0 8]);

在这里插入图片描述
(3) IIR带通滤波器

[x,fs]=audioread('D:\1234.mp3');
x=x(:,1);
Y=fft(x);
y=filter(B,A,x);
Y1=fft(y);
n=0:length(x)-1;
t=(0:FS-1)/fs;
figure(7);
subplot(3,1,1);plot(t,y);grid on;
title('IIR带通滤波器滤波后语音信号时域波形');
xlabel('时间');
ylabel('赋值');
subplot(3,1,2);plot(n,abs(Y));grid on;
title('滤波前语音信号频谱');
xlabel('频率');
ylabel('幅度');
axis([0 1000000 0 5]);
subplot(3,1,3);plot(n,abs(Y1));grid on;
title('滤波后语音信号频谱');
xlabel('频率');
ylabel('幅度');
axis([0 1000000 0 5]);

在这里插入图片描述


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141091.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java递归写法_java递归调用

    Java递归写法_java递归调用递归是自己调用自己,java里的递归写法如下:/** *1*2*(n-1)*n的计算形式,使用递归实现 *@authorAdministrator * */publicclassDiGui{//初始化变量,不能使用默认值privatestaticlongresult=1;/***非递归方式*@paramn*@retu

    2022年9月18日
    3
  • QIIME 2教程. 01简介和安装 Introduction & Install(2020.11)

    QIIME 2教程. 01简介和安装 Introduction & Install(2020.11)QIIME2https://qiime2.org/简介QIIME2是微生物组分析软件QIIME(截止17.7.13被引7771次)的全新版(不是升级版),全部python3全新编写,并于明年全面接替QIIME,是代表末来的分析方法标准(大牛们制定方法标准,我们跟着用就好了)。优点更易于安装:QIIME1的安装让无数生信人竞折腰,现在官方发布了docker,下载即可运行;使用方法多样:支持命令

    2022年6月29日
    22
  • redis集群主从复制原理_主从关系紫音

    redis集群主从复制原理_主从关系紫音Redis主从复制主从复制简介主从复制的概念主从复制的作用主从复制工作流程阶段一:建立连接阶段主从连接(slave连接master)第一种方式第二种方式第三种方式授权访问阶段二:数据同步阶段工作流程数据同步阶段master说明数据同步阶段slave说明阶段三:命令传播阶段命令传播阶段的部分复制服务器的运行id复制缓冲区复制缓冲区内部工作原理复制缓冲区主从服务器复制偏移量(offset)数据同步+命令传播阶段工作流程心跳机制心跳阶段注意事项主从复制常见问题引发频繁的全量复制1引发频繁的全量复制2频繁的网络中

    2022年8月13日
    8
  • RSA加密算法详解及例题

    RSA加密算法详解及例题这是我自己在学习RSA加密算法的时候自己整理的笔记,如需转载请注明出处RSA加密算法我这里就不对RSA的发明背景做介绍了,你只要知道RSA加密算法是非常非常重要的加密算法,放在现在的时代亦是如此。RSA加密算法的安全性是基于对极大整数做因数分解的困难。RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。例如:(1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。(2)甲方获取乙方的公钥,然后用它对信息加密

    2022年6月12日
    70
  • fastjson教程 List转JSONArray以及JSONArray转List[通俗易懂]

    fastjson教程 List转JSONArray以及JSONArray转List[通俗易懂]1.fastjsonList转JSONArrayList<T>list=newArrayList<T>();JSONArrayarray=JSONArray.parseArray(JSON.toJSONString(list));2.fastjsonJSONArray转ListJSONArrayarray=newJSONArray();List<T>list=JSONObject.parseArray(array.toJSONSt..

    2022年6月17日
    170
  • matlab 用循环求和,matlab循环求和函数[通俗易懂]

    matlab 用循环求和,matlab循环求和函数[通俗易懂]matlab求和的出错symsum是符号运算,要先用syms定义符号变量用法详见docsymsum如何用matlab解带求和函数sum的方程举个例子吧:D=[345];A=7;fsolve(@(X)sum(10.^(X-D))-A,0)则ans=3.7998就这么简单.(还想补充说明一点,fsolve中第一个变量是一个函数句柄,第二个变量matlab求和.符号运算通过符号运算把这个式子拆开什么意…

    2022年10月6日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号