基于DFT的信号识别系统.docx
《基于DFT的信号识别系统.docx》由会员分享,可在线阅读,更多相关《基于DFT的信号识别系统.docx(14页珍藏版)》请在冰豆网上搜索。
基于DFT的信号识别系统
基于DFT的信号识别系统
一、实验目的
(1)通过实验巩固离散傅立叶变换DFT的认识和理解。
(2)熟练掌握应用DFT进行频谱分析的方法。
(3)理解DFT离散频谱分析的应用价值。
二、实验内容
在语音识别、雷达信号处理、生物医学信号检测与识别等应用领域广泛使用基于离散傅立叶变换的谱分析技术。
一个典型的信号识别系统如下图:
设系统的输入信号x(n)是具有单一频谱峰值的正弦信号,短时矩形窗将信号截短为有限长,经过DFT变换得到频谱,频率检测器检测频谱最大峰值的位置,即对应的频率,然后由分类器识别信号的类别。
分类器的分类判决规则为:
第一类:
最大峰值频率分布范围(Hz)为0≤f≤200。
第二类:
最大峰值频率分布范围(Hz)为200≤f≤500。
第三类:
最大峰值频率分布范围(Hz)为500≤f≤1000。
第四类:
最大峰值频率分布范围(Hz)为f≥1000。
设采样频率fs=10000Hz,短时矩形窗宽度为N=1000,短时加窗信号经过DFT可以得到连续频谱在0≤ω<2
范围内的1000个取样点。
(1)编程实现该系统
(2)输入信号x(n)=1.2sin(0.08πn),理论计算并画出0≤f≤fs范围的幅度谱,标出峰值频率,观察系统的实际识别结果,分析其正确性。
(3)输入信号x(n)=1.5+3cos(0.5πn),理论计算并画出0≤f≤fs范围的幅度谱,标出峰值频率,观察系统的实际识别结果,分析其正确性。
(4)输入信号x(n)=0.7sin(0.14πn),理论计算并画出0≤f≤fs范围的幅度谱,标出峰值频率,观察系统的实际识别结果,分析其正确性。
(5)输入信号x(n)=1.2cos(0.5πn)+9.5sin(0.02πn),理论计算并画出0≤f≤fs范围的幅度谱,标出峰值频率,观察系统的实际识别结果,分析其正确性。
(6)输入信号x(n)=cos(0.102πn),理论计算并画出0≤f≤fs范围的幅度谱,标出峰值频率,观察系统的实际识别结果,分析其正确性。
三、实验分析
设x(n)是长度为N的有限长信号(注意这个前提),即信号仅仅分布在[0,N-1]区间,其余时间均为0,那么,该信号的离散傅立叶变换定义如下:
,k=0~N-1
f与k的关系为:
因为ω=2πf/fs,所以有f=ωfs/2π。
以此为依据对输入信号作如下理论分析:
(1) 输入信号为x(n)=1.2sin(0.08πn)时,峰值出现在f=ωfs/2π =400Hz。
(2) 输入信号为x(n)=1.5+3cos(0.5πn)时,峰值出现在f=ωfs/2π=0Hz 或f=2500Hz,而因为直流分量不仅使笫1条谱线(0频率)有很大的值,同时由于泄漏的存在,对低频部分造成影响,所以一般频谱分析要去掉0频率,所以最大峰值出现在f=2500Hz。
(3) 输入信号为x(n)=0.7sin(0.14πn)时,峰值出现在f=ωfs/2/π=700Hz。
(4) 输入信号为x(n)=1.2cos(0.5πn)+9.5sin(0.02πn)时,峰值出现在f=ωfs/2π=2500Hz 或f=100Hz,因为幅值9.5>1.2,所以应该出现在100Hz处。
(5) 输入信号为x(n)=cos(0.102πn)时,峰值出现在f=ωfs/2π=510Hz。
四、实验结果
本小组通过两种不同方案均实现了实验要求。
方案1:
(1)MATLAB程序如下:
functionSS=DFT_TEST(A,a,B,b,c)
fs=10000;
N=1000;
n=1:
1000;
max_ap=0;
x=A*sin(a*pi*n)+B*cos(b*pi*n)+c;
fork=0:
(N-1)
X(k+1)=0;
forn=0:
(N-1)
X(k+1)=x(n+1)*exp(-j*2*pi*k*n/N)+X(k+1);
end
ifk<=N/2
ifmax_apmax_ap=abs(X(k+1));
max_k=k;
end
end
end
f=fs/N*max_k;
type='type';
if(f>=0)&&(f<200)
type='type1';
elseif(f>=200)&&(f<500)
type='type2';
elseif(f>=500)&&(f<1000)
type='type3';
elseiff>=1000
type='type4';
end
SS={max_k,f,max_ap,type};
subplot211
n=1:
1000;
plot(n,x);
title('输入信号');
subplot212
k=0:
N-1;
plot(k,abs(X));
title('离散频谱');
(2)X(n)=1.2sin(0.08πn)
SS=
[40][400][600.0000]'type2'
系统识别结果:
点:
k=40
频率:
f=400Hz
幅值600
最大峰值频率为400Hz,属于第2类
与理论值相同,系统识别结果正确。
(3)X(n)=1.5+3cos(0.5πn)
SS=
[0][0][1.5000e+003]'type1'
系统识别结果:
点1:
k=0点2:
k=250
频率:
f=0Hz频率:
f=2500Hz
幅值1500幅值1500
最大峰值频率为2500Hz,属于第4类
与理论值相同,系统识别结果正确。
(4)x(n)=0.7sin(0.14πn)
SS=
[70][700][350.0000]'type3'
系统识别结果:
点:
k=70
频率:
f=700Hz
幅值350
最大峰值频率为700Hz,属于第3类
与理论值相同,系统识别结果正确。
(5)x(n)=1.2cos(0.5πn)+9.5sin(0.02πn)
SS=
[10][100][4.7500e+003]'type1'
系统识别结果:
点:
k=10
频率:
f=100Hz
幅值4750
最大峰值频率为100Hz,属于第1类
与理论值相同,系统识别结果正确。
(6)x(n)=cos(0.102πn)
SS=
[51][510][500.0000]'type3'
系统识别结果:
点:
k=51
频率:
f=510Hz
幅值500
最大峰值频率为510Hz,属于第3类
与理论值相同,系统识别结果正确。
方案2:
(1)MATLAB程序如下:
functionY=SDFT(A,a,B,b,C)
fs=10000;
N=1000;
n=0:
1023;
x=A*sin(a*pi*n)+B*cos(b*pi*n)+C;
f=0:
fs/N:
fs/2;
k=round(f/fs*N);
X=goertzel(x(1:
N),k+1);
val=abs(X);
subplot211
plot(k,val);
grid;
xlabel('k');
ylabel('|X(k)|');
subplot212
plot(n,x);
grid;
xlabel('n');
ylabel('x');
r=1;
fors=2:
N/2
ifval(s)>=val(r)
r=s;
end
end
fm=(r-1)*fs/N;
type='type';%判别类型
if(fm>=0)&&(fm<200)
type='type1';
elseif(fm>=200)&&(fm<500)
type='type2';
elseif(fm>=500)&&(fm<1000)
type='type3';
elseiffm>=1000
type='type4';
end
Y={r-1,fm,val(r),type};%返回k值,最大峰值处频率,最大峰值,类型
(2)X(n)=1.2sin(0.08πn)
(3)X(n)=1.5+3cos(0.5πn)
(4)x(n)=0.7sin(0.14πn)
(5)x(n)=1.2cos(0.5πn)+9.5sin(0.02πn)
(6)x(n)=cos(0.102πn)
五、思考题
1.当矩形窗长度比1000小,例如32,以上实验内容(6)可能出现什么情况?
答:
频率分辨率低,出现失真现象。
如图:
2.当输入信号x(n)=cos(0.199πn)+0.9sin(0.204πn)时,系统能够得到正确的识别结果吗?
为什么?
答:
能够得到。
因为N值很大,系统的分辨率足够高。
3、如果输入信号x(n)中含有叠加性宽带噪声e(n)会影响识别结果么?
为什么?
答:
如果输入信号中含有叠加性宽带噪声,且噪声较大,则有可能会影响识别结果。
若噪声较小,则不会影响识别结果。
噪声较小:
噪声较大:
4、如果系统中的DFT需要更新为FFT,并且短时窗不变,则FFT计算时应该做哪儿些考虑?
对识别结果会产生什么影响?
答:
当DFT更新为FFT时,要短时窗不变,在计算的时候应该考虑以下几个方面:
① 首先应该将信号序列分为偶序列X0(K)和奇序列X1(K)两个长度相等的序列;
② 奇序列X1(K)和偶序列X0(K)的短时窗长度都将变为N/2=500点,而不再是N=1000;
③ 奇序列X1(K)和偶序列X0(K)的K值取值范围为K=0~N/2-1;,当N/2≤K<N时,应该利用X0(K)、X1(K)的周期性特征,即X0(K)=X0(K-N/2),X1(K)=X1(K-N/2)。
对识别结果不会产生什么影响。
六、总结
通过本次实验,我对DFT的认识得到了近一步的加深,我了解怎样应用DFT进行频谱分析,并熟悉了MATLAB这一软件的应用。