Matlab:语音信号处理与滤波
MATLAB 语音 信号处理 滤波
2023-06-13 09:11:26 时间
大家好,又见面了,我是你们的朋友全栈君。
文章目录 - 语音信号的采集
- 对语音信号进行频谱分析
- 设计数字滤波器
- 利用滤波器进行滤波
注:本文章仅供参考,本人并非通信专业,相关知识早已忘得差不多了,所以不要再问我相关问题啦~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.cn/141091.html原文链接:https://javaforall.cn
相关文章
- matlab中的ezplot函数详解_matlab中fix函数的用法
- matlab图像处理初步,MATLAB数字图像处理初步「建议收藏」
- matlab 求矩阵秩,用MATLAB编程求矩阵的秩
- lasso回归matlab,机器学习Lasso回归重要论文和Matlab代码「建议收藏」
- matlab lsd检测,LSD直线检测,matlab工具箱
- matlab测试部分,验证、确认和测试 – MATLAB 和 Simulink 解决方案 – MATLAB & Simulink
- matlab矩阵拼接
- matlab中0/0_matlab样条插值
- matlab新手入门_入门画画初学者
- matlab保存图片函数后突变分辨变化,MATLAB总结 – 图片保存「建议收藏」
- matlab灰度最大值和最小值_matlab灰度直方图
- matlab 行 读取文件 跳过_Matlab读取TXT文件并跳过中间几行的问题!!
- matlab读取txt文件数据_matlab怎么输入数据
- Matlab 直方图_matlab分析
- matlab三维图形的绘制[通俗易懂]
- MATLAB的循环_matlab循环输出
- matlabfor循环产生矩阵_matlab形成矩阵
- MATLAB 循环语句_for循环matlab
- 回归分析数学建模_matlab 回归分析
- matlab中importdata无法打开文件_importdata无法打开文件
- 【csma/ca协议和csma/cd协议的matlab仿真详解】
- Matlab中的偏最小二乘法(PLS)回归模型,离群点检测和变量选择|附代码数据
- 【MATLAB】矩阵操作 ( 矩阵构造 | 矩阵运算 )
- 【MATLAB】矩阵操作 ( 矩阵下标 | 矩阵下标排列规则 )
- MathWorks MATLAB R2023a for Mac(编程和数值计算平台)
- Linux下使用Matlab玩转编程世界。(linux下matlab)
- Matlab与MySQL:极具价值的组合(matlab与mysql)