1楼 就是正弦包含频率是20hz,20.5hz,40hz,采样频率fs是100hz,分析栅栏效应,先是128个点fft,补零到512个点进行fft,再512个点fft。程序是这样的: N1=128;N2=512; fs=100;f1=20;f2=20.5;f3=40; n1=0:N1-1;n2=0:N2-1; xn1=sin(2*pi*f1*n1/fs)+sin(... 1楼
就是正弦包含频率是20hz,20.5hz,40hz,采样频率fs是100hz,分析栅栏效应,先是128个点fft,补零到512个点进行fft,再512个点fft。程序是这样的:
N1=128;N2=512;
fs=100;f1=20;f2=20.5;f3=40;
n1=0:N1-1;n2=0:N2-1;
xn1=sin(2*pi*f1*n1/fs)+sin(2*pi*f2*n1/fs)+sin(2*pi*f3*n1/fs);
xk11=fft(xn1,N1)
mxk11=abs(xk11(1:N1/2));
figure(1);
subplot(211);plot(n1,xn1);
xlabel('n');title('x(n) 0<=n<127');axis([0,128,-3,3]);
k1=(0:N1/2-1)*fs/N1;
subplot(212)
plot(k1,mxk11);
xlabel('频率 单位Hz');title('X1(k)的幅度谱');
xn2=[xn1,zeros(1,N2-N1)];
xk12=fft(xn2,N2);
mxk12=abs(xk12(1:N2/2));
figure(2);
subplot(211);plot(n2,xn2);
xlabel('n');title('x(n) 0<=n<=511');axis([0,512,-3,3]);
k2=(0:N2/2-1)*fs/N2;
subplot(212);
plot(k2,mxk12);
xlabel('频率 单位Hz');title('x1(k)补零后的幅度谱');
xn3=sin(2*pi*f1*n2/fs)+sin(2*pi*f2*n2/fs)+sin(2*pi*f3*n2/fs);
xk2=fft(xn3,N2);
mxk3=abs(xk2(1:N2/2));
figure(3);
subplot(211);plot(n2,xn3);
xlabel('n');title('x(n) 0<=n=511');axis([0,512,-3,3]);
k3=(0:N2/2-1)*fs/N2;
subplot(212);
plot(k3,mxk3);
xlabel('频率 单位Hz');title('512点有效数据的幅度谱');
我看不懂的是
xk11=fft(xn1,N1)
mxk11=abs(xk11(1:N1/2));(这个是什么意思?)
和k1=(0:N1/2-1)*fs/N1;(为什么是二分之一得N1呢?)
因为N个样点的信号经过fft以后变成N个样点的频谱,这个频谱是关于第N/2+1样点左右对称的,所以真正有用的频谱数据只有前面一半,后面一半是镜像。mxk11是对前N/2个样点取幅度谱,其实应该是取1:N1/2+1,你这里少取了一个点。具体为什么会镜像请看数字信号处理DFT章节。