matlab正弦函数fft,正弦函数及其FFT变换(一) | 学步园
在MATLAB中想要畫一個sin函數是很容易的,比如:首先定義t = 0:0.01:10,然后畫出y = sin(2*pi*t)就可以了,最多再加相角啊之類的參數,但如果在C語言中應該如何自己制造一個sin函數呢?
應該借鑒數字信號處理里的抽樣思想:想生成函數x(t) = a*sin(2*pi*f0*t+ψ),就應該考慮到抽樣定理:以等時間間隔進行抽樣,即x[n] = x[n*Ts] 其中Ts = 1/fs(fs是抽樣頻率)。這時候想生成的函數x(t)就變成了x(t) = x(n*Ts) = x(n) = a*sin(2*pi*f0*n/fs+ψ) = a*sin(w*n+ψ),其中w是數字角頻率,這就將模擬時間信號轉化成了數字信號。
舉個例子,比如想生成函數y = sin(20*pi*t),用matlab直接生產的圖形如下所示(取t=0:0.001:1)
matlab程序為
t = 0:0.001:1;
y = sin(20*pi*t);
plot(t,y);
如果想用C語言來實現怎么辦呢?從原函數y = sin(20*pi*t)可知f0 = 10,設fs = 40,n = 0:10(這里的n都是整數)來看看,此時x(n) = sin(2*pi*f0*n/fs),matlab程序為
clear all;
f0=10;
fs=40;
N=10;
n=0:N-1;
y=sin(2*pi*n*f0/fs);
畫出來的圖形如下圖:
現在函數式為x[n] =?sin(n*pi/2),周期是4
為什么看著不像以前的正弦函數了?因為這是對原函數抽樣后得到的,而且它的橫坐標已經變成了n而不是t。為了讓抽樣后的x[n]看起來更像x[t]那么方法只有一個,就是增加抽樣率fs。當抽樣率為80時x[n] = sin(n*pi/4),
f0=10;
fs=80;
N=10;
n=0:N-1;
y=sin(2*pi*n*f0/fs);
plot(n,y);
看著更像x(t)了!這是因為抽樣點更密了。
所以產生x(t)=a*sin(2*pi*f0*t+ψ)的正弦波步驟:
對x(t)進行以fs為抽樣頻率的抽樣后得到
x(n)=a*sin(2*pi*f0*n/fs+ψ)=a*sin(w*n+ψ)
畫的時候指明a,f0,fs,ψ就可以對任意sin函數進行畫圖
那么,如何知道現在畫出來的x(n)就是以前的x(t)呢?以前是T = 0.1S,現在變成了T = 8,在這種情況下如何換算呢?就有FFT了!
總結
以上是生活随笔為你收集整理的matlab正弦函数fft,正弦函数及其FFT变换(一) | 学步园的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学医vs学计算机,学医前VS学医后,简直
- 下一篇: Day 8