当前位置:文档之家› 语音信号的频谱分析和FIR滤波器的设计要点

语音信号的频谱分析和FIR滤波器的设计要点

目录一.绪论1.课题背景 (2)2.本次课程设计的目的 (2)二.设计原理及实验工具1.设计原理(1)采样频率、位数及采样定理 (3)(2)时域信号的FFT分析 (4)(3)基于窗函数的FIR数字滤波器设计法 (4)2.实验工具 (5)三.仿真程序及频谱分析1.语音信号的频谱分析 (5)2.FFT频谱分析 (7)3.FIR数字低通滤波器的设计 (8)4.FIR数字高通滤波器的设计 (10)5.FIR数字带通滤波器的设计 (13)6.保存滤波后的声音文件 (15)五.设计总结 (15)六.参考文献 (16)一.绪论1.课题背景随着信息时代和数字世界的到来,数字信号处理己成为当今一门极其重要的学科和技术领域,数字信号处理在通信、语音、图像、自动控制、医疗和家用电器等众多领域得到了广泛的应用。

任意一个信号都具有时域与频域特性,信号的频谱完全代表了信号,因而研究信号的频谱就等于研究信号本身。

通常从频域角度对信号进行分析与处理,容易对信号的特性获得深入的了解。

因此,信号的频谱分析是数字信号处理技术中的一种较为重要的工具。

在工程领域中,MATLAB 是一种倍受程序开发人员青睐的语言,对于一些需要做大量数据运算处理的复杂应用以及某些复杂的频谱分析算法MATLAB显得游刃有余。

2.本次课程设计的目的(1)掌握傅里叶变换的物理意义,深刻理解傅里叶变换的内涵(2)了解matlab对声音信号的处理指令(3)聊二级计算机存储信号的方式及语音信号的特点(4)加深对采样定理的理解(5)加深对信号分析工程应用的理解,拓展学生在信号分析领域的综合应用能力(6)掌握用窗函数法设计FIR数字滤波器的原理和方法(7)掌握FIR滤波器的快速卷积实现原理。

(8)学会调用MATLAB函数设计与实现FIR滤波器二.实验原理、工具1.实验原理(1)采样频率、位数及采样定理采样频率:定义了每秒从连续信号中提取并组成离散信号的采样个数,用赫兹(Hz)来表示。

采样频率的倒数是采样周期,它是采样之间的时间间隔,是指计算机每秒钟采集多少个声音样本,是描述声音文件的音质、音调,衡量声卡、声音文件的质量标准,采样频率越高,即采样的时间间隔越短,则在单位时间内计算机得到的声音样本数据就越多,对声音波形的表示也越精确。

采样位数:数值越大,解析度越高,录制的回放的声音数就越真实。

由于语音信号是一种连续变化的模拟信号,而计算机只能处理和记录二进制的数字信号,因此,由自然音而得的音频信号必须经过采样、量化和编码,变成二进制数据后才能送到计算机进行再编辑和存储。

语音信号输出时,则与上述过程相反,用计算机的声音编辑工具进行语音信号的录制时,已经利用了计算机上的A/D转换器,将模拟的声音信号转化成离散的量化了的数字信号。

话音时,量化了的数字信号又通过D/A转换器,把保存起来的数字数据恢复成原来的模拟的语音信号采样定理:采样就是利用抽样脉冲序列从连续信号中抽取一系列离散样值构成抽样信号。

抽样的意义就在于能够从抽样信号中无失真地恢复元连续信号。

在进行模拟/数字信号的转换过程中,当采样频率不小于信号中最高频率fm的2倍时,即fs>=2fm,则采样之后的数字信号完整地保留了原始信号中的信息。

(2)时域信号的FFT分析信号的频谱分析就是计算机信号的傅里叶变换。

FFT是一种时域和频域均离散化的变换,是DFT的一种快速算法,是对变换式进行一次次分解,使其成为若干小数据点的组合,从而减少运算量。

当所处理的数据的长度为2的幂次时,采用基-2算法进行计算,计算速度会显著增加。

FFT函数调用方式:1.Y=FFT(X);2.Y=FFT(X,N);3.Y=FFT(X,[],dim)或Y=FFT(X,N,dim)。

(3)基于窗函数的FIR数字滤波器设计法用一定宽度窗函数截取无限脉冲响应序列,获得有限长的脉冲响应序列,从而得到FIR滤波器,它是在时域进行的由理想滤波器的频率响应推导出其单位冲激响应,再设计一个FIR数字滤波器的单位冲激响应h(n)去逼近,它表示,由此得到的离散滤波器的系统传递函数为无限长序列,因此是物理不可实现的。

为了使系统变为物理可实现,且使实际的FIR滤波器频率响应尽可能逼近理想滤波器的频响特性,采用窗函数将无限脉冲响应截取一段h(n)来近似表示,可得。

从而有:式中N表示窗口长度,这样H(z)就是物理可实现的系统。

并且从线性相位FIR滤波器的充要条件可知,为了获得线性相位FIR数字滤波器的脉冲响应h(n),那么h(n)应有t=(N-1)/2的延迟,由于窗函数的选择对结果起着重要的作用,针对不同的信号和不同的处理目的来确定窗函数的选择才能收到良好的效果。

2.实验工具:MATLAB 7.0三.设计过程1.语音信号的频谱分析(1)利用录音软件录制一段自己的声音,保存为.wav格式,并将其保存在matlab的工作空间work中。

Save and run ,得出频谱分析图(2)程序:[x1,fs,bits]=wavread('C:\MATLAB7\work\sy.wav');%读取语音信号的数据,赋给变量x1figure(1)plot(x1) %做原始语音信号以44.1k采样后的时域图形title('原始语音采样后时域信号');xlabel('时间轴 n');ylabel('幅值 A');figure(2)freqz(x1) %绘制原始语音信号采样后的频率响应图title('原始语音信号采样后频率响应图');[x1,fs,bits]=wavread('sy.wav'); %读取语音信号的数据,赋给变量x1 sound(x1,fs); %播放语音信号(3)频谱图2.FFT频谱分析(1)程序:[x1,fs,bits]=wavread('sy.wav'); %读取语音信号的数据,赋给变量x1 y1=fft(x1,1024); %对采样后信号做1024点FFT变换f=fs*(0:511)/1024;figure(1)subplot(2,1,1);plot(f,abs(y1(1:512)));title('原始语音信号频谱')xlabel('频率/Hz');ylabel('幅值')subplot(2,1,2);plot(abs(y1(1:1024))) %采样后信号的FFT频谱图title('原始语音信号FFT频谱')xlabel('点数N');ylabel('幅值');(2)频谱图3.FIR数字低通滤波器的设计(1)程序:fs=10000;x1=wavread('sy.wav');wp=2*pi*1000/fs;ws=2*pi*1200/fs;Rp=1;Rs=100;wdelta=ws-wp;N=ceil(8*pi/wdelta); %取整wn=(wp+ws)/2;[b,a]=fir1(N,wn/pi,hamming(N+1)); %选择窗函数,并归一化截止频率figure(1)freqz(b,a,512);title('FIR低通滤波器');f2=filter(b,a,x1);figure(2)subplot(2,1,1)plot(x1)title('FIR低通滤波器滤波前的时域波形');subplot(2,1,2)plot(f2);title('FIR低通滤波器滤波后的时域波形');sound(f2,7000); %播放滤波后的语音信号F0=fft(f2,1024);f=fs*(0:511)/1024;figure(3)y2=fft(x1,1024);subplot(2,1,1);plot(f,abs(y2(1:512)));title('FIR低通滤波器滤波前的频谱')xlabel('频率/Hz');ylabel('幅值');subplot(2,1,2)F2=plot(f,abs(F0(1:512)));title('FIR低通滤波器滤波后的频谱')xlabel('频率/Hz');ylabel('幅值');(2)频谱图4.FIR高通滤波器的设计(1)程序fs=22050;x1=wavread('sy.wav');wp=2*pi*5000/fs;ws=2*pi*4800/fs;Rp=1;Rs=100;wdelta=wp-ws;N=ceil(8*pi/wdelta); %取整wn=(wp+ws)/2;[b,a]=fir1(N,wn/pi,'high');figure(1)freqz(b,a,512);title('FIR高通滤波器');f2=filter(b,a,x1);figure(2)subplot(2,1,1)plot(x1)title('FIR高通滤波器滤波前的时域波形');subplot(2,1,2)plot(f2);title('FIR高通滤波器滤波后的时域波形');sound(f2,20000); %播放滤波后的语音信号F0=fft(f2,1024);f=fs*(0:511)/1024;figure(3)y2=fft(x1,1024);subplot(2,1,1);plot(f,abs(y2(1:512)));title('FIR高通滤波器滤波前的频谱')xlabel('频率/Hz');ylabel('幅值');subplot(2,1,2)F2=plot(f,abs(F0(1:512)));title('FIR高通滤波器滤波后的频谱')xlabel('频率/Hz');ylabel('幅值');(2)频谱图5.FIR带通滤波器的设计(1)程序fs=22050;x1=wavread('sy.wav');wp1=2*pi*1200/fs;wp2=2*pi*3000/fs;ws1=2*pi*1000/fs;ws2=2*pi*3200/fs;Rp=1;Rs=100;wp=(wp1+ws1)/2;ws=(wp2+ws2)/2;wdelta=wp1-ws1;N=ceil(8*pi/wdelta); %取整wn=[wp ws];[b,a]=fir1(N,wn/pi,'bandpass');figure(1)freqz(b,a,512);title('FIR带通滤波器');f2=filter(b,a,x1);figure(2)subplot(2,1,1)plot(x1)title('FIR带通滤波器滤波前的时域波形');subplot(2,1,2)plot(f2);title('FIR带通滤波器滤波后的时域波形');sound(f2,10000); %播放滤波后的语音信号F0=fft(f2,1024);f=fs*(0:511)/1024;figure(3)y2=fft(x1,1024);subplot(2,1,1);plot(f,abs(y2(1:512)));title('FIR带通滤波器滤波前的频谱')xlabel('频率/Hz');ylabel('幅值');subplot(2,1,2)plot(f,abs(F0(1:512)));title('FIR带通滤波器滤波后的频谱')xlabel('频率/Hz');ylabel('幅值');(2)频谱图4.在程序最后添加wavwrite(f2,'保存的名字')语句五.设计总结本文主要是基于高级面向对象开发语言M A T L A B的基本特征,以及MATLAB强大的工具箱功能,实现信号的预处理和频谱分析。

相关主题