【DSP】FIR 数字滤波器的设计和实现

一、实验内容

    • 录制自己的一段声音,长度为 10秒,取样频率 32kHz,然后叠加一个高斯白噪声,使得信噪比为 20dB。请采用窗口法设计一个 FIR 带通滤波器,滤除噪声提高质量。
  • 滤波器指标参考:通带边缘频率为 4kHz,阻带边缘频率为4.5kHz,阻带衰减大于 50dB;
  • Matlab 函数 y = awgn(x,snr,'measured') ,首先测量输入信号 x 的功率,然后对其叠加高斯白噪声

二、实验结果

【DSP】FIR 数字滤波器的设计和实现_第1张图片

【DSP】FIR 数字滤波器的设计和实现_第2张图片

【DSP】FIR 数字滤波器的设计和实现_第3张图片

 三、代码及注释

clear;
close all;
%---------原始声音信号频谱---------------------------------------
[s1,fs]=audioread('phone2.wav');%在当前文件夹下读取音频文件
Fs=32000; %采样频率32kHz
N=4096; %fft点数
k=1:N;
slk=fft(s1,N);%对原始音频信号进行频谱分析
figure(1); %在图形文件1中显示与那是音频信号的时域和频谱
subplot(2,1,1);
plot(s1);
title('原始信号(时域)');
subplot(2,1,2);
plot(32/N*k,abs(slk)); %频率分辨率=fs/N
xlabel('f(kHz)');ylabel('sl(k)');
title('原声音信号(频域)');
sound(s1,fs);
pause(length(s1)/fs+0.5);

%---------------------叠加噪声----------------------------------
s2=awgn(s1,20,'measured','db');%计算功率并叠加噪声
s2k=fft(s2,N);%对叠加噪声过后的信号进行fft变换
figure(2);%在图形文件2中绘制叠加噪声后的时域频域辐频特性
subplot(2,1,1);
plot(s2);
title('时域(叠加噪声)');

subplot(2,1,2);
plot(32/4096*k,abs(s2k));
title('频域(叠加噪声后)');
sound(s2,fs);
pause(length(s2)/fs+0.5);

%------------设计滤波器过程-------------------------------
fp=4000;%通带起始频率
fr=4500;%阻带起始频率
wp=2*pi*fp/fs;%将滤波器指标转换到数字域
wr=2*pi*fr/fs;
width=wr-wp;%带宽
N1=ceil(6.6*pi/width)+1;%取整数
n=0:1:N1;
wc=(wr+wp)/2;%计算wc
alpha=(N1-1)/2;
n=0:1:N1-1;
m=n-alpha+eps;
hd=sin(wc*m)./(pi*m);
b=fir1(N1,wc/(4*pi/3.65));%返回截止频率为wc的N1阶滤波器hn,汉明窗

%----通过Fir函数设计出满足要求的滤波器--------------------------
w_hamming=(hamming(N1));
h=hd.*w_hamming;%加窗,即时域进行卷积
s3=filter(b,1,s2);%对s2进行滤波
sound(s3,fs);

%---------进行滤波处理------------------------------------------
figure(3);%在图形文件3中绘制滤波后的波形文件
subplot(2,1,1);
plot(s3);
title('时域(滤波后)');
s3k=fft(s3,N);%对滤波后的信号进行频谱分析
subplot(2,1,2);
plot(32/N*k,abs(s3k));
title('频域(滤波后)');
sound(s3,fs);
pause(length(s2)/fs+0.5);

 

 

你可能感兴趣的:(资料,算法,matlab)