1.1 傅里葉變換
1.1.1 傅里葉變換概述
傅里葉變換是一種可以將滿足某個(gè)條件的函數(shù)表示成三角函數(shù)(正弦或余弦)表示的線性組合,最初,傅里葉分析是作為熱過程解析分析的工具被提出的,在電路中,這是一種分析非正弦周期信號(hào)的最便捷的工具,傅里葉是法國數(shù)學(xué)家和物理學(xué)家,在1807年的法國科學(xué)學(xué)會(huì)上發(fā)表了運(yùn)用正弦曲線來描述溫度分布,但是論文中有一個(gè)具有爭議性的判定,即任何連續(xù)周期信號(hào)都可以由一組適當(dāng)?shù)恼仪€組合而成,當(dāng)時(shí)拉普拉斯與其他審查者投票通過并要發(fā)表這個(gè)論文,但是拉格朗日認(rèn)為傅里葉提供的方法無法表示帶有棱角的信號(hào),由于一些原因,這篇論文直到拉格朗日去世15年后才被發(fā)表,其實(shí)拉格朗日當(dāng)時(shí)的想法是對(duì)的,正弦曲線的確無法組合一個(gè)帶有棱角的信號(hào),但是我們可以采用正弦曲線組合成的信號(hào)來無限的逼近這個(gè)信號(hào),直到兩種信號(hào)不存在能量差別。
通過上面的描述可以得到一個(gè)結(jié)論,傅里葉變換是一種將不規(guī)則信號(hào)通過正弦信號(hào)的線性組合表示出來的方法,但是為什么不用方波或者三角波來表示原信號(hào)呢,這是因?yàn)榉纸庑盘?hào)的方法是無窮的,但分解信號(hào)的目的是為了更加簡單地處理原來的信號(hào)。用正余弦來表示原信號(hào)會(huì)更加簡單,因?yàn)檎嘞覔碛性盘?hào)所不具有的性質(zhì):正弦曲線保真度。一個(gè)正弦曲線信號(hào)輸入后,輸出的仍是正弦曲線,只有幅度和相位可能發(fā)生變化,但是頻率和波的形狀仍是一樣的。且只有正弦曲線才擁有這樣的性質(zhì),正因如此我們才不用方波或三角波來表示。
我們從物理系統(tǒng)的特征信號(hào)角度來解釋為什么不能用其他信號(hào)的線性組合來表示原始信號(hào),我們生活中常見的現(xiàn)象大多屬于 線性時(shí)不變系統(tǒng) (輸入信號(hào)與輸出信號(hào)滿足線性關(guān)系,且系統(tǒng)參數(shù)不隨時(shí)間變換),無論你采用微分方程或者傳遞函數(shù)還是狀態(tài)空間,所以可以說正弦信號(hào)是系統(tǒng)的特征向量,當(dāng)然指數(shù)信號(hào)也是系統(tǒng)的特征向量,用于標(biāo)識(shí)能量的衰減與累計(jì),系統(tǒng)中的衰減或擴(kuò)散現(xiàn)象大多數(shù)是指數(shù)形式或者復(fù)指數(shù)形式,但是如果輸入的是方波或者三角波,那輸出就不一定是什么形式了,所以,除了指數(shù)信號(hào)與正弦信號(hào)外其他信號(hào)都不是線性系統(tǒng)的特征信號(hào)。
1.1.2 時(shí)域與頻域
從我們出生開始,我們看到的世界都是以時(shí)間貫穿,人的身高走勢,汽車的軌跡都會(huì)隨著事件發(fā)生改變,這種以時(shí)間作為參照來觀察分析動(dòng)態(tài)世界的方法就屬于時(shí)域分析,頻域則是描述信號(hào)在頻率方面特性時(shí)用到的一種坐標(biāo)系,頻域不是真實(shí)存在的,只是一種數(shù)學(xué)構(gòu)建的領(lǐng)域,是一個(gè)遵循特定規(guī)則的數(shù)學(xué)范疇,正弦信號(hào)是頻域中唯一存在的波形,即正弦信號(hào)是對(duì)頻域的描述。
1.1.3 定義
也就是說我們只需要求出上面的幾個(gè)參數(shù)的值,就可以根據(jù)定義式將函數(shù)轉(zhuǎn)化為傅里葉級(jí)數(shù)的形式。與傅里葉級(jí)數(shù)相對(duì)應(yīng)的就是傅里葉變換,這個(gè)定義式就簡單的多。
根據(jù)上面的兩個(gè)公式可以發(fā)現(xiàn),傅里葉變換后的象函數(shù)是以頻率作為自變量的函數(shù),而逆變換后的函數(shù)則是以時(shí)間作為自變量的函數(shù),我們將象函數(shù)用圖像的形式表示出來就成了自變量是頻率的二維圖像,這個(gè)圖像就稱為頻譜圖。
1.2 頻域圖像
在電路分析基礎(chǔ)中,傅里葉經(jīng)常被用于分析非正弦周期信號(hào)電路中,即講一個(gè)輸入激勵(lì)構(gòu)建數(shù)學(xué)模型,采用積分的方式轉(zhuǎn)化為傅里葉級(jí)數(shù),通過計(jì)算每個(gè)頻率狀態(tài)下的電參數(shù)最終分析電路整體的電參數(shù),這就不僅需要最終的級(jí)數(shù)形式,還需要頻域圖像來輔助分析,在這里,我們采用MATLAB來把上面例題中的頻域圖像繪制出來,MATLAB的源代碼如下:
clc
clear
%系數(shù)計(jì)算(用于構(gòu)建傅里葉級(jí)數(shù))
syms t n;
m = 100 ; %高次諧波疊加次數(shù)
T = 2 ; %信號(hào)的周期
f = t^2 ; %函數(shù)表達(dá)式
a0 = int( f, t, -T/2, T/2 )/T ;
an = int( f*cos(n*pi*t), t, -T/2, T/2 ) ;
bn = int( f*sin(n*pi*t), t, -T/2, T/2 ) ;
%轉(zhuǎn)換定義式的形式
n = -round(T+1):1:round(T+1);
anVal = eval( an ) ; %生成an系數(shù)矩陣
bnVal = eval( bn ) ; %生成bn系數(shù)矩陣
An = sqrt( anVal.^2+bnVal.^2 ) ; %幅值開平方計(jì)算
An( round( length(n)/2 ) ) = a0 ;
phi = atan( -bnVal./anVal ) ; %相位計(jì)算
phi( round( length(n)/2 ) ) = 0 ;
%繪制幅度譜
figure(1);
subplot( 2, 1, 1 ) ;
stem( n, An ) ;
title( '幅度譜' ) ;
xlabel( 'n' ) ;
ylabel( 'An' ) ;
%繪制相位譜
subplot( 2, 1, 2 ) ;
plot( n, phi ) ;
title( '相位譜' ) ;
xlabel( 'n' ) ;
ylabel( '|×n' ) ;
%高次諧波擬合函數(shù)曲線
figure( 2 ) ;
t = -T: 0.01: T ;
f = a0 ;
for n=1:m
f = f+eval(an)*cos(n*pi.*t);
f = f+eval(bn)*sin(n*pi.*t);
end
plot( t, f ) ;
title( strcat( num2str( n ), '次諧波疊加') ) ;
xlabel( 't' ) ;
ylabel( 'f(t)' ) ;
最終仿真的結(jié)果如下圖所示。
1.3 DFT算法的MATLAB實(shí)現(xiàn)
傅里葉變換主要分為4類:
(1)傅里葉級(jí)數(shù):將周期性連續(xù)函數(shù)轉(zhuǎn)換為離散頻率點(diǎn)
(2)連續(xù)傅里葉變換:將連續(xù)函數(shù)變換為連續(xù)頻率函數(shù)
(3)離散時(shí)間傅里葉級(jí)數(shù)DFS:將離散函數(shù)變換為連續(xù)頻率的函數(shù)
(4)離散傅里葉變換DFT:將有限長離散函數(shù)變換為離散頻率點(diǎn)上的函數(shù)
利用MATLAB自帶的fft函數(shù)實(shí)現(xiàn)DFT運(yùn)算,源代碼如下。
%45點(diǎn)采樣
subplot( 2, 2, 1 );
N = 45 ;
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('DFT N=45')
%50點(diǎn)采樣
subplot( 2, 2, 2 ) ;
N = 50 ;
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('DFT N=50')
%55點(diǎn)采樣
subplot( 2, 2, 3 ) ;
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 ) ;
plot( q, abs(y) ) ;
title('DFT N=55')
%60點(diǎn)采樣
subplot( 2, 2, 4 ) ;
N = 60 ;
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('DFT N=60')
MATLAB運(yùn)行截圖如下所示。
我們進(jìn)一步增加截取長度與DFT點(diǎn)數(shù),例如增加到256:
N = 256 ;
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('DFT N=256')
此時(shí)信號(hào)的頻譜如下圖所示。
假設(shè)采樣頻率f=100Hz,采樣間隔T=0.01s時(shí),取樣點(diǎn)N的值越大,則譜分辨率F=f/N越小,說明此時(shí)分辨率越高,加入采樣點(diǎn)為256時(shí),既可以實(shí)現(xiàn)兩個(gè)不同頻率信號(hào)的區(qū)分。
1.4 FFT算法的MATLAB實(shí)現(xiàn)
FFT是離散傅立葉變換DFT的快速計(jì)算方法,適用于離散信號(hào),并且注意變換后的點(diǎn)數(shù)與信號(hào)的采樣點(diǎn)數(shù)一致,盡管可以將信號(hào)補(bǔ)0,但補(bǔ)0不能提高頻域的分辨率。matlab中提供了函數(shù)fft做一維的FFT。
(1)時(shí)域譜和頻域譜是相互對(duì)應(yīng);時(shí)域的信號(hào)長度,決定頻域的采樣間隔,它們成導(dǎo)數(shù)關(guān)系;
(2)時(shí)域中信號(hào)有N點(diǎn),每點(diǎn)間隔dt,所以時(shí)域信號(hào)長度為Ndt;那么頻譜每點(diǎn)的間隔就是1/(Ndt)。
clc
clear
N = 256 ;
dt = 0.02 ;
n = 0:N-1 ;
t = n*dt ;
x = sin(2*pi*t) ;
m = N ;
a = zeros( 1, m ) ;
b = zeros( 1, m ) ;
c = zeros( 1, m ) ;
for k=0:m-1
for i=0:N-1
a( k+1 )= a( k+1 )+2/N*x( i+1 )*cos( 2*pi*k*i/N ) ;
b( k+1 )= b( k+1 )+2/N*x( i+1 )*sin( 2*pi*k*i/N ) ;
end
c( k+1 ) = sqrt( a( k+1 )^2+b( k+1 )^2 ) ;
end
%時(shí)域圖
subplot( 2, 1, 1 ) ;
plot( t, x ) ;
title( '原始信號(hào)' ) ;
xlabel( 't' ) ;
ylabel( 'f(t)' ) ;
%頻域圖像
f = ( 0:m-1 )/( N*dt ) ;
subplot( 2, 1, 2 ) ;
plot( f, c ) ;hold on
title( 'Fourier' ) ;
xlabel( '頻率/HZ' ) ;
ylabel( '幅值' ) ;
%計(jì)算頻率
ind = find( c==max(c), 1, 'first' ) ; %查找頻率第一個(gè)最大值
x0 = f( ind ); %得到橫坐標(biāo)
y0 = c( ind ); %得到縱坐標(biāo)
plot( x0, y0, 'ro' );hold off
text( x0+1, y0-0.1, num2str( x0, '頻率=%f' ) ) ;
MATLAB運(yùn)行結(jié)果如下圖所示。
1.3基于51單片機(jī)的頻譜設(shè)計(jì)
1.3.1 功能
我們現(xiàn)在使用51單片機(jī)來實(shí)現(xiàn)頻譜的顯示,通過輸入音頻信號(hào)來輸出對(duì)應(yīng)的頻段的幅值,這次選用的是STC12C5A60S2,運(yùn)行時(shí)鐘33MHz,內(nèi)置ADC采樣,利用LED組成點(diǎn)陣顯示屏幕,通過ADC不停的采樣音頻數(shù)據(jù),將數(shù)據(jù)轉(zhuǎn)換為頻域幅值顯示在LED上面。
1.3.2 原理圖分析
(1)最小系統(tǒng)電路
單片機(jī)系統(tǒng)采用國產(chǎn)的51單片機(jī),在之前的51單片機(jī)中我們已經(jīng)具體了解過51單片機(jī)的應(yīng)用,這里不再詳細(xì)贅述,我們這次采用的是33MHz的晶振,STC12C系列相對(duì)于傳統(tǒng)的51單片機(jī)來說,運(yùn)行速度快了接近12倍,可以運(yùn)行256位的FFT算法,程序采用串口的方式燒錄進(jìn)去,其中P1口可以設(shè)置為ADC輸入口,內(nèi)置8通道10位ADC轉(zhuǎn)換器,采用直流5V供電。
(2)LED驅(qū)動(dòng)電路
由于我們使用的單片機(jī)只有44個(gè)引腳,實(shí)際能用的IO端口僅有35個(gè),而我們是用的是17×16的矩陣,需要33個(gè)端口,去掉1組串口,1個(gè)ADC,剩下的端口速度各不相同,已經(jīng)無法滿足驅(qū)動(dòng)的需要,所以采用74HC595芯片作為驅(qū)動(dòng)電路,74HC595是一個(gè)可以將串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)的芯片,并且可以通過級(jí)聯(lián)的方式輸出數(shù)據(jù),我們采用2片595芯片的級(jí)聯(lián)來實(shí)現(xiàn)串行數(shù)據(jù)轉(zhuǎn)16位并行的的效果,其余的1位數(shù)據(jù)通過IO口來達(dá)到控制的目的。74HC595的時(shí)序圖如下圖所示。
(3)點(diǎn)陣顯示電路
這里采用17×16的點(diǎn)陣作為顯示,這種點(diǎn)陣連接的方式可以通過控制17+16=33個(gè)端口來實(shí)現(xiàn)17*16=272個(gè)LED亮滅的控制。
-
matlab
+關(guān)注
關(guān)注
189文章
3001瀏覽量
233989 -
線性
+關(guān)注
關(guān)注
0文章
203瀏覽量
25622 -
傅里葉變換
+關(guān)注
關(guān)注
6文章
443瀏覽量
43130
發(fā)布評(píng)論請先 登錄
進(jìn)群免費(fèi)領(lǐng)FPGA學(xué)習(xí)資料!數(shù)字信號(hào)處理、傅里葉變換與FPGA開發(fā)等
圖像頻率域分析之傅里葉變換
學(xué)習(xí)傅里葉變換意義和方法
DSP變換運(yùn)算-傅里葉變換
小波變換比傅里葉變換好在哪里_小波變換與傅里葉變換詳解

MATLAB學(xué)習(xí)筆記之傅里葉變換2
傅里葉變換如何用于深度學(xué)習(xí)領(lǐng)域

Matlab實(shí)現(xiàn)傅里葉變換的步驟

傅里葉變換基本性質(zhì) 傅里葉變換本質(zhì) 傅里葉變換的應(yīng)用
傅里葉變換的定義 傅里葉變換的意義
傅里葉變換基本原理及在機(jī)器學(xué)習(xí)應(yīng)用

評(píng)論