基于MATLAB的数字滤波器语音信号去噪

炒股不求人 科技新闻 2024-10-11 17052 0

1.1设计目标

(1)利用Windows下的录音或其他软件,采集一段语音信号,名为“add.wav”,利用MATLAB中的audioread命令对该信号进行采样;

(2)根据语音信号的频率图选择合适的单频噪声;

(3)根据加入的噪声选择合适的滤波器

(4)利用设计好的滤波器滤除加入的高频噪声,得到原语音信号。

利用的是用汉明窗函数法设计出FIR低通滤波器。

(1)程序代码

Fs=22050;

[y,Fs] = audioread('E:shukdrightadd.wav');

N=length(y); %采样点数

y=y(:,1);

Z=fft(y,1200);

Z=abs(Z);%取绝对值,只显示y轴的正半轴

f=(Fs/1630)*[1:1630];

figure(1);

subplot(2,1,1);plot(y);xlabel(‘t’);title('原始信号时域波形图');

subplot(2,1,2);plot(f(1:800),Z(1:800));xlabei(‘Hz’)

title('原始语音信号采样后的频谱图');

%sound(y, Fs) %听原始音频

%单频噪声

t=0:length(y)-1;

zs=0.1*cos(2*pi*10000*t/2100);

zs0=0.1*cos(2*pi*10000*t/200000000);

zs1=fft(zs,1200);

zs1=abs(zs1);

figure(2);

subplot(2,1,1)

plot(zs0)

title('噪声信号波形');

subplot(2,1,2)

plot(f(1:800),zs1(1:800));

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

%加噪声

x1=y+zs';

y1=fft(x1,1200);

y1=abs(y1);

figure(3);

subplot(2,1,1);plot(x1);

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

subplot(2,1,2);

plot(f(1:800),y1(1:800));

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

%sound(x1,Fs); %回放加入噪声后的语音

%滤波器FIR滤波器 汉明窗

fp1=9500; % 通带和阻带频率

fs1=10000;

wp1=2*pi*fp1/Fs;

ws1=2*pi*fs1/Fs;

deltaw=ws1-wp1;%过渡带宽

N0=ceil(6.6*pi/deltaw);

N=N0+mod(N0+1,2); %为实现FIR类型1偶对称滤波器,应确保N为奇数

windows=hamming(N);%使用哈明窗,此句可省略

wc=(ws1+wp1)/2;

b=fir1(N-1,wc/pi,windows);%用fir1函数求系统函数系数,windows可省略

[db,mag,pha,grd,w]=freqz_m(b,1);

n=0:N-1;dw=2*pi/1000;

Rp=-(min(db(1:wp1/dw+1))); %检验通带波动

As=-round(max(db(ws1/dw+1:501))); %检验最小阻带衰减

figure(4);

subplot(2,1,1);plot(w/pi/2*Fs,db);axis([0,Fs/2,-200,10]);

title('幅度频率响应');

xlabel('频率(单位:Hz)');ylabel('H(e^{jomega})');

set(gca,'XTickMode','manual','XTick',[0,fp1,fs1,15000]);

set(gca,'YTickMode','manual','YTick',[-100,-50,-3,0]);grid

subplot(2,1,2);plot(w/pi/2*Fs,pha);axis([0,Fs/2,-4,4]);

title('相位频率响应');

xlabel('频率(单位:Hz)');ylabel('phi(omega)');

set(gca,'XTickMode','manual','XTick',[0,fp1,fs1,15000]);

set(gca,'YTickMode','manual','YTick',[-pi,0,pi]);grid

%滤波

h1=filter(b,1,x1);% 用filter函数进行滤波

X1=fft(h1,1200);

X1=abs(X1);

figure(5);

subplot(211);plot(h1);title('滤波后时域图');xlabel('t');

subplot(212);plot(f(1:800),X1(1:800));title('滤波后频谱图');

xlabel('频率(Hz)');

%sound(y, Fs); %听原始音频

%sound(x1,Fs); %回放加入噪声后的语音

%sound(h1,Fs); %听去噪音频

% clear sound %%终止播放

(2)运行结果展示

N =293

Rp =0.0269

As = 54

wKgZoWcHqe-AN7SDAF_SzB7ijzg758.png

但是太久了具体细节我也记得,有啥问题,自己摸索一下,嘿嘿嘿嘿,对了,音频文件的位置要跟代码写的一样,不然软件会找不音频的。

审核编辑 黄宇