基于DFT的信号识别系统_第1页
基于DFT的信号识别系统_第2页
基于DFT的信号识别系统_第3页
基于DFT的信号识别系统_第4页
基于DFT的信号识别系统_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于DFT的信号识别系统专业:13信息工程 实验者: 姓名 刘静 学号 1328405007姓名 赵乐 学号 1328405043姓名 杨宵玲 学号 1328405044实验地点:电子楼114 实验时间 2015年5月21日一、实验目的 (1) 通过实验巩固离散傅立叶变换DFT的认识和理解。 (2) 熟练掌握应用DFT进行频谱分析的方法。 (3) 理解DFT离散频谱分析的应用价值。 二、实验原理DFT定义: k=0N (1)数字角频率: (2) (3)频率分辨率: t=NT=N/fs (4) f=1/t (5)三、实验内容 在语音识别、雷达信号处理、生物医学信号检测与识别等应用领域广泛使用基于

2、离散傅立叶变换的谱分析技术。一个典型的信号识别系统如图: 图1:信号识别系统图设系统的输入信号x(n)是具有单一频谱峰值的正弦信号,短时矩形窗将信号截短为有限长,经过DFT变换得到频谱,频率检测器检测频谱最大峰值的位置,即对应的频率,然后由分类器识别信号的类别。分类器的分类判决规则为: 第一类:最大峰值频率分布范围(Hz)为0f200。 第二类:最大峰值频率分布范围(Hz)为200f500。 第三类:最大峰值频率分布范围(Hz)为500f1000。第四类:最大峰值频率分布范围(Hz)为f1000。 设采样频率fs=10000Hz,短时矩形窗宽度为N=1000,短时加窗信号经过DFT可以得到连续

3、频谱在02p范围内的1000个取样点。(1) 编程实现该系统 本实验使用Matlab 编程实现,定义函数后,只需输入参数即可得任意信号的DFT图像。为了增强本实验的普适性和易操作性,我们使用了GUI交互式程序界面。程序见附录一,附录二。(2) 输入信号x(n)=1.2sin(0.08n),理论计算并画出0ffs范围的幅度谱,标出峰值频率,观察系统的实际识别结果,分析其正确性。根据DFT的定义,得到该信号的频谱如下:图2:x(n)=1.2sin(0.08n) 时域波形与频谱最大峰值及其对应频率(fs=10000Hz,N=1000)根据频谱,系统判断出最大峰值对应的频率为400Hz,因而判断是第二

4、类。理论值计算: f=fs*/(2),=0.08理论值结果:f=400Hz分析比较:实验结果与理论值一致,结果正确。(3) 输入信号x(n)=1.5+3cos(0.5n),理论计算并画出0ffs范围的幅度谱,标出峰值频率,观察系统的实际识别结果,分析其正确性。 用Matlab编程结果如下:图3: x(n)=1.5+3cos(0.5n)时域波形与频谱最大峰值及其对应频率(fs=10000Hz,N=1000)根据频谱,系统判断出最大峰值对应的频率为2500Hz,因而判断是第四类。理论值计算: f=fs*/(2),=0.5理论值计算: f=2500Hz分析比较:实验结果与理论值一致,结果正确。(4)

5、 输入信号x(n)=0.7sin(0.14n),理论计算并画出0ffs范围的幅度谱,标出峰值频率,观察系统的实际识别结果,分析其正确性。 图4:x(n)=0.7sin(0.14n) 时域波形与频谱最大峰值及其对应频率(fs=10000Hz,N=1000)根据频谱,系统判断出最大峰值对应的频率为700Hz,因而判断是第三类。理论值计算: f=700Hz分析比较:实验结果与理论值一致,结果正确。(5) 输入信号x(n)=1.2cos(0.5n)+ 9.5sin(0.02n),理论计算并画出0ffs范围的幅度谱,标出峰值频率,观察系统的实际识别结果,分析其正确性。 Matlab运行结果如图:图5:x

6、(n)=1.2cos(0.5n)+ 9.5sin(0.02n)时域波形与频谱最大峰值及其对应频率(fs=10000Hz,N=1000)根据频谱,系统判断出最大峰值对应的频率为100Hz,因而判断是第一类。理论值计算: 100Hz分析比较:实验结果与理论值一致,结果正确。(6) 输入信号x(n)=cos(0.102n),理论计算并画出0ffs范围的幅度谱,标出峰值频率,观察系统的实际识别结果,分析其正确性。 Matlab运行结果如图:图6:x(n)=cos(0.102n)时域波形与频谱最大峰值及其对应频率(fs=10000Hz,N=1000)根据频谱,系统判断出最大峰值对应的频率为510Hz,因

7、而判断是第三类。理论值计算:510Hz分析比较:实验结果与理论值一致,结果正确。四、思考题(1)当矩形窗长度比1000小,例如32,以上实验内容(6)即x(n)=1.0cos(0.102n)将可能出现什么情况?图7:x(n)=cos(0.102n)时域波形与频谱(fs=10000Hz,N=32)结果分析:最大峰值为 13.2591;相对应的频率为625;最大峰值频的分布范围为第三类。从时域看,时域分辨率增加从频域看,频谱泄露现象严重,可以看到,除了最大峰值外,还出现了很多多余的峰值,信号特征不能完全从频谱看出来。(2)当输入信号为x(n)=cos(0.199n)+0.9sin(0.204n)时

8、,系统能够得到正确识别结果吗?为什么?图8:x(n)=cos(0.199n)+0.9sin(0.204n)时域波形与频谱(fs=10000Hz,N=1000)结果分析:峰值对应的频率点是正确的,但是峰值的幅度有误。频谱离散化以后,频率分量f1=99.5Hz微出现在采样点上,没有整数k与之对应。该情况不能得到正确的识别结果。1、 增加窗长度,提高频率分辨率;结果如图:图9:x(n)=cos(0.199n)+0.9sin(0.204n)时域波形与频谱(fs=10000Hz,N=2000)最大峰值为 998.4054相对应的频率为995最大峰值的频率属于第三类(3)如果输入信号x(n)中含有叠加性宽

9、带噪声e(n)会影响识别结果么?为什么?对x(n)采样后的各项加上0.1rand(1,N)的噪声图10:加噪声以后x(n)=1.2sin(0.08n) 时域波形与频谱(fs=10000Hz,N=1000)最大峰值相对应的频率为510 最大峰值频的分布范围属于第三类可见信噪比过小时,无法准确识别信号频谱最大峰值。(4)如果系统中的DFT需要更新为FFT,并且短时窗不变,则FFT计算时应该做哪儿些考虑?对识别结果会产生什么影响?DFT更新为FFT时,需要的考虑:FFT变换首先应该将信号序列分为偶序列X0(K)和奇序列X1(K)两个长度相等的序列,奇序列X1(K)和偶序列X0(K)的短时窗长度都将变

10、为N/2=500点,而不再是N=1000,同时由于FFT要求信号长度是2的整数次幂,所以应该可以采用补零法,后缀增加24个零,奇偶序列数分别为612。奇序列X1(K)和偶序列X0(K)的K值取值范围为K=0N/2-1;,当N/2KN时,应该利用X0(K)、X1(K)的周期性特征,即X0(K)= X0(K-N/2),X1(K)=X1(K-N/2)。影响:FFT只是DFT的一种快速算法,两者从原理上是一样的,所以对识别结果不会产生什么影响。五、实验总结:本次实验,我们对DFT和FFT有了更深的认识,了解了窗长度,采样频率,信噪比等参数变化对结果的影响,同时我们学会了使用Matlab编程,进行DFT

11、变换和信号频率识别。另外,通过查阅资料,我们学会了使用Matlab中的GUI图形界面,构建可视化的交互程序,使我们的Matlab程序的普适性和易操作性有了显著提升。五、附录:附录一:基本程序%定义一个f1函数,允许输入一个包含sin, cos和常量的信号%本函数对输入的信号进行DFT变换,其中采样频率为10000Hz%窗口长度为1000;%并且求出信号的幅度谱中的最大幅度对应的频率%输出的内容包括时域信号的图片以及DFT变换后的频谱图%以及最高幅度处的频率,并对其进行分类function f1 = DFT(A,a,B,b,C)%x(n)=Asin(a*pi*n)+Bcos(b*pi*n)+C%

12、定义一些变量fs=10000;%采样频率N=1000;%窗口长度n=1:N;%信号下标X=zeros(1,N);%定义一个长度为N的X(K)%noise=rand(1,N);%随机噪声x(n)=A*sin(a*pi*n)+B*cos(b*pi*n)+C;subplot(2,1,1)plot(x);title('信号时域采样图');xlabel('n');ylabel('x(n)');%定义DFT(离散傅里叶变换)for k=1:N % X(k+1)=sum(x.*exp(-1i*2*pi*k*n/N); X(1)=0; for n=1:N X(k

13、)=x(n)*exp(-1i*2*pi*k*n/N)+X(k); endend%绘制X(k)的频谱图subplot(2,1,2)stem(abs(X); %以火柴棒的形式输出频谱图title('DFT离散幅度谱');xlabel('k');ylabel('X(k)');%求最大的X(k)%将最大的X(k)放在maxX中,将k放在maxk中 maxX=X(1); maxk=0;X=abs(X);maxX,maxk=max(X(1:(N/2)+1);output1=strvcat('最大峰值为',num2str(abs(maxX)%求

14、最大峰值对应的频率f=fs/N*maxk;output2=strvcat('相对应的频率为',num2str(f)%将最大峰值频率进行分类if f>=0&&f<200 output3 = strvcat('最大峰值频的分布范围',num2str(f),'属于0到200Hz;')elseif f<500 output3 = strvcat('最大峰值频的分布范围',num2str(f),'属于200到500Hz;')elseif f<1000 output3 = strvcat

15、('最大峰值频的分布范围',num2str(f),'属于500到1000Hz;')else output3 = strvcat('最大峰值频的分布范围',num2str(f),'大于1000Hz;')endend附录二:GUI界面下的DFT程序function varargout = xialacaidan(varargin)% XIALACAIDAN MATLAB code for xialacaidan.fig% XIALACAIDAN, by itself, creates a new XIALACAIDAN or rais

16、es the existing% singleton*.% H = XIALACAIDAN returns the handle to a new XIALACAIDAN or the handle to% the existing singleton*.% XIALACAIDAN('CALLBACK',hObject,eventData,handles,.) calls the local% function named CALLBACK in XIALACAIDAN.M with the given input arguments.% XIALACAIDAN('Pr

17、operty','Value',.) creates a new XIALACAIDAN or raises the% existing singleton*. Starting from the left, property value pairs are% applied to the GUI before xialacaidan_OpeningFcn gets called. An% unrecognized property name or invalid value makes property application% stop. All inputs ar

18、e passed to xialacaidan_OpeningFcn via varargin.% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one% instance to run (singleton)".% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help xialacaidan% Last Modified by GUIDE v2.5 23-May

19、-2015 16:39:14% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, . 'gui_Singleton', gui_Singleton, . 'gui_OpeningFcn', xialacaidan_OpeningFcn, . 'gui_OutputFcn', xialacaidan_OutputFcn, . 'gui_LayoutFcn', , . &#

20、39;gui_Callback', );if nargin && ischar(varargin1) gui_State.gui_Callback = str2func(varargin1);endif nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:);end% End initialization code - DO NOT EDIT% - Executes just before xialacaidan is ma

21、de visible.function xialacaidan_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% varargin comman

22、d line arguments to xialacaidan (see VARARGIN)% Choose default command line output for xialacaidanhandles.output = hObject;% Update handles structureguidata(hObject, handles);% UIWAIT makes xialacaidan wait for user response (see UIRESUME)% uiwait(handles.figure1);% - Outputs from this function are

23、returned to the command line.function varargout = xialacaidan_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT);% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user

24、data (see GUIDATA)% Get default command line output from handles structurevarargout1 = handles.output;% - Executes on selection change in popupmenu1.function popupmenu1_Callback(hObject, eventdata, handles)% hObject handle to popupmenu1 (see GCBO)% eventdata reserved - to be defined in a future vers

25、ion of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: contents = cellstr(get(hObject,'String') returns popupmenu1 contents as cell array% contentsget(hObject,'Value') returns selected item from popupmenu1% - Executes during object creation, after setting a

26、ll properties.function popupmenu1_CreateFcn(hObject, eventdata, handles)% hObject handle to popupmenu1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: popupmenu controls usually have a white ba

27、ckground on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor') set(hObject,'BackgroundColor','white');end% - Executes on button press in pushbutton1.function pushbutton1_Callback(hObject,

28、 eventdata, handles)% hObject handle to pushbutton1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)fs=10000;%采样频率N=1000;%窗口长度n=1:N;%信号下标X=zeros(1,N);%定义一个长度为N的X(K)z1=get(handles.popupmenu1,'Value');switc

29、h z1 case 1 A=1.2; a=0.08; B=0; b=0; C=0; case 2 A=0; a=0; B=3; b=0.5; C=1.5; case 3 A=0.7; a=0.14; B=0; b=0; C=0; case 4 A=9.5; a=0.02; B=1.2; b=0.5; C=0; case 5 A=0; a=0; B=1; b=0.102; C=0;endx(n)=A*sin(a*pi*n)+B*cos(b*pi*n)+C;plot(handles.axes1,x);title(handles.axes1,'信号时域采样图');xlabel(han

30、dles.axes1,'n');ylabel(handles.axes1,'x(n)');%定义DFT(离散傅里叶变换)for k=1:N % X(k+1)=sum(x.*exp(-1i*2*pi*k*n/N); X(1)=0; for n=1:N X(k)=x(n)*exp(-1i*2*pi*k*n/N)+X(k); endend%绘制X(k)的频谱图stem(handles.axes2,abs(X); %以火柴棒的形式输出频谱图title(handles.axes2,'DFT离散幅度谱');xlabel(handles.axes2,'

31、k');ylabel(handles.axes2,'X(k)');%求最大的X(k)%将最大的X(k)放在maxX中,将k放在maxk中X=abs(X);maxX,maxk=max(X(1:(N/2)+1);set(handles.edit1,'string',num2str(abs(maxX);%输出最大峰值%求最大峰值对应的频率f=fs*maxk/N; %frequencyset(handles.edit2,'string',num2str(f); %输出最大幅度时对应的频率%将最大峰值频率进行分类if f>=0&&am

32、p;f<200 set(handles.edit3,'string','最大峰值频的分布范围属于0到200Hz,为第一类')elseif f<500 set(handles.edit3,'string','最大峰值频的分布范围属于200到500Hz,为第二类')elseif f<1000 set(handles.edit3,'string','最大峰值频的分布范围属于500到1000Hz,为第三类')else set(handles.edit3,'string',&

33、#39;最大峰值频的分布范围大于1000Hz,为第四类')end% - Executes on button press in pushbutton2.function pushbutton2_Callback(hObject, eventdata, handles)% hObject handle to pushbutton2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GU

34、IDATA)closefunction edit1_Callback(hObject, eventdata, handles)% hObject handle to edit1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit1 as text% s

35、tr2double(get(hObject,'String') returns contents of edit1 as a double% - Executes during object creation, after setting all properties.function edit1_CreateFcn(hObject, eventdata, handles)% hObject handle to edit1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB%

36、handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor') set(hObject,'Backgroun

37、dColor','white');endfunction edit2_Callback(hObject, eventdata, handles)% hObject handle to edit2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns content

38、s of edit2 as text% str2double(get(hObject,'String') returns contents of edit2 as a double% - Executes during object creation, after setting all properties.function edit2_CreateFcn(hObject, eventdata, handles)% hObject handle to edit2 (see GCBO)% eventdata reserved - to be defined in a futur

39、e version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor') set(h

40、Object,'BackgroundColor','white');endfunction edit3_Callback(hObject, eventdata, handles)% hObject handle to edit3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String&

41、#39;) returns contents of edit3 as text% str2double(get(hObject,'String') returns contents of edit3 as a double% - Executes during object creation, after setting all properties.function edit3_CreateFcn(hObject, eventdata, handles)% hObject handle to edit3 (see GCBO)% eventdata reserved - to

42、be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgr

43、oundColor') set(hObject,'BackgroundColor','white');end% -function Untitled_2_Callback(hObject, eventdata, handles)% hObject handle to Untitled_2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% -function Untitled_1_Callback(hObj

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论