L=5000;
N=L*2-1;
n=1:L;
x1=0.5*n;
x2=2*n;
t0=clock;
yc=conv(x1,x2);
tc=etime(clock,t0)
t0=clock;
yf=ifft(fft(x1,N).*fft(x2,N));
tf=etime(clock,t0)
n1=0:length(yf)-1;
%plot(n1,yc,'r',n1,abs(yf),'b')
plot(n1,abs(yf),'b')
figure;
plot(n1,yc,'r')
tc =
0.0780
tf =
0.0470
tc =0.1720为线性卷积所用时间;tf = 0.0160为FFT所用时间,可知FFT计算速度更快更高效;图一图二,是当N=L*2-1;其中N为圆周卷积点数,L为线性卷积长度,图一图二,结果完全相同。
说明当N>=L*2-1可用计算圆周卷积来代替线性卷积
clf
fs=100;
%Length of Data
Ndata=32;
%Length of FFT
N=32;
n=0:Ndata-1;
t=n/fs;
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); y=fft(x,N);
mag=abs(y);
f=(0:length(y)-1)'*fs/length(y); subplot(2,2,1)
plot(f(1:N/2),mag(1:N/2));
xlabel('Frequency(Hz)');
ylabel('Magnitude');
title('Ndata=32 Nfft=32')
grid
fs=100;
%Length of Data
Ndata=32;
%Length of FFT
N=128;
n=0:Ndata-1;
t=n/fs;
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); y=fft(x,N);
mag=abs(y);
f=(0:length(y)-1)'*fs/length(y); subplot(2,2,2)
plot(f(1:N/2),mag(1:N/2));
xlabel('Frequency(Hz)');
ylabel('Magnitude');
title('Ndata=32 Nfft=128')
grid
fs=100;
%Length of Data
Ndata=136;
%Length of FFT
N=128;
n=0:Ndata-1;
t=n/fs;
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); y=fft(x,N);
mag=abs(y);
f=(0:length(y)-1)'*fs/length(y); subplot(2,2,3)
plot(f(1:N/2),mag(1:N/2));
xlabel('Frequency(Hz)');
ylabel('Magnitude');
title('Ndata=136 Nfft=128')
grid
fs=100;
%Length of Data
Ndata=136;
%Length of FFT
N=512;
n=0:Ndata-1;
t=n/fs;
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); y=fft(x,N);
mag=abs(y);
f=(0:length(y)-1)'*fs/length(y); subplot(2,2,4)
plot(f(1:N/2),mag(1:N/2));
xlabel('Frequency(Hz)');
ylabel('Magnitude');
title('Ndata=136 Nfft=512')
grid
胖:频谱泄露(1图)
图二旁瓣很多:普间干扰多,采样点数多些第三个会丢失信息
第四个最好,。