频谱分析.docx

上传人:b****6 文档编号:6233701 上传时间:2023-01-04 格式:DOCX 页数:8 大小:702.17KB
下载 相关 举报
频谱分析.docx_第1页
第1页 / 共8页
频谱分析.docx_第2页
第2页 / 共8页
频谱分析.docx_第3页
第3页 / 共8页
频谱分析.docx_第4页
第4页 / 共8页
频谱分析.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

频谱分析.docx

《频谱分析.docx》由会员分享,可在线阅读,更多相关《频谱分析.docx(8页珍藏版)》请在冰豆网上搜索。

频谱分析.docx

频谱分析

《工程数字信号处理算法与实践》

 

题目声音信号频谱分析仪

学院机械科学与工程学院

专业机械电子工程

完成日期2010-10-20

摘要

本次设计依照工程数字信号处理算法与实践中学习的关于信号频谱分析的理论知识,利用matlab软件进行编写GUI交互界面以及其中的M文件,模拟出第一次作业中的多种信号,同时也要利用声卡导入WAV格式音频文件以及录音得到的WAV文件,而且能在交互式的界面中做到将各种信号进行时域与频域的分析。

通过这次设计,深化了matlab软件的学习应用,加深了对于信号处理知识的理解,提高了自己的自学能力以及解决问题的能力,对于以后的研究阶段学习以及实际工作打下了更好的基础。

关键词:

MATLAB,GUI,M文件,时域分析,频域分析,信号处理

1.概述

1.1课题来源

《程测试信号处理算法与实践》第二次课程作业。

1.2目的和意义

在21世纪的今天,计算机仿真开始应用于工程技术领域的各个方面,计算机仿真不仅减少了产品研发的时间,而且极大的提高了产品的可靠性和实用性,使人机交换能力更强。

信号处理几乎涉及到所有的工程技术领域,但是时域分析只能反映信号的幅值随时间的变化情况,除单频率分量的简谐波外,很难明确揭示信号的频率组成和各频率分量大小。

因此采用频谱分析是信号处理中一个非常重要的分析手段。

1.3主要任务

利用GUI搭建界面布局,编写M文件,完成频谱分析仪的交互式界面。

2.软件设计

设计原理

信号频域分析是采用傅立叶变换将时域信号x(t)变换为频域信号X(f),从而帮助人们从另一个角度来了解信号的特征。

信号频谱X(f)代表了信号在不同频率分量成分的大小,能够提供比时域信号波形更直观更丰富的信息。

时域和频域的对应关系如图1所示

图1

任何周期信号都可以展开成正交函数线性组合的无穷级数。

傅里叶级数的表现形式如式

(1)所示:

(1)

变形为:

工程上习惯将计算结果用图形方式表示,以fn(ω0)为横坐标,bn、an为纵坐标画图,称为实频-虚频谱图。

以fn为横坐标,An为纵坐标画图,则称为幅值-相位谱;以fn为横坐标,A2为纵坐标画图,则称为功率谱。

实现方法

1、GUI界面设计

通过使用MATLAB的GUI模块设计,自动生成了M程序代码,然后植入自己所设计的程序段,最后通过回调函数得到所需的虚拟频谱分析仪的界面如图所示。

图2

GUI编程

这里主要介绍从声卡录音、直接读取WAV文件,以及对信号进行频谱分析的M代码。

1)声卡输入信号:

Fs=str2double(get(findobj('Tag','sampfrequency'),'String'));%读采样频率

handles.y=wavrecord(str2double(get(findobj('Tag','recordtime'),'String'))*Fs,Fs);

%将从声卡输入的信号存储到axis1中的Y轴上去

handles.inputtype=1;

guidata(hObject,handles);

plot(handles.axes1,handles.y);

title('WAVE');

ysize=size(handles.y)

set(handles.samplenum,'String',num2str(ysize

(1)));

2)打开WAV文件:

N=10240;Fs=22050;

n=0:

N-1;t=n/Fs;

[x,Fs]=wavread(get(findobj('Tag','filename'),'String'));

%通过读取控件filename的值,来获得文件名,并打开

x=x(:

1);wavplay(x,22050);%播放WAV文件

axes(handles.axes1);

plot(t,x(1:

N));gridon;

y=fft(x,N);

py=2/N*sqrt(y.*conj(y));%对信号进行频谱分析

fa=n*Fs/N;

axes(handles.axes2);

plot(fa(1:

N/10),py(1:

N/10),'g')

gridon;

guidata(hObject,handles);

3)数值发生器信号的生成:

A=str2double(get(handles.amp,'string'));

f=str2double(get(handles.frequency,'string'));

B=str2double(get(handles.phase,'string'));

%获取幅值、相位、和频率Fs=str2double(get(findobj('Tag','sampfrequency'),'String'));

t=0:

1/Fs:

400/f;

N=str2double(get(handles.sampnum,'string'));

Fs=str2double(get(handles.sampfrequency,'string'));

ifhandles.wavetype==1;

x=A*sin(2*pi*f*t+B);%生成正弦信号

elseifhandles.wavetype==2;

x=A*sawtooth(2*pi*f*t+B);%生成锯齿坡信号

elseifhandles.wavetype==3;

x=A*square(2*pi*f*t+B);%生成方波信号

elseifhandles.wavetype==4

x=randn(size(100*t));%生成白噪声信号

else

x=A*sin(2*pi*f*t+B);

end

guidata(hObject,handles)

handles.y=x;%将信号值存储至句柄y

plot(handles.axes1,handles.y(1:

1000))

guidata(hObject,handles)

4)对信号进行频谱分析:

Fs=str2double(get(findobj('Tag','sampfrequency'),'String'));%读取采样频率

N=str2double(get(findobj('Tag','sampnum'),'String'));

%读取采样点数

sample=handles.y;%读取信号f=linspace(0,Fs/5,N/5);

Y=fft(sample,N);

Y=Y(1:

N/5);

plot(handles.axes2,f,2/N*sqrt(Y.*conj(Y)))%得出幅值谱

gridon

plot(handles.axes3,f,angle(Y))%得出相位谱

gridon

plot(handles.axes4,f,abs(Y).^2)%得出功率谱

gridon

xlabel(handles.axes2,'freqency(Hz)');

xlabel(handles.axes3,'freqency(Hz)');

xlabel(handles.axes4,'freqency(Hz)');

ylabel(handles.axes2,'amplitude');

ylabel(handles.axes3,'phase(rad)');

ylabel(handles.axes4,'power');

 

程序运行演示

程序初始界面

图3

录音后频谱分析的结果

图4

 

对WAV文件进行分析

图5

对锯齿波进行分析

图6

3.总结

这次作业主要是通过三种方式即从声卡输入、直接读取WAV文件和信号发生器获取信号,在得到这三种信号后,对其进行频谱分析。

通过这次作业,对频谱分析有了一个更深刻、更全面的认识。

在这次作业中,也有一些不足之处,如信号的周期等的分析,由于还没有完全弄出来,所以没有在最终的作业中展示出来。

另一方面,信号的频谱分析不仅仅只有FFT这一种方法,还有ARMA等时间序列分析方法,对于那些高阶信号,通过ARMA模型能够更好的对信号进行分析,并且可以和FFT分析的结果进行比较,但是由于这周时间紧张,所以并没有做出来,在以后平时的学习中,是应该去实践一下的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1