语音信号处理MATLAB实现

matlab语音信号处理的一段代码

涉及到的函数sound()函数audioread()函数

sound函数的输入参量是音频数据向量、采样频率和转换位数。
也可以自己写些声音数据。下面的声音声调和频率有关,长度和数据长度有关:
例如:
sound(sin(2*pi*25*(1:4000)/100));

响两声就是:
sound(sin(2*pi*25*(1:4000)/100));
pause(1);
sound(sin(2*pi*25*(1:4000)/100));
MATLAB也自带了很多声音:
%鸟声
load chirp
sound(y,Fs)
%锣声
load gong
sound(y,Fs)
%哈里路亚

MATLAB里函数audioread的使用格式:

[y,Fs]=audioread('D:\MATLAB\work\noisymusic.wav');

sound(y,Fs);

还涉及到数字信号处理的一部分信号处理的知识,这里只是简单的用低通滤波器来进行处理,可以发现滤波的效果并不好


[y,fs]=audioread('D:\matlab\work\voice.mp3');
sound(y,fs)      % 回放语音信号
n=length(y)  %选取变换的点数 
y_p=fft(y,n);      %对n点进行傅里叶变换到频域
f=fs*(0:n/2-1)/n;   % 对应点的频率
figure(1)
subplot(2,1,1);
plot(y);                    %语音信号的时域波形图
title('原始语音信号采样后时域波形');
xlabel('时间轴')
ylabel('幅值 A')
subplot(2,1,2);
plot(f,abs(y_p(1:n/2)));     %语音信号的频谱图
title('原始语音信号采样后频谱图');
xlabel('频率Hz');
ylabel('频率幅值');
%对音频信号产生噪声
  L=length(y)        %计算音频信号的长度
  noise=0.1*randn(L,2);  %产生等长度的随机噪声信号(这里的噪声的大小取决于随机函数的幅度倍数)
  y_z=y+noise;        %将两个信号叠加成一个新的信号——加噪声处理   
  pause(5)
  sound(y_z,fs)
%对加噪后的语音信号进行分析
n=length(y);  %选取变换的点数 
y_zp=fft(y_z,n);      %对n点进行傅里叶变换到频域
f=fs*(0:n/2-1)/n;   % 对应点的频率
figure(2)
subplot(2,1,1);
plot(y_z);                    %加噪语音信号的时域波形图
title('加噪语音信号时域波形');
xlabel('时间轴')
ylabel('幅值 A')
subplot(2,1,2);
plot(f,abs(y_zp(1:n/2)));     %加噪语音信号的频谱图
title('加噪语音信号频谱图');
xlabel('频率Hz');
ylabel('频率幅值');
%对加噪的语音信号进行去噪程序如下:
fp=1500;fc=1700;As=100;Ap=1;
%(以上为低通滤波器的性能指标)
wc=2*pi*fc/fs; wp=2*pi*fp/fs;
wdel=wc-wp;
beta=0.112*(As-8.7);
N=ceil((As-8)/2.285/wdel);
wn= kaiser(N+1,beta);
ws=(wp+wc)/2/pi;
b=fir1(N,ws,wn);
figure(3);
freqz(b,1);
title('低通滤波器的幅频图');
xlabel('频率/hz');
ylabel('幅度/db');
%(此前为低通滤波器设计阶段)——接下来为去除噪声信号的程序——
x=fftfilt(b,y_z);
X=fft(x,n);
figure(4);
subplot(2,2,1);plot(f,abs(y_zp(1:n/2)));
title('滤波前信号的频谱');
subplot(2,2,2);plot(abs(X));
title('滤波后信号频谱');
subplot(2,2,3);plot(y_z);
title('滤波前信号的波形')
subplot(2,2,4);plot(x);
title('滤波后信号的波形')
pause(5);
sound(x,fs)  %回放滤波后的音频

 

  • 18
    点赞
  • 181
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值