傅里叶变换的理解-从正弦信号到傅里叶

本文介绍利用欧拉公式和傅里叶级数进行信号分析的方法,包括如何将周期信号分解为正弦波,以及非周期信号的傅里叶变换原理。通过实例展示了如何使用MATLAB编程实现信号的频谱分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本概念 

 

欧拉公式

根据欧拉公式正余弦信号还可以被指数形式所表示 

 角频率或频率为横轴,振幅和相位为纵轴,画一个坐标系,表示这个正弦信号

在新的坐标系(角频率或频率为横轴,,振幅和相位为纵轴)中,以两条线(甚至两个点就够了),表示了时域波形如图2.1所示的信号,或者说,表示了信号所有的特征信息(频率、幅度和相位)。这种表示法被称为频域表示,表示的结果叫做“频谱”,对应于振幅或者相位分别为幅度谱和相位谱。    

上述正弦信号只有单一频率,因此其频谱只包含一根“线”(谱线),人们常称其为“单色”信号。

 

傅里叶级数 

公式推导,百度或者数学课本。

任何周期信号都能够由不同谐波的正弦波叠加而成,这由傅里叶发现,因此称之为傅里叶级数

可以通过积化和差,把sin和cos化为一个cos 

如果我把一个信号的所有正弦分量的频率算出来画出来,那么就如下图 ,也叫频谱图

频谱是频率谱密度的简称,是频率的分布曲线。复杂振荡分解为振幅不同和频率不同的谐振荡,这些谐振荡的幅值按频率排列的图形叫做频谱

考察某个信号的所有正弦分量,这些正弦分量覆盖的频率范围,被形象地叫做“频带”。这个范围的大小,就是“带宽”——即频带宽度,如图所示。带宽是衡量信号特性的一个重要指标。  

极端情况下,相邻谱线足够接近时,频谱就可表示成连续的曲线了,原来分立的谱线于是简化为曲线中的一个个点 。

 

 根据欧拉公式也可以用指数来表示一个周期信号

欧拉公式

因此傅里叶级数还可以表示成以下指数形式

 如果我把一个信号的所有指数分量的频率算出来画出来,那么就如下图

 

 

可以看到,复频谱除正频率分量外,还包括负频率分量。负频率的出现是数学运算(欧拉公式)的结果,并无物理意义。

 

 总结:

上述正弦信号只有单一频率,因此其频谱只包含一根“线”(谱线),人们常称其为“单色”信号。而在大多数应用场合中,信号是由若干不同频率的单色信号叠加而成的,称为“复合”信号。从频域角度看,复合信号的频谱包含若干条甚至无数条谱线。

 

MATLAB编程实现:y=10+A*sin(2*pi*10*x)+5*sin(2*pi*20*x);

画图用点*不要用-,不然以为没有采样点。时间-幅度图,频率-幅度图


fs=200;%采样频率  是最高频率的两倍以上
t=1/fs;%采样间隔时长
T=2;%采样窗口长度
A=10;%幅度
N=T*fs% 采样点数 T/t
x=[0:(1/fs):T];%周期
len=length(x)-1;%x=N
y=10+A*sin(2*pi*10*x)+5*sin(2*pi*20*x);
subplot(3,1,1);
plot(x,y,'r*');
xlabel('时间/s');
ylabel('幅度');
subplot(3,1,2);
[f,y]=get_fft(y,fs,N);
plot(f,y);
xlabel('f/Hz');
ylabel('幅度');
function [f, spectrum ] = get_fft(s,Fs,L)
%GAN_FFT 此处显示有关此函数的摘要
%   此处显示详细说明
y=fft(s);
p2=abs(y/L);
p1=p2(1:L/2+1);
p1(2:end-1)=2*p1(2:end-1);
f = Fs*(0:(L/2))/L;
spectrum=p1;
 
end
%plot(f,spectrum);

 

 

 

以周期矩形信号为例,从傅里叶级数到傅里叶变换

 

 突然发现好多数学式子啊,知道它是很多正弦信号组成的,那我们来大概看看,小的正弦信号怎么组成了这个周期矩形信号

 

有没有发现前面的正弦信号,矩形脉冲信号,都是周期信号。那么非周期信号怎么办呢?

傅里叶认为,既然周期信号可以用正弦信号来表示,那么非周期信号也可以用正弦信号来逼近。原因是非周期信号可以看成是周期无限大

的周期信号;事实证明,傅里叶的想法是对的,于是才有了大名鼎鼎的傅里叶变换。

再回顾一下傅里叶级数的三角函数形式

 

由于谱间隔为

另外谱的幅度

所以当周期无限增大时,谱线间隔会变密,而谱的幅度会减小。

极端情况下,若周期函数转换为非周期函数,这时离散频谱将成为连续频谱,分量幅值趋于无穷小。

 

 

 

由于

增大时,带宽减小

减小时,带宽增大

这反映了一个普遍的规律:时域上压缩,减小,频域上展宽,增大

考虑一个极端情况,若 ,即矩形脉冲变成冲击函数

,频谱的高阶谐波分量不衰减,成为所谓的白色谱

 

 

 

 

 

### 如何在MATLAB中计算正弦函数的傅里叶变换 为了展示如何在MATLAB中实现这一操作,下面提供了一个具体的例子来说明怎样创建一个正弦信号并对其进行离散傅立叶变换(DFT),以及解释为什么对于实数图像(即灰度级由实数而非复数表示的情况),其傅里叶变换是对称于零频率的[^1]。 #### 创建正弦波形 首先定义时间向量 `t` 和相应的正弦波形 `y`: ```matlab Fs = 100; % Sampling frequency T = 1/Fs; % Sampling period L = 1500; % Length of signal t = (0:L-1)*T; % Time vector f = 5; % Frequency of the sine wave y = sin(2*pi*f*t); % Sine wave generation ``` #### 计算DFT 接着利用内置函数 `fft()` 来执行快速傅里叶变换(Fast Fourier Transform): ```matlab Y = fft(y); P2 = abs(Y/L); % Two-sided spectrum P2 P1 = P2(1:L/2+1); % Single-1); f = Fs*(0:(L/2))/L; plot(f,P1) title('Single-Sided Amplitude Spectrum of y(t)') xlabel('f (Hz)') ylabel('|P1(f)|') ``` 由于实际应用中的大多数情况涉及的是实数值数据而不是复数值,在这种情况下得到的结果会呈现出关于中心点对称的特点。因此当处理像图片这样的真实世界的数据集时,除了设置所谓的“正频谱”,还需要设定对应的“负频谱”。这是因为MATLAB 中 FFT 的输出是以第1行第1列为直流分量的位置排列,并且随着矩阵位置的变化而循环变化。 另外值得注意的一点是在某些应用场景下可能需要将真实的输入转换成复数形式以便进一步分析或与其他算法兼容。例如,在构建自定义的时间源信号过程中,可能会遇到这种情况——尽管原始信号是实值的,但是特定的功能需求可能是基于复数值来进行设计的。这时可以通过FFT方法把实值函数转变为复值版本[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大大U

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值