FFT算法的应用频率估计Word下载.docx
《FFT算法的应用频率估计Word下载.docx》由会员分享,可在线阅读,更多相关《FFT算法的应用频率估计Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
程序如下:
n1=[0:
1:
15];
x1=sin(2*pi*n1/8);
figure
(1)
grid;
subplot(2,1,1);
plot(n1,x1);
x11=fft(x1);
x11=abs(x11);
subplot(2,1,2);
stem(n1,x11);
n2=[0:
19];
x2=sin(2*pi*n2/8);
figure
(2)
plot(n2,x2);
x21=fft(x2);
x21=abs(x21);
stem(n2,x21);
运行结果如下:
N=16
N=20
结果分析:
所用的信号是一个周期为8的正弦信号,分别截取长度16和长度20来进行DFT变换。
前者得到的频率幅度谱只有两个频率分量,后者有多个频率分量,原因是16是周期的整数倍,20不是周期的整数倍。
2.2N点实数序列
N=64。
用一个64点的复数FFT程序,一次算出,并绘出。
%方法一(复数FFT程序)
N=64;
n=[0:
N-1];
n1=2*n;
n2=2*n+1;
k=[0:
xn1=cos(2*pi/N*7*n1)+1/2*cos(2*pi/N*19*n1);
%偶序列
xn2=cos(2*pi/N*7*n2)+1/2*cos(2*pi/N*19*n2);
%奇序列
XK1=fft(xn1);
XK2=fft(xn2);
X1=XK1+exp(-j*pi*k/N).*XK2;
X2=XK1-exp(-j*pi*k/N).*XK2;
X1=[X1zeros(1,N)];
X2=[zeros(1,N)X2];
XK=X1+X2;
2*N-1];
XK=abs(XK);
stem(k,XK);
xlabel('
k'
);
ylabel('
|X(k)|'
title('
X(k)=DFT[x(n)]2N'
)
%方法2(直接FFT)
N1=64;
n0=0:
2*N1-1;
x1=cos(2*pi*7*n0/N1)+1/2*cos(2*pi*19*n0/N1);
Xk1=fft(x1,128);
k1=n0;
stem(k1,abs(Xk1))
k1'
|X(k1)|'
直接FFTX(k1)'
运行结果:
第二种方法是直接对信号进行FFT变换,实际上是对第一种方法的一种检测,二者运行结果完全一致,说明结果正确。
3.频率估计
1)产生一个单频实信号,加上一定信噪比的噪声。
2)对含噪声的信号进行频率估计。
估计方法可以查阅相关文献。
3)统计估计出来的频率和真实频率之间的误差。
4)验证该频率估计算法在不同信噪比、不同数据长度下、不同频率时候的性能。
Function(a)
x=(0:
1000);
y1=sin(200*pi*x/1000);
%原始频率100Hz
figure
(1)
plot(x,y1);
axis([0,50,-1,1]);
未受干扰时信号的波形'
y'
x/1000'
y2=awgn(y1,a);
y=y1+y2;
figure
(2);
plot(x,y);
axis([0,200,-3,3]);
叠加了高斯白噪声的信号波形'
Y=fft(y);
Y=abs(Y);
f=x;
figure(3);
plot(f,Y)
axis([0,200,-100,2000]);
含噪声信号y(t)的频谱'
频率(Hz)'
|Y(f)|'
(1)信噪比为1时
(2)信噪比为5时
(3)信噪比为10时
(4)信噪比为20时