基于MATLAB的声音信号频谱分析仪
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
声卡输入的类似。
%从 WAV 文件中读取的声音信息并临时存放到 temp 变量中
temp
=
wavread(get(findobj('Tag','filename'),'String')); %获得所选择的声道 channel=str2double(get(handles.channel,'String')); %将指定声道的信息存放到 handles.y 中 handles.y=temp(:,channel); (3) 信 号 发 生 器 : MATLAB 有 产 生 标 准 信 号 的 函 数 , 如
为了直观地表示信号的频率特性,工程上常常将 Fourier 变 换的结果用图形的方式表示,即频谱图。
以频率 f 为横坐标,|Y(f)|为纵坐标,可以得到幅值谱; 以频率 f 为横坐标,arg Y(f)为纵坐标,可以得到相位谱; 以频率 f 为横坐标,Re Y(f)为纵坐标,可以得到实频谱; 以频率 f 为横坐标,Im Y(f)为纵坐标,可以得到虚频谱。 根据采样定理,只有频率不超过 Fs/2 的信号才能被正确采 集,即 Fourier 变换的结果中频率大于 Fs/2 的部分是不正确的 部分,故不在频谱图中显示。即横坐标 f ∈[0, Fs/2] 2.3. 模块划分 模块化就是把程序划分成独立命名且可独立访问的模块,每 个模块完成一个子功能,把这些模块集成起来构成一个整体,可 以完成指定的功能满足用户需求。根据人类解决一般问题的经 验,如果一个问题由两个问题组合而成,那么它的复杂程度大于 分别考虑每个问题时的复杂程度之和,也就是说把复杂的问题分 解成许多容易解决的小问题,原来的问题也就容易解决了。这就 是模块化的根据。 在模块划分时应遵循如下规则:改进软件结构提高模块独立 性;模块规模应该适中;深度、宽度、扇出和扇入都应适当;模 块的作用域应该在控制域之内;力争降低模块接口的复杂程度; 设计单入口单出口的模块;模块功能应该可以预测。 本着上述的启发式规则,对软件进行如图 2 所示的模块划 分。
齐齐哈尔大学
综合实践 1
题 目: 基于 MATLAB 的声音信号频谱分析仪 学 院: 专业班级: 学生姓名: 指导教师: 成 绩:
1.绪论
1.1 概述 随着软硬件技术的发展,仪器的智能化与虚拟化已成为未来
实验室及研究机构的发展方向。虚拟仪器技术的优势在于可由用 户定义自己的专用仪器系统,且功能灵活,很容易构建,所以应 用面极为广泛。基于计算机软硬件平台的虚拟仪器可代替传统的 测量仪器,如示波器、逻辑分析仪、信号发生器、频谱分析仪等。 从发展史看,电子测量仪器经历了由模拟仪器、智能仪器到虚拟 仪器,由于计算机性能的飞速发展,已把传统仪器远远抛到后面, 并给虚拟仪器生产厂家不断带来连锅端的技术更新速率。目前已 经有许多较成熟的频谱分析软件,如 SpectraLAB、RSAVu、dBFA 等。
为了实现预期的功能,设计如图 3 所示的界面。
图 3 频谱分析仪的界面设计
2.4.2 输入模块的实现 采样频率 Fs 与采样点数 N 是声音信号输入时共同需要作用
的参数,故将其独立出来。下面为别介绍三种输入方式的实现。
(1)这里声卡输入是指由麦克风录音得到的声音信号的输
入,MATLAB 提供了 wavrecord 函数,该函数能够实现读取麦克风
me,'String'))*Fs, Fs,'int16');
%保存 handles 结构体,使得 handles.y 在别的函数中也能
使用
guidata(hObject,handles);
%在波形显示区绘出波形
plot(handles.time,handles.y);
title('WAVE');
%将所采到的点的数量输出在“采样点数”中
(2) 信号波形分析,包括幅值、频率、周期、相位的估计, 以及统计量峰值、均值、均方值和方差的计算;
(3) 信号频谱分析Biblioteka Baidu频率、周期的估计,图形显示幅值谱、 相位谱、实频谱、虚频谱和功率谱的曲线。
1.2 MATLAB 软件介绍
MATLAB 是美国 MathWorks 公司出品的商业数学软件,用
于算法开发、数据可视化、数据分析以及数值计算的高级技术计 算语言和交互式环境,主要包括 MATLAB 和 Simulink 两大部分。 MATLAB 已成为国际公认的最优秀的科技应用软件之一,具有编 程简单、数据可视化功能强、可操作性强等特点,而且配有功能 强大、专业函数丰富的图像处理工具箱,是进行图像处理方面工 作必备的软件工具。
势,本章给出了两种分析方法的频率估计的比较,分析软件的在
时域和频域的计算精度问题。
2.5.1 标准正弦信号的频率估计
用信号发生器生成标准正弦信号,然后分别进行时域分析与
频域分析,得到的结果如图 4 所示。从图中可以看出,时域分析
的结果为 f = 400.3702Hz,频域分析的结果为 f = 417.959Hz,
而标准信号的频率为 400Hz,从而对于标准信号时域分析的精度
对于信号来说,分模拟信号与数字信号。进行频谱分析时, 对于模拟信号来说,首先对其进行抽样,使其离散化,然后利用 离散福利叶变换(DFT)或者快速傅立叶变换(FFT),然后对其 幅度(ABS)和相位(ANGLE)的图像进行分析,而对于数字信 号来说,则可直接进行离散傅里叶变换或快速傅里叶变换。
频谱分析仪是频域测量仪器的代表性产品,它显示输入信号 的基波和谐波幅度随频率的变化,测量功能多种样,包括频率、 功率、噪声、电场强度等参数,属于最常用的频域仪器。频谱分 析仪主要的应用是广播、电视、通信和网络,随着这些应用越来 越向更高频率发展,为解决频率资源不足的问题,它的测量范围 已从 RF 频段扩展到微波频段。为了统计的方便,划分频谱分析 为 3GHz、18GHz 和 26GHz 三个区段,总销售额占全球通用量仪 器市场的 18%,仅次于示波器市场而居第二位。
ysize=size(handles.y)
set(handles.samplenum,'String',num2str(ysize(1)));
(2)WAV 文件输入:MATLAB 提供了 wavread 函数,该函数能够
方便的打开并读取 WAV 文件中的声音信息,并且同时读取所有声
道。下面是“打开文件”按钮回调函数的部分代码。其它代码与
sawtooth 能够产生三角波或钜齿波,首先利用 get 函数获得波形 soundtype,频率 frequency,幅值 amp 和相位 phase,然后是以 下代码。
switch soundtype case 1 %标准正弦波 y=amp*sin(2*pi*x*frequency+phase); case 2 %方波 y=amp*sign(sin(2*pi*x*frequency+phase)); case 3 %三角波 y=amp*sawtooth(2*pi*x*frequency+phase,0.5); case 4 %钜齿波 y=amp*sawtooth(2*pi*x*frequency+phase); case 5 %白噪声 y=amp*(2*rand(size(x))-1); otherwise errordlg('Illegal wave type','Choose errer');
生成。 2.2.1DFT 与 FFT
对于给定的时域信号 y,可以通过 Fourier 变换得到频域信 息 Y。Y 可按下式计算
式中,N 为样本容量,Δt = 1/Fs 为采样间隔。 采样信号的频谱是一个连续的频谱,不可能计算出所有的点 的值,故采用离散 Fourier 变换(DFT),即
式中,Δf = Fs/N。但上式的计算效率很低,因为有大量的 指数(等价于三角函数)运算,故实际中多采用快速 Fourier 变换 (FFT)。其原理即是将重复的三角函数算计的中间结果保存起来, 以减少重复三角函数计算带来的时间浪费。由于三角函数计算的 重复量相当大,故 FFT 能极大地提高运算效率。 2.2.2 频率、周期的估计
图 2 频谱分析仪的模块划分
2.4 软件实现 2.4.1 界面设计
MATLAB 是 Mathworks 公司推出的数学软件,它将数值分析、 矩阵计算、信号处理和图形显示结合在一起,为众多学科领域提 供了一种简洁、高效的编程工具。它提供的 GUIDE 工具为可视化 编程工具,使得软件的界面设计像 VB 一样方便。故本文采用 MATLAB 作为编程语言实现声音信号频谱分析仪,以下所讲的都是 在 MATLAB7.0 环境中。
利用傅里叶变换的方法对振动的信号进行分解,并按频率顺 序展开,使其成为频率的函数,进而在频率域中对信号进行研究 和处理的一种过程,称为频谱分析。目的是将信号在时间域中的 波形转变为频率域的频谱,进而可以对信号的信息作定量解释。
对信号进行频谱分析,是对其进行傅里叶变换,得到其振幅谱与 相位谱。分析软件主要为 Matlab。
MATLAB 是矩阵实验室(Matrix Laboratory )的简称,和 Mathematica、Maple 并称为三大数学软件。它在数学类科技应用 软件中在数值计算方面首屈一指。MATLAB 可以进行矩阵运算、 绘制函数和数据、实现算法、创建用户界面、连接其他编程语言 的程序等,主要应用于工程计算、控制设计、信号处理与通讯、 图像处理、信号检测、金融建模设计与分析等领域。目前数字滤 波器的设计有许多现成的高级语言设计程序,但他们都存在设计 效率较低,不具有可视图形,不便于修改参数等缺点,而 Matlab 为数字滤波的研究和应用提供了一个直观、高效、便捷的工具。 它以矩阵运算为基础,把计算、可视化、程序设计融合到了一个 交互式的工作环境中。尤其是 Matlab 工具箱使各个领域的研究人 员可以直观而方便地进行科学研究与工程应用。其中的信号处理 工具箱、图像处理工具箱、小波工具箱等更是为数字滤波研究的 蓬勃发展提供了可能。 1.3 频谱分析简介
end if get(handles.add,'Value')==0.0
handles.y=y; %若没有勾选上“混迭”,则将生成的波
形赋给 handles.y
else
%否则将生成的波形与原有波形叠加
handles.y=handles.y+y;
end
2.5.运行实例与误差分析
为了分析软件的性能并比较时域分析与频域分析各自的优
对于 Y(kΔf),如果当 kΔf = 时,Y(kΔf)取最大值,则 为频率的估计值,由于采样间隔的误差, 也存在误差,其误 差最大为Δf / 2。
周期 T=1/f。 从原理上可以看出,如果在标准信号中混有噪声,用上述方 法仍能够精确地估计出原标准信号的频率和周期,这个将在下一 章做出验证 2.2.3 频谱图
录音信号。以下是“开始录音”按钮的回调函数内容。
%首先获得设定的 Fs 值
Fs=str2double(get(findobj('Tag','samplerate'),'Stri
ng'));
%根据设定的录音时长进行录音,将其存入 handles.y 中
handles.y=wavrecord(str2double(get(handles.recordti
声卡是多媒体计算机最基本的配置硬件之一,价格便宜,使 用软件,他的数据采集工具箱为实现数据的输入和输出提供了十 分方便的函数和命令。本文将给出基于声卡与 MATLAB 的声音 信号频谱分析仪的设计原理与实现方法,功能包括:
(1) 音频信号信号输入,从声卡输入、从 WAV 文件输入、从 标准信号发生器输入;
当前,移动通信主要使用 3GHz 以下频段,并向 3GHz 以上 扩展;卫星电视主要使用 3GHz 频率,亦向 5GHz 频段扩展;网 络通信主要使用 1GHz 以下频段,开始向 10GHz 扩展;国防军事 通信使用微波频段,光纤通信同样使用微波频段。
2.设计原理
2.1 频谱分析原理
时域分析只能反映信号的幅值随时间的变化情况,除单频率 分量的简单波形外,很难明确提示信号的频率组成和各频率分量 大小,而频谱分析能很好的解决此问题。由于从频域能获得的主 要是频率信息,所以本节主要介绍频率(周期)的估计与频谱图的