暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

正弦函数及其FFT变换(一)

EE漫谈 2018-10-08
1630

 在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了!



文章转载自EE漫谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论