《数字信号处理》实验报告
姓 名:_ ______
学 号:_ _____
专业班级:_ ______
联系电话:_ ______
2016年11月 24 日
一.实验目的
1、掌握使用 FFT 进行信号谱分析的方法
2、设计数字滤波器对指定的语音信号进行滤波处理
二.实验内容
1、使用 Matlab 的 fft 函数对语音信号进行频谱分析,找出干扰信号的频谱;
2、设计数字滤波器滤除语音信号中的干扰分量,并进行播放对比。
三.实验环境
Window xp
Matlab 2008b
四.实验内容
1. 观察分析原始语音信号特征:
原始信号时域图:(横坐标为以1/fs为单位的时间,纵坐标为信号幅值)
原始信号频域图:(横坐标为频率,纵坐标为信号fft幅值)
分析:从频域图可以看出噪声在0Hz,1575Hz,3150Hz,4725Hz。用hn=[1,A,1]进行滤波,|H(ejw)|=|A+2cosw|,在噪声频率处令|H(ejw)|=0算出A,用hn和原始信号卷积即可滤除噪声。
2.时域和频域滤波效果
滤波后信号时域图:(横坐标为以1/fs为单位的时间,纵坐标为信号幅值)
滤波后信号频域图:(横坐标为频率,纵坐标为信号fft幅值)
五.实验结果分析
从滤波后信号时域图可以看出原来幅值反常噪声已经滤除,滤波后信号频域图原来幅值很大的8个冲激已经被滤除了。
六.MATLAB源代码
clear;
%读取声音信号
[xn,fs] = wavread('SunshineSquare.wav');
n = 0:length(xn)-1;
f = n*fs/length(xn);
XK = fft(xn);
figure(1);
subplot(2,2,1);plot(xn);title('原始信号时域图');ylabel('xn');
subplot(2,2,2);plot(f, abs(XK));title('原始信号频域图');xlabel('f/Hz');ylabel('XK');
%4次滤波
yn = band(xn, 0, fs);
yn = band(yn, 1575, fs);
yn = band(yn, 3150, fs);
yn = band(yn, 4725, fs);
yn(85440:85455) = xn(1:16);
yn(118500:length(yn))=xn(1:length(yn)-118500+1);
n1 = 0:length(yn)-1;
f1 = n1*fs/length(yn);
YK = fft(yn);
subplot(2,2,3);plot(yn);title('滤波后信号时域图');ylabel('yn');
subplot(2,2,4);plot(f1, abs(YK));title('滤波后信号频域图');xlabel('f/Hz');ylabel('YK');
wavwrite(yn,fs,'SunshineSquare_New.wav');
function [ y ] = band(xn, f, fs)
%设计滤波器
w = 2*pi*f/fs;
A = -2*cos(w);
hn = [1, A, 1];
y = conv(xn, hn);
end