數字信號處理②之從傅里葉係數到DFT




一、前言

  • 信號與系統課程學了一遍傅里葉變換,數字信號處理課程學了一遍離散傅里葉變換和快速傅里葉變換,但是現在談到傅里葉變換也未能夠一語道出他的本質和精髓,我覺得對於這個在數字信號處理領域有着元老地位的傅里葉變換僅僅是瞭解是不夠的,因爲我發現在進行很多數字信號處理時這個理論往往很有用,能夠突破常規思維另闢獨特的解決方法,本文將以最簡單的思維方式去討論如何從傅里葉係數推導到DFT。

二、對合成信號進行各次諧波分析

  • 從上一篇文章我們知道,欲求一個信號中某種頻率的分量,只要將這個信號與欲求頻率的信號作相關,即相乘求積分就能夠得到這個信號中欲求頻率所佔的分量。

(一)合成信號

  • 在上一篇文章中,我們通過正弦波奇次諧波的疊加合成了方波,這一次爲了使結果更明顯同時也爲了計算方便,我們將諧波增加到15次,看起來感覺更像方波了,同時使用for循環替代了原來的操作,看起來更簡便
M=15;%諧波次數
sine=zeros(M,N);%各次諧波存放的矩陣
square=zeros(1,N);%存放合成方波
figure(1);
for i=1:2:M
    sine(i,:)=sin(2*pi*i*f*t)/i;%生成i次諧波
    square=sine(i,:)+square;%將諧波疊加
    subplot(M,1,i);
    plot(sine(i,:));
    title(sprintf('%d次諧波信號',i));
end
clear i;%清除臨時變量i
figure(2);
plot(square);
title(sprintf('由1至%d次諧波疊加而成的方波',M));

在這裏插入圖片描述
在這裏插入圖片描述

(二)使用復指數代替正弦餘弦

  • 由歐拉公式

在這裏插入圖片描述

  • 可以知道,cos(wt)和sin(wt)兩個相關函數可以用指數e的形式來代替,這樣可以簡化運算

(三)用指數信號與合成信號作相關進行各次諧波分析

  • 將合成信號與相關函數相乘
y_dft(1,:)  =  dft_exp(f,0*w,t);
y_dft(2,:)  =  dft_exp(f,1*w,t);
y_dft(3,:)  =  dft_exp(f,2*w,t);
y_dft(4,:)  =  dft_exp(f,3*w,t);
y_dft(5,:)  =  dft_exp(f,4*w,t);
y_dft(6,:)  =  dft_exp(f,5*w,t);
y_dft(7,:)  =  dft_exp(f,6*w,t);
y_dft(8,:)  =  dft_exp(f,7*w,t);
y_dft(9,:)  =  dft_exp(f,8*w,t);
y_dft(10,:) =  dft_exp(f,9*w,t);
y_dft(11,:) =  dft_exp(f,10*w,t);
y_dft(12,:) =  dft_exp(f,11*w,t);
y_dft(13,:) =  dft_exp(f,12*w,t);
y_dft(14,:) =  dft_exp(f,13*w,t);
y_dft(15,:) =  dft_exp(f,14*w,t);
y_dft(16,:) =  dft_exp(f,15*w,t);
  • 求和
Y_DFT(1)  = sum_len(y_dft(1,:) ,N)/N;
Y_DFT(2)  = sum_len(y_dft(2,:) ,N)/N;
Y_DFT(3)  = sum_len(y_dft(3,:) ,N)/N;
Y_DFT(4)  = sum_len(y_dft(4,:) ,N)/N;
Y_DFT(5)  = sum_len(y_dft(5,:) ,N)/N;
Y_DFT(6)  = sum_len(y_dft(6,:) ,N)/N;
Y_DFT(7)  = sum_len(y_dft(7,:) ,N)/N;
Y_DFT(8)  = sum_len(y_dft(8,:) ,N)/N;
Y_DFT(9)  = sum_len(y_dft(9,:) ,N)/N;
Y_DFT(10) = sum_len(y_dft(10,:),N)/N;
Y_DFT(11) = sum_len(y_dft(11,:),N)/N;
Y_DFT(12) = sum_len(y_dft(12,:),N)/N;
Y_DFT(13) = sum_len(y_dft(13,:),N)/N;
Y_DFT(14) = sum_len(y_dft(14,:),N)/N;
Y_DFT(15) = sum_len(y_dft(15,:),N)/N;
Y_DFT(16) = sum_len(y_dft(16,:),N)/N;
stem(0:15,abs(Y_DFT));
title('DFT幅值譜');

在這裏插入圖片描述

  • 可以看到1、3、5、7、9、11、13、15次諧波的幅值,和疊加前的幅值是一樣的,而0、2、4、6、8、10、12、14次諧波因爲合成信號時並沒有輸入,所以其值都爲零
  • 接下來看一下相位譜
stem(0:15,angle(Y_DFT)*180/pi);
title('DFT相位譜');

在這裏插入圖片描述

  • 可以看到1、3、5、7、9、11、13、15次諧波的相位都是90度,與輸入信號相位相同,而0、2、4、6、8、10、12、14次諧波因爲輸入爲零,所以輸出的信號實部和虛部都趨近於零,對它求相位其實是沒有意義的

回到頂部


三、從傅里葉係數到DFT

(一)FT、DTFT、DFT

  • FT(Fourier transform)是傅里葉變換,他是將連續的時域信號變換到連續的頻域信號的工具,但是應爲時域和頻域都是連續的信號,而數字系統只能夠處理離散的信號,所以FT無法在數字系統中使用。
  • DTFT(Discrete Time Fourier Transform)離散時間傅里葉變換,它是將連續的時域信號通過採樣進行離散化後,再變換到頻域的工具,但是頻域信號依然是連續的,數字系統無法處理。
  • DFT(Discrete Fourier Transform)離散傅里葉變換,它是將將連續的時域信號通過採樣進行離散化後,變換到頻域信號,再將頻域信號通過採樣進行離散化,得到離散的頻域信號,因爲其時域信號和頻域信號都是離散的,可以很方便計算機進行計算,所以相對於前兩者它是在數字系統中運用最廣的。

(二)從傅里葉係數到DFT

  • 仔細觀察DFT的公式,然後回憶前面我們進行的步驟

    • k=1時,將x(n)這個序列與e^(-2πkn/N)相乘,然後求積分
    • k=3時,
    • k=5時,

      在這裏插入圖片描述
  • 仔細一想,會發現k=1時對應1次諧波,k=3時對應3次諧波,k=5、7、9…

  • 其實我們之前作的就是DFT,只不過是我們知道了原信號中有哪些頻率分量,所以我們只要要用什麼頻率去作相關,而對於DFT,我們並不知道原信號中含有那些頻率分量,所以我們需要更多的頻率都拿來做相關,但是這個頻率到底需要多少呢?於是我們規定一個間隔,每個多少進行一次採樣,只要保證我們這個間隔足夠小,我們就能分別出原信號中的相差足夠小的頻率分量,這個間隔,就叫做頻譜分辨率。

  • 關於頻譜分辨率,你會發祥它不僅與DFT的點數有關,還與採樣率有關,只要記住

=÷頻譜分辨率=採樣率÷採樣點數

  • 前面我們分析過了,DFT就是對原信號進行信號的相關,也就是對原信號乘以一個欲知頻率的復指數信號然後求和求均值。爲了保證足夠的分辨率並且方便進行頻譜分析,我們將採樣點數設置成128,基波頻率設置成1Hz,採樣率設置成128Hz,那麼頻譜分辨率就是128Hz÷128=1Hz。爲了得到完整的DFT頻譜,我們用頻率爲[0:1:127](最小值是0,最大值是127,步進1,標準的matlab寫法)的復指數信號去與原信號作相關。
y_dft=zeros(N,N);%合成信號與相關信號相乘後存放到這裏
for i=0:N-1
    y_dft(i+1,:)  =  dft_exp(square,i*f,t);
end
  • 求和
Y_DFT=zeros(1,N);%DFT頻譜
for i=0:N-1
    Y_DFT(:,i+1)  = sum_len(y_dft(i+1,:) ,N)/N;
end
  • 畫出幅度譜
stem(0:N-1,abs(Y_DFT));
set(gca,'XTick',0:10:N-1);
title('DFT幅值譜');

在這裏插入圖片描述

  • 可以看到各次諧波的分量值,正好是之前輸入的值
  • 關於右邊爲什麼會有一個對稱的頻譜,這個其實用最簡單的思維來理解就是這樣的,由於我們設置的採樣率只有128Hz,根據奈奎斯特採樣定理,我們能夠採樣的最大不失真信號的頻率就是128÷2=64Hz,也就是說從64Hz到127Hz的頻譜是由於採樣時產生的失真引入的,所以實際上這部分頻譜並沒有意義,也就是說我們只需要關心0到64Hz的頻譜就行了,同時我們的頻譜域就限制在了64Hz

最後

  • 本文僅僅是以最簡單的思維方式來討論它的本質及實現,但在實際應用過程中還有很多地方需要注意,例如柵欄效應、頻譜泄露、頻域混疊、窗函數等等。
  • 關於FFT(fast Fourier transform),它本質上就是DFT,只不過它根據DFT運算過程中旋轉因子的奇、偶、虛、實、對稱等特性,簡化了計算量
  • 關於DFT,它的作用就是將時域信號轉換到頻域信號,給人們提供了另一種獨特的方式去觀察信號,與其說它是一種工具,不如說它是人們的第三隻眼睛,讓人們擁有更強大的能力去觀察世界。
  • 最後送上一句,紙上得來終覺淺,絕知此事要躬行。

聲明:本文僅作爲個人技術交流,所述如有不當之處,歡迎讀者批評指正!
轉載請註明出處:https://blog.csdn.net/qq_39432978/article/details/89411438


回到頂部

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章