基于信号案例,解析离散傅里叶变换结果的本质与公式推导

假设待分析的模拟信号为y(t) = A * sin(w1 * t + Q1) + B * sin(w2 * t + Q2) + C, FFT的目标就是根据采样点数据,获取A,B,w1, w2的信息(Q1,Q2假设为0)
用如下参数模拟未知信号y(t):
#define A 10
#define B 20
#define C 50

#define Q1 0
#define Q2 0

#define freq_signal_1 1
#define freq_signal_2 16
#define freq_sample (64 * freq_signal_1) //采样周期

w1 = 2 * pi* freq_signal_1;
w2 = 2 * pi* freq_signal_2;

令time[i] =i* T (T = 1 / freq_sample),所以采样数数据为为
(time[i],y (time[i]), i = 0 ~63
换一种表示方法,即为
(0*T,S0),(T, S1), … (63T, S63) //这是DFT或者FFT的唯一输入,其他信息理论上不可见的

按照离散傅里叶的变换公式
X(k) = Sum(S(i) * W(k,i,N)), (i = 0 ~N-1, N=64)//这是我们的计算机要计算的内容,,假设算出来的结果为Results (k)
下面的内容为其本质:
X(k) = Sum ( y(time[i]) * [cos(2 * pi * k * i/N) + j * sin(2* pi * k * i / N) ] ), (i = 0 ~ N-1, N= 64),
下面把y(time[i])进一步展开
= Sum ((A * sin(w1 * i / N) + B * sin (w2 * i / N ) +C ) * [cos(2 * pi * k * i/N) + j * sin(2* pi * k * i / N) ] ),展开如下
= Sum ( A * sin(w1 * i / N) * cos(2 * pi * k * i/N) + A * sin(w1 * i / N) * j * sin(2* pi * k * i / N)
+B * sin (w2 * i / N ) * cos(2 * pi * k * i/N) + B * sin (w2 * i / N ) * j * sin(2* pi * k * i / N)
+C * cos(2 * pi * k * i/N) + C * j * sin(2* pi * k * i / N) ),
当 k = 0时, X(k) = Sum ( A * sin(w1 * i / N) + B * sin (w2 * i / N ) +C),(i = 0 ~ N-1, N= 64),
= C * 64 (为啥带A,B两项的sum为0,这个需要自己理解下)
即 Results (0) = N * C,所以C = Results (0) / N,
说明:k = 0恰好是一个特殊的情况,换一个general k ( 即k !=0)试一下,先看带常数C的项,
Sum (C * cos(2 * pi * k * i/N) + C * j * sin(2* pi * k * i / N) ) , (i = 0 ~ N-1, N= 64)一定为0(直接观察可以得到该结果,原理请见下面的内容)
所以 X(k) = Sum ( A * sin(w1 * i / N) * cos(2 * pi * k * i/N) + A * sin(w1 * i / N) * j * sin(2* pi * k * i / N)
+B * sin (w2 * i / N ) * cos(2 * pi * k * i/N) + B * sin (w2 * i / N ) * j * sin(2* pi * k * i / N) ) , (i = 0 ~ N-1, N= 64)
将w1,w2带入
X(k) = Sum (
A * sin(2 * pi* freq_signal_1* i / N) * cos(2 * pi * k * i/N) +
A * sin(2 * pi* freq_signal_1* i / N) * sin(2* pi * k * i / N)* j +
B * sin(2 * pi* freq_signal_2* i / N) * cos(2 * pi * k * i/N) +
B * sin(2 * pi* freq_signal_2* i / N) * sin(2* pi * k * i / N) * j
) , (i = 0 ~ N-1, N= 64)

很重要的一句话,当k != freq_signal_1且k != freq_signal_2时,频率不同的三角函数相乘,在一个完整周期的积分必定为0(周期的整数倍也同样如此),上述中带C项的sum求和也满足该条件,常数与三角函数的积分,周期整数倍,所以
X(k = f1) = A * sum ( sin(2 * pi * f1 * i/N) * cos(2 * pi * f1 * i/N) + j * sin(2 * pi * f1 * i/N) * sin(2 * pi * f1 * i/N) )
= A * sum ( sin (W) cos(W) + j * sin (W) * sin (W))
= A * sum ((sin (W + W) + sin(W-W) /2 - j * (cos(W + W) -cos(W-W)) / 2)
= -j N * A /2
代码仿真出来,
X(0) = 3200, C = 3200 / 64;
X(1) = 0 - 320j, A * 2 = 320 / 64 ;
X (16) = 0 - 640j, B * 2 = 640 /64;
X (48) = 0 + 640 j
X (63) = 0 + 320j
为啥 为A/2, B/2 自己理解一下,卖个关子,从X(1)的数据还可以得出相位为-90度,即信号为cos (x - pi/2) 即为 sin x。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值