应用matlab对语音信号进行频谱分析及滤波
- 格式:doc
- 大小:541.50 KB
- 文档页数:23
探究性学习之二--应用MatLab对语音信号进行频谱分析及滤波一、课题目的1.通过课下的自我的学习,加深对书本理论知识的理解,提升自身的实际应用能力;2.巩固所学的数字信号处理理论知识,使自身对信号的采集、处理、传输、显示和存储等有一个系统的掌握和理解;3.培养自我学习的能力和对相关课程的兴趣;二、课题内容录制一段个人自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;给定滤波器的性能指标,采用窗函数法和双线性变换设计滤波器,并画出滤波器的频率响应;然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;回放语音信号;最后,设计一个信号处理系统界面。
三、具体实现1.语音信号的采集利用Windows下的录音机,录制一段自己的话音,时间在1 s内。
然后在Matlab软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。
通过wavread函数的使用,我们很快理解了采样频率、采样位数等概念。
2.语音信号的频谱分析要求学生首先画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到信号的频谱特性,从而加深学生对频谱特性的理解。
程序如下:clc;clear;close all;fs=22050; %语音信号采样频率为22050x1=wavread('wo.wav'); %读取语音信号的数据,赋给变量x1sound(x1,22050); %播放语音信号y1=fft(x1,1024); %对信号做1024点FFT变换f=fs*(0:511)/1024;figure(1);plot(x1) %做原始语音信号的时域图形title('原始语音信号');xlabel('time n');ylabel('fuzhi n');figure(2);freqz(x1) %绘制原始语音信号的频率响应图title('频率响应图')figure(3);subplot(2,1,1);plot(abs(y1(1:512))) %做原始语音信号的FFT频谱图??title('原始语音信号FFT频谱');subplot(2,1,2);plot(f,abs(y1(1:512)));%同一个图???title('原始语音信号频谱')xlabel('Hz');ylabel('fuzhi'); 波形如下:-1-0.8-0.6-0.4-0.200.20.40.60.81原始语音信号time nf u z h i n-10-5054Normalized Frequency (⨯π rad/sample)P h a s e (d e g r e e s)-200204060Normalized Frequency (⨯π rad/sample)M a g n i t u d e (d B )频率响应图010203040原始语音信号FFT 频谱010203040原始语音信号频谱Hzf u z h i3. 滤波电路设计给出低通滤波器性能指标fb =1000 Hz ,fc =1200 Hz ,Rs =15 dB ,Rp =1 dB 。
MATLAB处理语⾳信号⼀、实验项⽬名称语⾳信号的处理⼆、实验⽬的综合运⽤数字信号处理课程的理论知识进⾏频谱分析以及滤波器设计,通过理论推导得出相应结论,并进⾏计算机仿真,从⽽复习巩固了课堂所学的理论知识,提⾼了对所学知识的综合应⽤能⼒。
三、实验内容1. 语⾳信号的采集2. 语⾳信号的频谱分析3. 设计数字滤波器和画出频率响应4. ⽤滤波器对信号进⾏滤波5. ⽐较滤波前后语⾳信号的波形及频谱6. 回放语⾳信号四、实验具体⽅案1.语⾳信号采集录制⼀段语⾳信号并保存为⽂件,长度控制在1秒,并对录制的信号进⾏采样;录制时使⽤Windows⾃带的录⾳机。
采样是将⼀个信号(即时间或空间上的连续函数)转换成⼀个数值序列(即时间或空间上的离散函数)。
采样定理指出,如果信号是带限的,并且采样频率⾼于信号带宽的两倍,那么,原来的连续信号可以从采样样本中完全重建出来。
如果信号带宽不到采样频率的⼀半(即奈奎斯特频率),那么此时这些离散的采样点能够完全表⽰原信号。
⾼于或处于奈奎斯特频率的频率分量会导致混叠现象。
⼤多数应⽤都要求避免混叠,混叠问题的严重程度与这些混叠频率分量的相对强度有关。
⽤Windows⾃带录⾳机录⼊⼀段⾳乐,2秒钟,⽤audioread读取⾳频内容,这⾥不使⽤waveread是因为他要求⾳频⽂件格式为.wav ,并且我进⾏了尝试但没有成功,画出⾳频信号的时域波形图[y1,fs]=audioread('F:\MATLAB\ren.m4a');figure(1);plot( y1 );title('Ô原语⾳信号时域波形图');xlabel('单位');ylabel('幅度');2.语⾳信号频谱分析⾸先画出语⾳信号的时域波形,然后对语⾳信号进⾏频谱分析。
在matlab中利⽤fft对信号进⾏快速傅⾥叶变换,得到信号的频谱特性。
Matlab的信号处理⼯具箱中的函数FFT可⽤于对序列的快速傅⾥叶变换分析,其调⽤格式是y=fft(x,N),其中,x是序列,y是序列的FFT变换结果,N为整数,代表做N点的FFT,若x为向量且长度⼩于N,则函数将x补零⾄长度N;若向量x长度⼤于N,则截断x使之长度为N。
用MATLAB设计对信号进行频谱分析和滤波处理的程序设计出一套完整的系统,对信号进行频谱分析和滤波处理:1.产生一个连续信号,包含低频,中频,高频分量,对其进行采样,进行频谱分析,分别设计三种高通,低通,带通滤波器对信号进行滤波处理,观察滤波后信号的频谱。
2.采集一段含有噪音的语音信号(可以录制含有噪音的信号,或者录制语音后再加进噪音信号),对其进行采样和频谱分析,根据分析结果设计出一合适的滤波器滤除噪音信号。
完整的程序%写上标题%设计低通滤波器:[N,Wc]=buttord()%估算得到Butterworth低通滤波器的最小阶数N和3dB截止频率Wc[a,b]=butter(N,Wc); %设计Butterworth低通滤波器[h,f]=freqz(); %求数字低通滤波器的频率响应figure(2); % 打开窗口2subplot(221); %图形显示分割窗口plot(f,abs(h)); %绘制Butterworth低通滤波器的幅频响应图title(巴氏低通滤波器'');grid; %绘制带网格的图像sf=filter(a,b,s); %叠加函数S经过低通滤波器以后的新函数subplot(222);plot(t,sf); %绘制叠加函数S经过低通滤波器以后的时域图形xlabel('时间 (seconds)');ylabel('时间按幅度');SF=fft(sf,256); %对叠加函数S经过低通滤波器以后的新函数进行256点的基—2快速傅立叶变换w= %新信号角频率subplot(223);plot()); %绘制叠加函数S经过低通滤波器以后的频谱图title('低通滤波后的频谱图');%设计高通滤波器[N,Wc]=buttord()%估算得到Butterworth高通滤波器的最小阶数N和3dB截止频率Wc[a,b]=butter(N,Wc,'high'); %设计Butterworth高通滤波器[h,f]=freqz(); %求数字高通滤波器的频率响应figure(3);subplot(221);plot()); %绘制Butterworth高通滤波器的幅频响应图title('巴氏高通滤波器');grid; %绘制带网格的图像sf=filter(); %叠加函数S经过高通滤波器以后的新函数subplot(222);plot(t,sf); ;%绘制叠加函数S经过高通滤波器以后的时域图形xlabel('Time(seconds)');ylabel('Time waveform');w; %新信号角频率subplot(223);plot()); %绘制叠加函数S经过高通滤波器以后的频谱图title('高通滤波后的频谱图');%设计带通滤波器[N,Wc]=buttord([)%估算得到Butterworth带通滤波器的最小阶数N和3dB截止频率Wc[a,b]=butter(N,Wc); %设计Butterworth带通滤波器[h,f]=freqz(); %求数字带通滤波器的频率响应figure(4);subplot(221);plot(f,abs(h)); %绘制Butterworth带通滤波器的幅频响应图title('butter bandpass filter');grid; %绘制带网格的图像sf=filter(a,b,s); %叠加函数S经过带通滤波器以后的新函数subplot(222);plot(t,sf); %绘制叠加函数S经过带通滤波器以后的时域图形xlabel('Time(seconds)');ylabel('Time waveform');SF=fft(); %对叠加函数S经过带通滤波器以后的新函数进行256点的基—2快速傅立叶变换w=( %新信号角频率subplot(223);plot(')); %绘制叠加函数S经过带通滤波器以后的频谱图title('带通滤波后的频谱图');。
一.综合实验题目应用MatLab对语音信号进行频谱分析及滤波二.主要内容录制一段个人自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;给定滤波器的性能指标,采用窗函数法和双线性变换设计滤波器,并画出滤波器的频率响应;然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;回放语音信号;课程设计应完成的工作:1、语音信号的采集;2、语音信号的频谱分析;3、数字滤波器的设计;4、对语音信号进行滤波处理;5、对滤波前后的语音信号频谱进行对比分析;三.具体要求1、学生能够根据设计内容积极主动查找相关资料;2、滤波器的性能指标可以根据实际情况作调整;3、对设计结果进行独立思考和分析;4、设计完成后,要提交相关的文档;1)课程设计报告书(纸质和电子版各一份,具体格式参照学校课程设计管理规定),报告内容要涵盖设计题目、设计任务、详细的设计过程、原理说明、频谱图的分析、调试总结、心得体会、参考文献(在报告中参考文献要做标注,不少于5篇)。
2)可运行的源程序代码(电子版)四.进度安排在基本要求的基础上,学生可根据个人对该课程设计的理解,添加一些新的内容。
五.成绩评定(1)平时成绩:无故旷课一次,平时成绩减半;无故旷课两次平时成绩为0分,无故旷课三次总成绩为0分。
迟到15分钟按旷课处理(2)设计成绩:按照实际的设计过程及最终的实现结果给出相应的成绩。
(3)设计报告成绩:按照提交报告的质量给出相应的成绩。
课程设计成绩=平时成绩(30%)+设计成绩(30%)+设计报告成绩(40%)目录第一节实验任务 (3)第二节实验原理 (3)2.1 采样频率、位数及采样定理 (3)2.2 时域信号的FFT分析 (4)2.3 IIR数字滤波器设计原理 (4)2.4 FIR数字滤波器设计原理 (4)第三节实验过程 (5)3.1原始语音信号采样后的时域、频域分析 (5)3.2采样后信号的FFT变换分析 (7)3.3双线性变换法设计IIR数字滤波器 (8)3.4窗函数法设计FIR数字滤波器 (11)第四节心得体会 (14)第五节参考文献 (15)应用MatLab对语音信号进行频谱分析及滤波第一节实验任务录制一段个人自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;给定滤波器的性能指标,采用窗函数法和双线性变换设计滤波器,并画出滤波器的频率响应;然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;回放语音信号。
应用Matlab对含噪声语音信号进行频谱分析及滤波频谱分析是对信号的频率特性进行研究和描述的一种方法,而滤波是对信号进行去除或者强调特定频率成份的处理。
在语音信号处理中,频谱分析及滤波常用于去除噪声、增强语音信号的清晰度和可听度。
Matlab作为一种强大的科学计算软件,提供了丰富的工具和函数用于频谱分析和滤波。
下面将详细介绍如何使用Matlab对含噪声语音信号进行频谱分析及滤波的步骤和方法。
1. 导入语音信号首先,我们需要将含噪声的语音信号导入到Matlab中进行处理。
可以使用Matlab提供的`audioread()`函数读取语音文件,并将其存储为一个向量。
```matlab[y, Fs] = audioread('noisy_speech.wav');```其中,`y`是读取到的语音信号向量,`Fs`是采样率。
如果语音文件的采样率不是默认的16kHz,可以使用`resample()`函数调整采样率。
2. 绘制时域波形为了对语音信号有一个直观的了解,可以绘制其时域波形图。
使用Matlab的`plot()`函数可以实现这一目标。
```matlabt = (0:length(y)-1)/Fs;plot(t, y);xlabel('Time (s)');ylabel('Amplitude');title('Time Domain Waveform');```这段代码将绘制出含噪声语音信号的时域波形图,横轴表示时间,纵轴表示信号的幅值。
3. 进行频谱分析频谱分析可以匡助我们了解语音信号在不同频率上的能量分布情况。
在Matlab 中,可以使用`fft()`函数对语音信号进行傅里叶变换,得到其频谱。
```matlabN = length(y);Y = fft(y);P = abs(Y).^2/N;f = Fs*(0:(N/2))/N;plot(f, 10*log10(P(1:N/2+1)));xlabel('Frequency (Hz)');ylabel('Power (dB)');title('Power Spectrum');```上述代码将绘制出含噪声语音信号的功率谱图,横轴表示频率,纵轴表示功率(以分贝为单位)。
利用MATLAB软件对音频信号进行频谱分析与处理一、简介频谱分析是通过对信号的频率成分进行分析,它允许我们了解信号的特性,计算信号的能量分布,同时还可以用来定位造成干扰的频率组件,以及检测和分析信号的变化。
MATLAB是一种编程语言和科学计算软件,它可以非常便捷地实现对音频信号的频谱分析和处理。
二、实现方法1.导入音频信号在使用MATLAB进行频谱分析时,首先需要先将音频信号导入MATLAB环境中。
可以使用audioplayer和audioread函数来完成这一步骤,示例代码如下:[audioData, fs] = audioread(‘AudioFile.wav’);player = audioplayer(audioData, fs);play(player);其中audioData表示从wav文件中读取的音频数据,fs表示采样率,player表示存储audioData和fs的audioplayer实例,play函数可以播放音频文件。
2.信号预处理针对所记录的音频信号,需要进行一些基本的信号处理操作,包括去噪、均衡、时域平均等。
去噪可以用MATLAB内置的函数完成,例如:audioData_NoiseRemoved = denoise(audioData,‘meanspectrum’);均衡是指将频谱的一些区域调整到更好的水平,可以用equalizer函数实现:audioData_Equalized = equalizer(audioData, ‘bandwidth’, 0.2);时域平均则可以使用conv函数实现:audioData_Meaned = conv(audioData, [1/N 1/N ... 1/N]);3.频谱分析频谱分析的主要工作是计算信号的谱密度,也就是每一个频率分量的能量。
数字信号处理课程设计报告书应用Matlab对语音信号进行频谱分析及滤波题目:应用Matlab 对语音信号进行频谱分析及滤波一、课程设计内容录制一段个人自己的语音信号,画出此语音信号的时域波形和频谱图;给定滤波器的性能指标,设计IIR 和FIR 滤波器,并画出滤波器的频率响应;然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;回放语音信号;最后,设计一个信号处理系统界面。
二、课程设计目的1、进一步巩固数字信号处理的基本概念、理论、分析方法和实现方法;2、增强应用Mat lab 语言编写数字信号处理的应用程序及分析、解决实际问题的能力。
三、设计内容及步骤1、语音信号的采集利用matlab 的内置函数,设计一个录音器,录制一段自己的话音,时间在1s 内。
然后在Matlab 软件平台下,利用函数w avread 提取录制的语音信号,记住采样频率和采样点数。
说明:由于录音程序录制后用w avwrite 和w avrec ord 时一直出现错误,无法运行,在这里用[filen ame,filepath]=uig etfile('.w av','Open w av file'); [y,fs,nbits]=w avread([filepath,filen ame]);格式打开本地一个已录制好的w av 文件进行分析。
2 、语音信号的频谱分析首先画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到信号的频谱特性,从而加深对频谱特性的理解。
3、设计数字滤波器和画出其频率响应用窗函数法和双线性变换法设计下面要求的3种滤波器。
(1)低通滤波器性能指标通带截止频率c f =1000Hz ,阻带截止频率st f =1200 Hz ,通带最大衰减1δ=1dB ,阻带最小衰减2δ=100d B 。
(2)高通滤波器性能指标通带截止频率c f =5000Hz ,阻带截止频率st f =3000 通带衰减1δ≤1dB ,阻带衰减2δ≥100d B 。
基于MATLAB的语音信号分析及滤波MATLAB是一种强大的数值计算和数据分析工具,也可以用于语音信号的分析和滤波。
本文将介绍基于MATLAB的语音信号分析和滤波方法。
首先,我们需要将语音信号导入MATLAB中进行分析。
语音信号可以以.wav格式的文件保存,可以使用`audioread`函数将.wav文件导入MATLAB中。
例如:```matlab[x, fs] = audioread('speech.wav');```其中,`x`是导入的语音信号,`fs`是采样率。
接下来,我们可以通过绘制波形图和频谱图来对语音信号进行分析。
波形图可以用`plot`函数绘制,频谱图可以用`spectrogram`函数绘制。
```matlabsubplot(2, 1, 1);plot(x);title('Waveform');xlabel('Sample');ylabel('Amplitude');subplot(2, 1, 2);spectrogram(x, hann(256), 128, 512, fs, 'yaxis');title('Spectrogram');```绘制的波形图显示了语音信号的振幅随时间的变化,而频谱图显示了语音信号在不同频率上的能量分布。
在分析完语音信号的基本特征后,我们可以应用滤波器对语音信号进行滤波。
常用的语音信号滤波器包括低通滤波器、高通滤波器和带通滤波器。
可以使用MATLAB中的`filter`函数来应用这些滤波器。
例如,下面的代码展示了如何使用低通滤波器对语音信号进行滤波:```matlabfc = 4000; % 截止频率为4000 Hz[b, a] = butter(6, fc/(fs/2), 'low'); % 6阶Butterworth低通滤波器filtered_x = filter(b, a, x);figure;subplot(2, 1, 1);plot(x);title('Original Signal');xlabel('Sample');ylabel('Amplitude');subplot(2, 1, 2);plot(filtered_x);title('Filtered Signal');xlabel('Sample');ylabel('Amplitude');```通过调整截止频率和滤波器阶数,可以实现不同的滤波效果。
应用MATLAB对信号进行频谱分析及滤波频谱分析和滤波是信号处理中常用的技术,可以帮助我们了解信号的频率特性并对信号进行去噪或增强。
MATLAB是一个强大的数学计算和工程仿真软件,提供了各种工具和函数用于频谱分析和滤波。
频谱分析是通过将信号在频域上进行分解来研究信号的频率特性。
MATLAB提供了几种进行频谱分析的函数,包括FFT(快速傅里叶变换)、periodogram和spectrogram等。
下面将以FFT为例,介绍如何使用MATLAB进行频谱分析。
首先,我们需要先生成一个信号用于频谱分析。
可以使用MATLAB提供的随机信号生成函数来生成一个特定频率和幅度的信号。
例如,可以使用以下代码生成一个包含两个频率成分的信号:```MATLABFs=1000;%采样率t=0:1/Fs:1;%时间向量,从0秒到1秒,采样率为Fsf1=10;%第一个频率成分f2=50;%第二个频率成分A1=1;%第一个频率成分的幅度A2=0.5;%第二个频率成分的幅度x = A1*sin(2*pi*f1*t) + A2*sin(2*pi*f2*t);```上述代码生成了一个采样率为1000Hz的信号,包含10Hz和50Hz两个频率的成分。
接下来,我们可以使用MATLAB的FFT函数对信号进行频谱分析,并将频谱绘制出来。
FFT函数将信号从时域转换到频域,并返回频谱幅度和频率信息。
以下是使用FFT函数对上述生成的信号进行频谱分析的代码:```MATLABN = length(x); % 信号长度X = abs(fft(x))/N; % 计算FFTf=(0:N-1)*(Fs/N);%计算频率坐标plot(f,X)xlabel('频率(Hz)')ylabel('幅度')title('信号频谱')```上述代码中,我们首先计算FFT并将结果除以信号长度,以得到正确的幅度值。
然后,我们计算频率坐标,并将频谱幅度与频率绘制出来。
应用MATLAB对信号进行频谱分析及滤波fs=input('please input the fs:');%设定采样频率N=input('please input the N:');%设定数据长度t=0:0.001:1;f=100;%设定正弦信号频率%生成正弦信号x=sin(2*pi*f*t);figure(1);subplot(211);plot(t,x);%作正弦信号的时域波形axis([0,0.1,-1,1]);title('正弦信号时域波形');z=square(50*t);subplot(212)plot(t,z)axis([0,1,-2,2]);title('方波信号时域波形');grid;%进行FFT变换并做频谱图y=fft(x,N);%进行fft变换mag=abs(y);%求幅值f=(0:N-1)*fs/N;%横坐标频率的表达式为f=(0:M-1)*Fs/M; figure(2);subplot(211);plot(f,mag);%做频谱图axis([0,1000,0,200]);title('正弦信号幅频谱图');y1=fft(z,N);%进行fft变换mag=abs(y1);%求幅值f=(0:N-1)*fs/N;%横坐标频率的表达式为f=(0:M-1)*Fs/M; subplot(212);plot(f,mag);%做频谱图axis([0,1000,0,200]);title('方波信号幅频谱图');grid;%求功率谱sq=abs(y);power=sq.^2;figure(3)subplot(211);plot(f,power);title('正弦信号功率谱');grid;sq1=abs(y1);power1=sq1.^2;subplot(212);plot(f,power1);title('方波信号功率谱');grid;%用IFFT恢复原始信号xifft=ifft(y);magx=real(xifft);ti=[0:length(xifft)-1]/fs;figure(4);subplot(211);plot(ti,magx);axis([0,0.1,-1,1]);title('通过IFFT转换的正弦信号波形');zifft=ifft(y1);magz=real(zifft);ti1=[0:length(zifft)-1]/fs;subplot(212);plot(ti1,magz);title('通过IFFT转换的方波信号波形');grid;please input the fs:1000please input the N:1024。
数字信号处理—综合实验报告综合实验名称:应用MatLab对语音信号进行频谱分析及滤波系:学生:班级:学号:成绩:指导教师:开课时间学年学期目录一.综合实验题目 (1)二、综合实验目的和意义 (1)2.1 综合实验目的 (1)2.2 综合实验的意义 (1)三.综合实验的主要容和要求 (1)3.2 综合实验的要求: (2)四.实验的原理 (2)4.1 数字滤波器的概念 (2)4.2 数字滤波器的分类 (2)(1)根据单位冲激响应h(n)的时间特性分类 (2)五.实验的步骤 (3)下面对各步骤加以具体说明。
5.1语音信号的采集 (3)5.2 语音信号的频谱分析; (3)5.3 设计数字滤波器和画出其频率响应 (5)5.3.1设计数字滤波器的性能指标: (5)5.3.2 用Matlab设计数字滤波器 (6)5.6 设计系统界面 (19)六、心得体会 (20)参考文献: (21)一.综合实验题目应用MatLab对语音信号进行频谱分析及滤波二、综合实验目的和意义2.1 综合实验目的为了巩固所学的数字信号处理理论知识,使学生对信号的采集、处理、传输、显示和存储等有一个系统的掌握和理解,再者,加强学生对Matlab软件在信号分析和处理的运用综合运用数字信号处理的理论知识进行频谱分析和滤波器设计,通过理论推导得出相应结论,再利用 MATLAB 作为编程工具进行计算机实现,从而加深对所学知识的理解,建立概念。
2.2 综合实验的意义语言是我们人类所特有的功能,它是传承和记载人类几千年文明史,没有语言就没有我们今天人类的文明。
语音是语言最基本的表现形式,是相互传递信息最重要的手段,是人类最重要、最有效、最常用和最方便的交换信息的形式。
语音信号处理属于信息科学的一个重要分支,大规模集成技术的高度发展和计算机技术的飞速前进,推动了这一技术的发展;它是研究用数字信号处理技术对语音信号进行处理的一门新兴学科,同时又是综合性的多学科领域和涉及面很广的交叉学科,因此我们进行语言信号处理具有时代的意义。
三.综合实验的主要容和要求3.1综合实验的主要容:录制一段个人自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;给定滤波器的性能指标,采用窗函数法和双线性变换设计滤波器,并画出滤波器的频率响应;然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;回放语音信号;综合实验应完成的工作:(1)语音信号的采集;(2)语音信号的频谱分析;(3)数字滤波器的设计;(4)对语音信号进行滤波处理;(5)对滤波前后的语音信号频谱进行对比分析;3.2 综合实验的要求:(1)学生能够根据设计容积极主动查找相关资料;(2)滤波器的性能指标可以根据实际情况作调整;(3)对设计结果进行独立思考和分析;(4)设计完成后,要提交相关的文档;①综合实验报告书(纸质和电子版各一份,具体格式参照学校课程设计管理规定),报告容要涵盖设计题目、设计任务、详细的设计过程、原理说明、、频谱图的分析、调试总结、心得体会、参考文献(在报告中参考文献要做标注,不少于5篇)。
②可运行的源程序代码(电子版)(5)在基本要求的基础上,学生可以根据个人对该综合实验的理解,添加一些新的容。
四.实验的原理4.1 数字滤波器的概念:若滤波器的输入、输出都是离散时间信号,那么该滤波器的单位冲激响应h(n)也必然是离散的,这种滤波器称为数字滤波器(DF)。
【1】数字滤波器实质上是一种运算过程——用来描述离散系统输入与输出关系的差分方程的计算或卷积计算。
数字滤波器的实质是用一有限精度算法实现的离散时间线性时不变系统,以完成对信号进行滤波处理的过程。
它是数字信号处理的一个重要分支,具有稳定性好、精度高、灵活性强、体积小、质量轻等诸多优点。
【2】4.2 数字滤波器的分类:数字滤波器根据不同的分类标准可以将滤波器分成不同的类别。
(1)根据单位冲激响应h(n)的时间特性分类无限冲激响应(IIR)数字滤波器有限冲激响应(FIR)数字滤波器[1](2)根据实现方法和形式分类递归型数字滤波器非递归型数字滤波器快速卷积型(3)根据频率特性分类低通数字滤波器、高通数字滤波器、带通数字波器4.3 滤波器的作用:滤波器是一种用来消除干扰杂讯的器件,将输入或输出经过过滤而得到纯净的直流电【3】。
对特定频率的频点或该频点以外的频率进行有效滤除的电路,就是滤波器,其功能就是得到一个特定频率或消除一个特定频率。
五.实验的步骤录制一段个人自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;给定滤波器的性能指标,采用窗函数法和双线性变换设计滤波器,并画出滤波器的频率响应;然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;回放语音信号;最后,设计一个信号处理系统界面。
下面对各步骤加以具体说明。
5.1语音信号的采集:利用 PC机上的声卡和 Windows操作系统可以进行数字信号的采集。
将话筒插入计算机的语音输入插口上,启动录音机。
按下录音按钮,对话筒读一段话,读完后停止录音,屏幕左侧将显示所录声音的长度。
【1】5.2 语音信号的频谱分析:(1)首先画出由wavread函数采样后的信号的时域波形和它的频域响应波形;语音信号的程序如下:[x1,fs,bits]=wavread('c:\wudan2.wav'); %读取语音信号的数据,赋给变量x1figure(20)plot(x1) %做原始语音信号以44.1k采样后的时域图形title('原始语音采样后时域信号');xlabel('时间轴 n');ylabel('幅值 A');figure(21)freqz(x1) %绘制原始语音信号采样后的频率响应图title('原始语音信号采样后频率响应图');运行结果:图1图2(2) 对语音信号进行FFT变换,得到FFT频谱特性曲线,与原语音信号的频谱特性曲线进行比较。
语音信号FFT的程序如下:[x1,fs,bits]=wavread(' c:\wudan2.wav'); %读取语音信号的数据,赋给变量x1 y1=fft(x1,1024); %对采样后信号做1024点FFT变换f=fs*(0:511)/1024;figure(19)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('幅值');运行结果:图35.3 设计数字滤波器和画出其频率响应5.3.1设计数字滤波器的性能指标:①低通滤波器性能指标fb=1000Hz,fc=1200Hz, As=100db,Ap=1db。
②高通滤波器性能指标 fs=4800Hz,fb=5000Hz,As=100db,Ap=1db。
③带通滤波器性能指标 fb1=1200Hz,fb2=3000Hz,fc1=1000Hz,fc2=3200Hz,As=100db,Ap=1db。
5.3.2 用Matlab设计数字滤波器①用双线性变换法设计上面要求的3种滤波器。
在Matlab中,可以利用函数butter,cheby1和ellip设计IIR滤波器;利用Matlab中的函数frepz画出各滤波器的频率响应。
【2】②用窗函数法设计上面要求的3种滤波器。
在Matlab中,可以利用函数fir1设计FIR滤波器;利用Matlab中的函数freqz画出各滤波器的频率响应。
5.4对语音信号进行滤波处理用自己设计的各滤波器分别对采集的信号进行滤波,在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。
并比较滤波前后语音信号的波形及频谱。
【4】IIR低通滤波器程序如下:fs=22050;[x2]=wavread('c:\wudan2.wav');Ts=1/fs;R1=10;wp=2*pi*1000/fs;ws=2*pi*1200/fs;Rp=1;Rl=100;wp1=2/Ts*tan(wp/2); %将模拟指标转换成数字指标ws1=2/Ts*tan(ws/2);[N,Wn]=buttord(wp1,ws1,Rp,R1,'s'); %选择滤波器的最小阶数[Z,P,K]=buttap(N); %创建butterworth模拟滤波器[Bap,Aap]=zp2tf(Z,P,K);[b,a]=lp2lp(Bap,Aap,Wn);[bz,az]=bilinear(b,a,fs); %用双线性变换法实现模拟滤波器到数字滤波器的转换[H,W]=freqz(bz,az); %绘制频率响应曲线figure(16)plot(W*fs/(2*pi),abs(H))gridxlabel('频率/Hz')ylabel('频率响应幅度')title('IIR低通滤波器')f1=filter(bz,az,x2);figure(17)subplot(2,1,1)plot(x2) %画出滤波前的时域图title('IIR低通滤波器滤波前的时域波形');subplot(2,1,2)plot(f1); %画出滤波后的时域图title('IIR低通滤波器滤波后的时域波形');sound(f1,44100); %播放滤波后的信号F0=fft(f1,1024);f=fs*(0:511)/1024;figure(18)y2=fft(x2,1024);subplot(2,1,1);plot(f,abs(y2(1:512))); %画出滤波前的频谱图title('IIR低通滤波器滤波前的频谱')xlabel('频率/Hz');ylabel('幅值');subplot(2,1,2)F1=plot(f,abs(F0(1:512))); %画出滤波后的频谱图title('IIR低通滤波器滤波后的频谱')xlabel('频率/Hz');ylabel('幅值');【5】运行结果:图4图5图6IIR高通滤波器程序如下:fs=22050;x1=wavread('c:\wudan2.wav');Fs=22050;Ts=1/Fs;R1=50;Wp=2*pi*5000/fs;Ws=2*pi*4800/fs;Rp=1;Rl=100;Wp1=2/Ts*tan(Wp/2); %将模拟指标转换成数字指标Ws1=2/Ts*tan(Ws/2);[N,Wn]=cheb2ord(Wp1,Ws1,Rp,Rl,'s'); %选择滤波器的最小阶数[Z,P,K]=cheb2ap(N,Rl); %创建切比雪夫模拟滤波器[Bap,Aap]=zp2tf(Z,P,K);[b,a]=lp2hp(Bap,Aap,Wn);[bz,az]=bilinear(b,a,Fs); %用双线性变换法实现模拟滤波器到数字滤波器的转换[H,W]=freqz(bz,az); %绘制频率响应曲线figure(13)plot(W*fs/(2*pi),abs(H))gridxlabel('频率/Hz')ylabel('频率响应幅度')title('IIR高通滤波器')f1=filter(bz,az,x1);figure(14)subplot(2,1,1)plot(x1) %画出滤波前的时域图title('IIR高通滤波器滤波前的时域波形');subplot(2,1,2)plot(f1); %画出滤波后的时域图title('IIR高通滤波器滤波后的时域波形');sound(f1,44100); %播放滤波后的信号F0=fft(f1,1024);f=fs*(0:511)/1024;figure(15)y2=fft(x1,1024);subplot(2,1,1);plot(f,abs(y2(1:512))); %画出滤波前的频谱图title('IIR高通滤波器滤波前的频谱')xlabel('频率/Hz');ylabel('幅值');subplot(2,1,2)plot(f,abs(F0(1:512))); %画出滤波后的频谱图title('IIR高通滤波器滤波后的频谱')xlabel('频率/Hz');ylabel('幅值');运行结果:图7图8图9IIR带通滤波器程序如下:fs=22050;x1=wavread('c:\wudan2.wav');Fs=22050;Ts=1/Fs;R1=30;fb1=1200;fb2=3000;fc1=1000;fc2=3200;fs=22050;W1=2*fb1*pi/fs;W2=2*fc1*pi/fs;W3=2*fb2*pi/fs;W4=2*fc2*pi/fs;Wp=[W1,W3];Ws=[W2,W4];Rp=1;Rl=100;Wp1=2/Ts*tan(Wp/2); %将模拟指标转换成数字指标Ws1=2/Ts*tan(Ws/2);[N,Wn]=cheb2ord(Wp1,Ws1,Rp,R1,'s'); %选择滤波器的最小阶数[Z,P,K]=cheb2ap(N,Rl); %创建切比雪夫模拟滤波器[Bap,Aap]=zp2tf(Z,P,K);[b,a]=lp2bp(Bap,Aap,2100*2*pi,1800*2*pi);[bz,az]=bilinear(b,a,Fs); %用双线性变换法实现模拟滤波器到数字滤波器的转换[H,W]=freqz(bz,az); %绘制频率响应曲线figure(10)plot(W*fs/(2*pi),abs(H))gridxlabel('频率/Hz')ylabel('频率响应幅度')title('IIR带通滤波器')f1=filter(bz,az,x1);figure(11)subplot(2,1,1)plot(x1) %画出滤波前的时域图title('IIR带通滤波器滤波前的时域波形');subplot(2,1,2)plot(f1); %画出滤波后的时域图title('IIR带通滤波器滤波后的时域波形');sound(f1,44100); %播放滤波后的信号F0=fft(f1,1024);f=fs*(0:511)/1024;figure(12)y2=fft(x1,1024);subplot(2,1,1);plot(f,abs(y2(1:512))); %画出滤波前的频谱图title('IIR带通滤波器滤波前的频谱')xlabel('频率/Hz');ylabel('幅值');subplot(2,1,2)plot(f,abs(F0(1:512))); %画出滤波后的频谱图title('IIR带通滤波器滤波后的频谱')xlabel('频率/Hz');ylabel('幅值'); 【6】运行结果:图10图11图12FIR低通滤波器程序如下:fs=10000;x1=wavread('c:\wudan2.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(7)freqz(b,a,512);title('FIR低通滤波器');f2=filter(b,a,x1);figure(8)subplot(2,1,1)plot(x1)title('FIR低通滤波器滤波前的时域波形');subplot(2,1,2)plot(f2);title('FIR低通滤波器滤波后的时域波形');sound(f2,44100); %播放滤波后的语音信号F0=fft(f2,1024);f=fs*(0:511)/1024;figure(9)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('幅值'); 【7】运行结果:图13图14图15 FIR高通滤波器程序如下:fs=22050;x1=wavread('c:\wudan2.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(4)freqz(b,a,512);title('FIR高通滤波器');f2=filter(b,a,x1);figure(5)subplot(2,1,1)plot(x1)title('FIR高通滤波器滤波前的时域波形');subplot(2,1,2)plot(f2);title('FIR高通滤波器滤波后的时域波形');sound(f2,44100); %播放滤波后的语音信号F0=fft(f2,1024);f=fs*(0:511)/1024;figure(6)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('幅值'); 【9】运行结果:图16图17图18 FIR带通滤波器程序如下:fs=22050;x1=wavread('c:\wudan2.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,44100); %播放滤波后的语音信号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('幅值');运行结果:图19图20图215.5 回放语音信号在Matlab中,函数sound可以对声音进行回放。