數字信號處理實驗五
一、實驗目的:
1、快速傅里葉變換並不是一種新的變換方法,它是計算DFT的一種有效算法。它是信號譜分析的有力工具。通過本次實驗,學習使用FFT進行信號分析的方法,加深對FFT的理解;
2、理解FFT進行信號頻譜分析可能出現的問題,如:頻譜混疊,闌珊效應,頻譜泄露等,以便在實際中正確處理。
二、實驗要求與實驗內容:
1、通過實際例子學習使用FFT分析信號的方法。
對信號x(t)=sin(2π×40t)+sin(2π×15t)進行DFT,對其結果進行IDFT,並將IDFT的結果和原信號進行比較(f=100Hz,n=128)。
2、通過採樣點數的不同,瞭解對信號幅度譜的影響。
已知信號由15Hz幅值0.5的正弦信號和40Hz賦值為2的正弦信號組成,數據採樣頻率為100Hz,試分別繪製N=128點DFT的幅頻圖和N=1024點DFT幅頻圖。
3、編程實現對下列正弦信號的FFT分析,並討論實驗結果。
a.信號頻率F=50Hz,採樣長度N=32,採樣時間T=0.000625s.
b.信號頻率F=50Hz,採樣長度N=32,採樣時間T=0.005s.
c.信號頻率F=50Hz,採樣長度N=32,採樣時間T=0.0046875s.
d.信號頻率F=50Hz,採樣長度N=32,採樣時間T=0.004s.
e.信號頻率F=50Hz,採樣長度N=64,採樣時間T=0.000625s.
f.信號頻率F=250Hz,採樣長度N=32,採樣時間T=0.005s.
g.信號頻率F=50Hz,採樣長度N=32,採樣時間T=0.0046875s.後補32個零做64點FFT。
4、例5-1、例5-2、例5-3。
三、實驗結果與分析
Ⅰ
實驗程序:
Fs=1/0.01;
figure(1);
subplot(221);
N=128;
n=0:N-1;t=0.01*n;
q=n*Fs./N;
x=sin(2*pi*40*t)+sin(2*pi*15*t);
y=fft(x,N);
stem(q,abs(y));
title('DFT')
subplot(222)
x1=ifft(y,N);
stem(n,x1);
title('IDFT')
subplot(223)
stem(n,x);
title('x(t)')
實驗結果:
實驗分析:原始信號與IDFT的信號相同
Ⅱ
實驗程序:
Fs=100;
figure(1);
subplot(211)
N=128;n=0:N-1;t=0.01*n;
q=n*Fs./N;
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);
y=fft(x,N);
stem(n,abs(y));
title('128')
subplot(212)
N=1024;n=0:N-1;t=0.01*n;
q=n*Fs./N;
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);
y=fft(x,N);
stem(n,abs(y));
title('1024')
實驗結果:
實驗分析:圖形的點數增加後的大體圖像與點數少的相同,但是分辨率增加了。
Ⅲ
實驗程序:
T=0.000625;
Fs=1/T;
figure(1);
subplot(221)
title('a');
N=32;n=0:N-1;t=T*n;
q=n*Fs./N;
x=sin(2*pi*50*t);
y=fft(x,N);
stem(q,abs(y));
title('a')
subplot(222);
T=0.005;
Fs=1/T;
N=32;n=0:N-1;t=T*n;
q=n*Fs./N;
x=sin(2*pi*50*t);
y=fft(x,N);
stem(q,abs(y));
title('b')
subplot(223);
T=0.0046875;
Fs=1/T;
N=32;n=0:N-1;t=T*n;
q=n*Fs./N;
x=sin(2*pi*50*t);
y=fft(x,N);
stem(q,abs(y));
title('c')
subplot(224);
T=0.004;
Fs=1/T;
N=32;n=0:N-1;t=T*n;
q=n*Fs./N;
x=sin(2*pi*50*t);
y=fft(x,N);
stem(q,abs(y));
title('d')
figure(2);
subplot(221)
T=0.000625;
Fs=1/T;
N=64;n=0:N-1;t=T*n;
q=n*Fs./N;
x=sin(2*pi*50*t);
y=fft(x,N);
stem(q,abs(y));
title('e')
figure(2);
subplot(222);
T=0.005;
Fs=1/T;
N=32;n=0:N-1;t=T*n;
q=n*Fs./N;
x=sin(2*pi*250*t);
y=fft(x,N);
stem(q,abs(y));
title('f')
figure(2);
T=0.0046875;
Fs=1/T;
N=64;n=0:N-1;t=T*n;
q=n*Fs./N;
x=sin(2*pi*50*t);
x1=[x(1:1:32),zeros(1,32)];
y=fft(x1,64);
subplot(223)
stem(q,abs(y));
title('g')
實驗結果:
實驗分析:通過計算r可以得知圖形是否是發散的,c,d,g是發散的,其他的都是收斂的!
Ⅳ
例5-1、
實驗程序:
%ÀýÌâ5-1
Fs=1/0.01;
figure(1);
N=50;n=0:N-1;t=0.01*n;
q=n*Fs./N;
x=2*sin(4*pi*t)+5*cos(8*pi*t);
y=fft(x,N);
stem(q,abs(y));
title('FFT N=50')
figure(2)
subplot(221)
N=15;n=0:N-1;t=0.01*n;
q=n*2*pi/N;
x=2*sin(4*pi*t)+5*cos(8*pi*t);
y=fft(x,N);
stem(q,abs(y));
title('FFT N=15')
subplot(222)
N=25;n=0:N-1;t=0.01*n;
q=n*2*pi/N;
x=2*sin(4*pi*t)+5*cos(8*pi*t);
y=fft(x,N);
stem(q,abs(y));
title('FFT N=25')
subplot(223)
N=35;n=0:N-1;t=0.01*n;
q=n*2*pi/N;
x=2*sin(4*pi*t)+5*cos(8*pi*t);
y=fft(x,N);
stem(q,abs(y));
title('FFT N=35')
subplot(224)
N=55;n=0:N-1;t=0.01*n;
q=n*2*pi/N;
x=2*sin(4*pi*t)+5*cos(8*pi*t);
y=fft(x,N);
stem(q,abs(y));
title('FFT N=55')
實驗結果:
實驗分析:N的取值決定了圖形的分辨率
例5-2
實驗程序:
%ÀýÌâ5-2
figure(1);
subplot(211)
N=64;n=0:N-1;t=0.01*n;
q=n*2*pi/N;
x=2*sin(4*pi*t)+5*cos(8*pi*t);
y=fft(x,N);
plot(q,abs(y));
title('FFT N=64')
subplot(212)
N=64;n=0:N-1;t=0.01*n;
q=n*2*pi/N;
x=2*sin(4*pi*t)+5*cos(8*pi*t)+0.8*randn(1,N);
y=fft(x,N);
plot(q,abs(y));
title('FFT N=64(with noise)')
實驗結果:
實驗分析:這種噪聲不會影響信號的檢測!
例5-3
實驗程序:
closeall;clf;
L=50000;
N=2*L-1;
n=1:L;
x1=0.5*n;x2=2*n;
t0=clock;
yc=conv(x1,x2);
tc=etime(clock,t0);
yf=ifft(fft(x1,N).*fft(x2,N));
tf=etime(clock,t0);
n1=0:length(yf)-1;
plot(n1,yc,'r');
figure
plot(n1,abs(yf),'b');
實驗結果:
>> tc
tc =
11.7030
>> tf
tf =
11.8750
>> tf-tc
ans =
0.1720
實驗分析:FFT的計算時間比conv函數快。
四、實驗總結:
學會了Matlab分析快速傅立葉變換及其性質。理解了應用FFT進行信號頻譜分析可能出現的問題。做實驗時注意數字相乘和字母相乘需要加點,同時注意提前定義所有需要的基本擴展函數,做實驗時需要仔細認真!