目錄
- 一、實驗目的
- 二、實驗原理
- 三、示例演示--- fft 在信號分析中的應用
- 四、實驗內容
- 更多相關文章點這里哦
一、實驗目的
1.進一步加深DFT演算法的原理和基本性質的理解;
2.學習用FFT對信號進行譜分析的方法,并分析其誤差及其原因;
二、實驗原理
1.N點序列的DFT和IDFT變換定義式如下:


利用旋轉因子
具有周期性,可以得到快速演算法(FFT),
在MATLAB中,可以用函式
X=fft(x) %計算N點的DFT,N為序列x[k]的長度,即N=length(x);
X=fft(x,N)%計算序列x[k]的N點DFT;
x=ifft(X) %計算N點的IDFT,N為序列x[m]的長度;
x=ifft(X,N)%計算序列x[m]的N點IDFT;
三、示例演示— fft 在信號分析中的應用
【例4.1】有一個信號,其中,使用DFT頻譜分析方法從受噪聲污染的信號x(t)中鑒別出有用的信號,
clear all
fs=1000;
f1=100;
dt=1/fs;
t=0:dt:1; %采樣周期為0.001s,即采樣頻率為1000Hz;
N=length(t);
x=sin(2*pi*f1*t)+0.8*randn(1,N); %產生受噪聲污染的正弦波信號;
subplot(3,1,1)
plot(t,x); %畫出時域信號;
axis([0 0.3,-4 4]);
xlabel('(a)輸入信號的時域波形');
L=1024;
X=fft(x,L); %對x的L點傅里葉變換;
f=(0:L-1)*fs/L;
subplot(3,1,2)
plot(f,abs(X));
xlabel('(b)輸入信號的抽樣后的DFT');
X1=fftshift(X); %對抽樣頻譜點的值重新排列;
f1=(-L/2:L/2-1)*fs/L; %設定頻率軸坐標;
subplot(3,1,3)
%plot(f1,X1); %畫出頻域信號;
plot(f1,abs(X1));
xlabel('(c)輸入信號的頻譜'); %畫出頻域信號;

圖1 輸入信號的時域頻域波形圖
四、實驗內容
1.假設現含有3種頻率成分,
,
,
,
,
,利用DFT分析
的頻譜,
(1)對
抽樣后加矩形窗截斷(窗函式的長度為128),然后對其做128點的DFT并畫出對應的頻譜圖
,再對截短信號做512的DFT并畫出對應的頻譜圖
,分析其特點,總結實驗中的主要結論,
clear all
fs=100;
f1=20;
f2=20.5;
f3=40;
dt=1/fs;
N=128;
t=0:dt:(N-1)*dt; %采樣周期為0.001s,即采樣頻率為1000Hz;
x=sin(2*pi*f1*t)+sin(2*pi*f2*t)+sin(2*pi*f3*t); %產生受噪聲污染的正弦波信號;
subplot(3,1,1)
plot(t,x); %畫出時域信號;
axis([0 0.3,-4 4]);
xlabel('(a)輸入信號的時域波形');
L=128;
X=fft(x,L); %對x的L點傅里葉變換;
f=(0:L-1)*fs/L;
subplot(3,1,2)
plot(f,abs(X));
xlabel('(b)輸入信號的抽樣后的DFT');
X1=fftshift(X); %對抽樣頻譜點的值重新排列;
f1=(-L/2:L/2-1)*fs/L; %設定頻率軸坐標;
subplot(3,1,3)
%plot(f1,X1); %畫出頻域信號;
plot(f1,abs(X1));
xlabel('(c)輸入信號的頻譜'); %畫出頻域信號;
clear all
fs=100;
f1=20;
f2=20.5;
f3=40;
dt=1/fs;
N=128;
t=0:dt:(N-1)*dt; %采樣周期為0.001s,即采樣頻率為1000Hz;
x=sin(2*pi*f1*t)+sin(2*pi*f2*t)+sin(2*pi*f3*t); %產生受噪聲污染的正弦波信號;
subplot(3,1,1)
plot(t,x); %畫出時域信號;
axis([0 0.3,-4 4]);
xlabel('(a)輸入信號的時域波形');
L=512;
X=fft(x,L); %對x的L點傅里葉變換;
f=(0:L-1)*fs/L;
subplot(3,1,2)
plot(f,abs(X));
xlabel('(b)輸入信號的抽樣后的DFT');
X1=fftshift(X); %對抽樣頻譜點的值重新排列;
f1=(-L/2:L/2-1)*fs/L; %設定頻率軸坐標;
subplot(3,1,3)
%plot(f1,X1); %畫出頻域信號;
plot(f1,abs(X1));
xlabel('(c)輸入信號的頻譜'); %畫出頻域信號;
(2)若對
抽樣后加矩形窗截斷(窗函式的長度為512),然后對其做512的DFT并畫出對應的頻譜圖
,對比(1)的結果,分析其結論,
clear all
fs=100;
f1=20;
f2=20.5;
f3=40;
dt=1/fs;
N=512;
t=0:dt:(N-1)*dt; %采樣周期為0.001s,即采樣頻率為1000Hz;
x=sin(2*pi*f1*t)+sin(2*pi*f2*t)+sin(2*pi*f3*t); %產生受噪聲污染的正弦波信號;
subplot(3,1,1)
plot(t,x); %畫出時域信號;
axis([0 0.3,-4 4]);
xlabel('(a)輸入信號的時域波形');
L=512;
X=fft(x,L); %對x的L點傅里葉變換;
f=(0:L-1)*fs/L;
subplot(3,1,2)
plot(f,abs(X));
xlabel('(b)輸入信號的抽樣后的DFT');
X1=fftshift(X); %對抽樣頻譜點的值重新排列;
f1=(-L/2:L/2-1)*fs/L; %設定頻率軸坐標;
subplot(3,1,3)
%plot(f1,X1); %畫出頻域信號;
plot(f1,abs(X1));
xlabel('(c)輸入信號的頻譜'); %畫出頻域信號;
(3)如果增大抽樣頻率,重做(1)和(2),對比上面的結果,分析你的結論,
clear all
fs=1000;
f1=20;
f2=20.5;
f3=40;
dt=1/fs;
N=128;
t=0:dt:(N-1)*dt; %采樣周期為0.001s,即采樣頻率為1000Hz;
x=sin(2*pi*f1*t)+sin(2*pi*f2*t)+sin(2*pi*f3*t); %產生受噪聲污染的正弦波信號;
subplot(3,1,1)
plot(t,x); %畫出時域信號;
axis([0 0.3,-4 4]);
xlabel('(a)輸入信號的時域波形');
L=128;
X=fft(x,L); %對x的L點傅里葉變換;
f=(0:L-1)*fs/L;
subplot(3,1,2)
plot(f,abs(X));
xlabel('(b)輸入信號的抽樣后的DFT');
X1=fftshift(X); %對抽樣頻譜點的值重新排列;
f1=(-L/2:L/2-1)*fs/L; %設定頻率軸坐標;
subplot(3,1,3)
%plot(f1,X1); %畫出頻域信號;
plot(f1,abs(X1));
xlabel('(c)輸入信號的頻譜'); %畫出頻域信號;
clear all
fs=1000;
f1=20;
f2=20.5;
f3=40;
dt=1/fs;
N=128;
t=0:dt:(N-1)*dt; %采樣周期為0.001s,即采樣頻率為1000Hz;
x=sin(2*pi*f1*t)+sin(2*pi*f2*t)+sin(2*pi*f3*t); %產生受噪聲污染的正弦波信號;
subplot(3,1,1)
plot(t,x); %畫出時域信號;
axis([0 0.3,-4 4]);
xlabel('(a)輸入信號的時域波形');
L=512;
X=fft(x,L); %對x的L點傅里葉變換;
f=(0:L-1)*fs/L;
subplot(3,1,2)
plot(f,abs(X));
xlabel('(b)輸入信號的抽樣后的DFT');
X1=fftshift(X); %對抽樣頻譜點的值重新排列;
f1=(-L/2:L/2-1)*fs/L; %設定頻率軸坐標;
subplot(3,1,3)
%plot(f1,X1); %畫出頻域信號;
plot(f1,abs(X1));
xlabel('(c)輸入信號的頻譜'); %畫出頻域信號;
clear all
fs=1000;
f1=20;
f2=20.5;
f3=40;
dt=1/fs;
N=2048;
t=0:dt:(N-1)*dt; %采樣周期為0.001s,即采樣頻率為1000Hz;
x=sin(2*pi*f1*t)+sin(2*pi*f2*t)+sin(2*pi*f3*t); %產生受噪聲污染的正弦波信號;
subplot(3,1,1)
plot(t,x); %畫出時域信號;
axis([0 0.3,-4 4]);
xlabel('(a)輸入信號的時域波形');
L=512;
X=fft(x,L); %對x的L點傅里葉變換;
f=(0:L-1)*fs/L;
subplot(3,1,2)
plot(f,abs(X));
xlabel('(b)輸入信號的抽樣后的DFT');
X1=fftshift(X); %對抽樣頻譜點的值重新排列;
f1=(-L/2:L/2-1)*fs/L; %設定頻率軸坐標;
subplot(3,1,3)
%plot(f1,X1); %畫出頻域信號;
plot(f1,abs(X1));
xlabel('(c)輸入信號的頻譜'); %畫出頻域信號;
更多相關文章點這里哦
數字信號處理----全套Matlab實驗報告
通信工程(資訊類,電子類,電氣工程,自動化,計算機,軟體工程,機電,等相關專業)全套學習指導
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/286708.html
標籤:其他
上一篇:網路編程基礎知識 htons(), ntohl(), ntohs(),htons(),inet_add(),inet_ntoa(),大小端法
下一篇:速騰聚創3d激光雷達整理
