[ MATLAB ] 傅里叶变换(一):傅里叶级数(正余弦表示)

前言

通信相关的铁子们想必对傅里叶变换这个概念有所了解,其可以从频域分析信号特性,可以说是通信系统分析和设计的重要依据。然而,傅里叶变换种类繁多,傅里叶级数(FS)、傅里叶变换(FT)、离散时间傅里叶变换(DTFT)、离散傅里叶变换(DFT)、快速傅里叶变换(FFT)等等。概念多了总是容易打架,例如:

  1. 傅里叶级数(FS)为什么要引入复频谱?其优势在哪?
  2. 为什么傅里叶变换(FT)的频谱称为谱密度?在拥有谱密度的前提下,如何依据定义还原出时域信号?
  3. 离散时间傅里叶变换(DTFT)的横坐标为什么是数字频谱?和模拟频率有什么关联和区别?
  4. 离散傅里叶变换(DFT)的隐含周期性体现在哪里?
  5. 为什么要引入快速傅里叶变换(FFT)?

为了解释这些问题,纯粹依靠教科书上的数学公式,理解是有些困难的(聪明蛋除外)。因此,我们希望依据Matlab仿真,不仅可以直观理解这些变换之间的关系,体验数学公式背后的隐藏信息,并且,能够建立通信仿真的基本概念,为以后更加复杂的链路级,甚至是系统级通信仿真打下坚实基础。话不多说,我们先从最基本的傅里叶级数开始。

傅里叶级数(FS)的正余弦表示

理论回顾

x ( t ) x(t) x(t)是周期性连续时间信号,那么 x ( t ) x(t) x(t)可由三角函数的线性组合表示,即展开为傅里叶级数。设 x ( t ) x(t) x(t)周期为 T T T,模拟角频率 Ω 0 = 2 π T \Omega_0 = \frac{{2\pi }}{T} Ω0=T2π,模拟频率 F = 1 T = Ω 0 2 π F = \frac{1}{T} = \frac{\Omega_0}{{2\pi }} F=T1=2πΩ0,则傅里叶级数展开表达式为:
x ( t ) = a 0 + ∑ n = 1 ∞ [ a n cos ⁡ ( n Ω 0 t ) + b n sin ⁡ ( n Ω 0 t ) ] x\left( t \right) = {a_0} + \sum\limits_{n = 1}^\infty {\left[ {{a_n}\cos \left( {n{\Omega_0}t} \right) + {b_n}\sin \left( {n{\Omega_0}t} \right)} \right]} x(t)=a0+n=1[ancos(nΩ0t)+bnsin(nΩ0t)]
其中, n n n为表示谐波次数。各次谐波成分的幅度值计算如下:
a 0 = 1 T ∫ t 0 t 0 + T x ( t ) d t {a_0} = \frac{1}{{T}}\int\limits_{{t_0}}^{{t_0} + T} {x\left( t \right)dt} a0=T1t0t0+Tx(t)dt

a n = 2 T ∫ t 0 t 0 + T x ( t ) cos ⁡ ( n Ω 1 t ) d t {a_n} = \frac{2}{{T}}\int\limits_{{t_0}}^{{t_0} + T} {x\left( t \right)\cos \left( {n{\Omega_1}t} \right)dt} an=T2t0t0+Tx(t)cos(nΩ1t)dt

b n = 2 T ∫ t 0 t 0 + T x ( t ) sin ⁡ ( n Ω 1 t ) d t {b_n} = \frac{2}{{T}}\int\limits_{{t_0}}^{{t_0} + T} {x\left( t \right)\sin \left( {n{\Omega_1}t} \right)dt} bn=T2t0t0+Tx(t)sin(nΩ1t)dt

通常积分区间为 0 → T 0 \to T 0T

当然能够进行傅里叶级数展开的周期信号,必须满足**“Dirichlet”**条件,但是这里并不展开描述。

Matlab仿真验证

上述理论中都是数学公式,很难形成直观印象,并且理解也很难深刻。下面通过Matlab仿真对理论进行验证梳理。

  • 步骤1:实现连续周期信号 x ( t ) x(t) x(t)

在实现之前首先考虑两个问题:(1)周期信号的定义域为 ( − ∞ , ∞ ) \left( { - \infty ,\infty } \right) (,),Matlab中可能实现吗?(2)连续信号代表时域上由无穷多的取值,这在计算机中可能做到吗?

显然,在仿真中我们无法实现一个满足定义域无穷,且时间取值无穷的信号。因此,我们需要对相关要求进行松弛/替代。(1)周期信号:定义域无穷 → \to 定义域包含整数个周期;(2)连续信号:时域无穷取值 → \to 采用符号时间变量。

syms t;  % 连续时间变量
T = 2;  % 周期
periodic_signal = rectangularPulse(t)+rectangularPulse(t-T)+rectangularPulse(t-2*T);  % 周期信号
ezplot(periodic_signal,[-0.5, -0.5+3*T]);  % 绘制周期信号

原始周期信号

  • 步骤2:原始定义计算谐波分量,从而进行线性组合

这里采用原始定义进行验证,计算各次谐波对应的幅值,频率并进行线性组合,最终的叠加信号应该逼近原始的周期信号。与步骤1类似,虽然线性组合的谐波项数 n n n应该是无穷,但是在实际仿真中,我们只能取有限项数。

n = 5;  % 谐波次数
components = sym('c',[2,n]);  % 谐波矩阵
a_0 = 1/T*int(periodic_signal,0,T);  % 直流分量
for ii=1:n
    a_n = 2/T*int(periodic_signal*cos(ii*2*pi/T*t),0,T);  % 余弦分量
    b_n = 2/T*int(periodic_signal*sin(ii*2*pi/T*t),0,T);  % 正弦分量
    components(1,ii) = a_n*cos(ii*2*pi/T*t);
    components(2,ii) = b_n*sin(ii*2*pi/T*t);
end 
signal_approximate = a_0+sum(sum(components));  % 求和/线性叠加近似

步骤3:绘制 x ( t ) x(t) x(t)和叠加近似信号图像,进行直观验证项数5
在此基础上,进一步增加谐波次数( n = 20 n=20 n=20),可以发现逼近效果更好。由此,不难预见,当谐波次数趋近于无穷时,可以完全逼近原始信号 x ( t ) x(t) x(t)
项数20

仿真总结

  1. 模拟角频率 Ω 0 \Omega_0 Ω0,说的俗一点,就是三角函数里面的角频率。单位:rad/s;物理意义:1s内转动的圈数。这与离散时间傅里叶变换(DTFT)中的数字角频率区别。
  2. 周期连续信号在实际应用中无法实现,我们更喜欢非周期,离散的信号/函数。
  3. 依据正余弦定义,从而逼近原始信号 x ( t ) x(t) x(t)需要三个式子计算 a 0 , a n , b n a_0,a_n,b_n a0,an,bn。虽然这已经比较简便了,但是总希望用更少的式子进行计算。因此,我们将引入复频谱表示,这将在下一篇文章中进行验证。

创作不易,希望铁子们可以给出宝贵的建议,这将是我这个小菜猫不断前进的动力,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值