基于matlab的音频信号低通滤波实验

基于matlab的音频信号低通滤波实验

一、实验任务

  1. 录制语音信号,查看其时域频谱图。
  2. 加入高频噪声信号,并查看其时域频谱图。
  3. 设计低通滤波器,将带有高频噪声的语音信号经过低通滤波器,将噪声滤除,查看其输出时域频谱图。

二、仿真软件

matlab2013a

三、实验原理

  1. 语音信号:这次大作业录制的语音信号是WAV格式,通过audioread()函数读取了语音数字信号的采样频率和数据。数据是两列N行的矩阵,两列表示双通道立体声,我只取第一列进行处理。
  2. 高频噪声信号:
    模拟信号噪声:xn(t)=Acos(2πft),f为噪声频率,设定8kHz。
    语音信号的采样频率为fs,周期为T,则:
    以语音信号采样频率对模拟噪声采样得xn(nT)=Acos(2πfnT),xn(n)=Acos(2πfn/fs),得数字噪声信号矩阵(n取值范围是1到语音信号长度N)。噪声信号矩阵与语音信号矩阵相加得到加噪信号矩阵。
  3. 低通滤波器设计:
    这次采用IIR巴特沃斯低通滤波器。低通滤波器得技术指标为:通带边界频率fp=3000Hz,阻带边界频率Fs=4000Hz,通带最大衰减1db,阻带最小衰减60db。按照IIR设计出滤波器。因为人声在300Hz到3.4KHz,噪声得频率在8kHz,因此噪声信号被滤除,语音信号稍微缺失一点。
    四、实验代码


clear

clc

[audio,fs]=audioread('test.wav');%声音读取

audio = audio(:,1); %双通道变单通道

n=length(audio);

 

 

T = 1/fs;%采样间隔

t = (0:n-1)*T;%时间轴

f = (0:n-1)/n*fs;%频率轴

 

 %快速傅里叶变换

audio_fft=fft(audio,n)*T; 

 

%加噪声

tt =(1:n);

noise=0.02*cos(8000*2*pi/fs*tt');%加噪声

s=audio+noise;

s_fft=fft(s,n)*T; 

 

%设计IIR低通滤波器

rp = 1;

rs=60;

Ft=fs;

Fp=2000;

Fs=4000;                                        

 

wp=2*pi*Fp/Ft;

ws = 2*pi*Fs/Ft ;   %求出待设计的模拟滤波器的边界频率

 

[N,wn]=buttord(wp,ws,rp,rs,'s');    %低通滤波器的阶数和截止频率

[b,a]=butter(N,wn,'s');             %S域频率响应的参数即:滤波器的传输函数

[bz,az]=bilinear(b,a,0.5);          %利用双线性变换实现频率响应S域到Z域的变换

 

figure(2);%低通滤波器特性

[h,w]=freqz(bz,az);

title('IIR低通滤波器');

plot(w*fs/(2*pi),abs(h));

grid;

 

 

%滤波

z=filter(bz,az,s);

z_fft=fft(z);     %滤波后的信号频谱

 

figure(1); 

 

%绘出原始音频时域波

subplot(2,3,1);

plot(t,audio);   

xlabel('时间/s');

ylabel('幅度');

title('初始信号波形');  

grid;

 

 %绘出原始音频频域频谱

subplot(2,3,4); 

audiof = abs(audio_fft);

plot(f(1:(n-1)/2),audiof(1:(n-1)/2));

title('初始信号频谱');

xlabel('频率/Hz');

ylabel('幅度');

grid;

 

%绘出加噪音频时域波

subplot(2,3,2)

plot(t,s);

title('加噪声后信号波形')

xlabel('时间/s');

ylabel('幅度');

grid;

 

 %绘出加噪音频频域频谱

subplot(2,3,5)

sf = abs(s_fft);

plot(f(1:(n-1)/2),sf(1:(n-1)/2));

xlabel('频率/Hz');

ylabel('幅度');

title('加噪声后信号信号频谱');

grid;

 

%绘出滤波音频时域波

subplot(2,3,3);

plot(t,z);

title('低通滤波后的信号波形');

xlabel('时间/s');

ylabel('幅度');

grid;

 

%绘出滤波音频频域波

subplot(2,3,6);

zf = abs(z_fft);

plot(f(1:(n-1)/2),zf(1:(n-1)/2));

title('低通滤波后信号的频谱');

xlabel('频率/Hz');

ylabel('幅度');

grid;

 

audio_final = [audio;s;z];%原始语音,加噪语音,滤波语音的合成音频矩阵

sound(audio_final,fs); %播放语音


五、实验结果

滤波器幅频特性

基于matlab的音频信号低通滤波实验_第1张图片
各个时频域图

基于matlab的音频信号低通滤波实验_第2张图片

你可能感兴趣的:(matlab)