数字信号处理——离散傅里叶变换

15 篇文章 17 订阅

一、四种信号的傅里叶分析。

四种信号时域与频域之间的关系。

时域离散化<=>频域周期化(时域抽样定理)

时域周期化<=>频域离散化(频域抽样定理)

上图中,第一张子图,时域和频域均为连续函数,它无法用ADC采样,以及无法用FPGA/DSP来计算出频谱。

第二张子图,时域为连续函数,它无法用ADC采样得到。

第三张子图,频域为连续函数,它无法用FPGA/DSP来计算出频谱。

第四张子图,时域是离散的,对应了ADC采样后为离散的数值,而频域也为离散的,说明离散傅里叶变换的结果不能完全代表实际的频谱(存在误差),但是离散傅里叶变换可以让你观察到频谱的大致的趋势。

只有时域和频域均为离散的,才可以使用ADC采样后,再通过FPGA/DSP等数字芯片进行处理。

二、傅里叶变换的解析。

对离散周期信号取一个周期的值,再做离散傅里叶级数,就是离散傅里叶变换。

所以离散傅里叶变换,暗含了把离散非周期信号经过周期延拓后,变成了离散周期信号。

只不过周期延拓不需要自己处理,这也简化了计算。

同时,揭示了傅里叶变换的基是周期的正弦信号,所以它只能将周期信号变换到频域中去。

傅里叶变换的基,是优势的同时也是劣势。因为它不能处理时变信号,比如:心电信号等。

对于时变信号,使用小波变换更适合,因为小波变换的基不是周期信号,而是一个有限长且衰减的基,所以它既能提取频域的信息,也能提取时域的信息。

三、三角函数的正交性。

这里,sin和cos是正交的,只有与自己频率相同时,积分不为0,也就是说留下了该频率

而与自己频率不同的,积分为0,就是去掉了。

我们再看傅里叶变换的公式。

其中指数可以用欧拉公式转为正弦函数

而积分限为负无穷到正无穷,可以看成是整个频域,从负无穷一直扫频到正无穷,积分不为0的频率,就留下来了,最后连在一起形成了频谱。

其中,模为幅频特性,而相角为相频特性。

这就是为什么傅里叶变换需要用正交的正弦、余弦函数了,那么换成另一种也是正交的函数,作为傅里叶变换的基,是否也是可行的?这个问题由读者自己思考了。

连续信号的傅里叶变换是积分,那么对于离散信号的傅里叶变换就是求和,但要满足绝对可和的条件。

四、离散傅里叶变换Matlab实现。

function [] = dft()
clear;close all;clc;

%选择其中一行xk
xk = [1,1,1,1]; % 时域
% xk = [1,1,1,1,0,0,0,0]; % 时域
% xk = [1,1,1,1,0,0,0,0,0,0,0,0]; % 时域

N = length(xk);
Wn = zeros(N,N);
WnExpRect = zeros(N,N);
for m=1:N
	for k=1:N
		%m和k作为Matlab数组下标是从1开始(但公式上是从0开始)
		% 但是作为幂要减1
		WnExpRect(m,k) = (m-1)*(k-1); %Wn幂的矩阵
		Wn(m,k) = calW(N)^((m-1)*(k-1));
	end
end
WnExpRect
Xm = Wn * xk' % 矩阵相乘得到DFT结果,频域
subplot(211)
stem(xk); 
subplot(212)
stem(abs(Xm)); % 幅频特性
hold on
plot(abs(Xm));

function result = calW(N) %计算Wn
	result = exp(-i * (2*pi/N)); 

xk = [1,1,1,1]; 时,如下图所示。

xk = [1,1,1,1,0,0,0,0]; 时,如下图所示。

xk = [1,1,1,1,0,0,0,0,0,0,0,0]; 时,如下图所示。

可以看出,给序列补零可以得到更多的抽样值,频谱也更接近真实的趋势。

五、离散傅里叶反变换Matlab实现。

function [] = idft()
clear;close all;clc;

%选择其中一行xk
Xm = [4,0,0,0]; % 频域

N = length(Xm);
Wn = zeros(N,N);
WnExpRect = zeros(N,N);
for m=1:N
	for k=1:N
		%m和k作为Matlab数组下标是从1开始(但公式上是从0开始)
		% 但是作为幂要减1
		WnExpRect(m,k) = (m-1)*(k-1); %Wn幂的矩阵
		Wn(m,k) = calW(N)^(-(m-1)*(k-1));
	end
end
WnExpRect
xk = (Wn * Xm')/N % 矩阵相乘得到IDFT结果,时域
subplot(211)
stem(abs(Xm)); 
subplot(212)
stem(xk); % 时频
hold on
plot(xk);

function result = calW(N) %计算Wn
	result = exp(-i * (2*pi/N)); 

从上图可以看出,反变换的结果正好是[1,1,1,1],对应正变换的时域。

六、离散傅里叶变换的性质(只列出一部分)。

6.1. 线性。

6.2. 圆周时域移位。

6.3. 圆周频域移位。

6.4. 复共轭特性。

6.5. 对称性。

6.6. 循环卷积定理。

七、离散傅里叶变换计算卷积。

7.1. 两个序列较长,而长度相当时,用离散傅里叶变换来计算卷积效率较高。

7.2. 两个短序列时,效率较低。

7.3. 一个长序列和一个短序列可以使用分段卷积,有两种方法:重叠相加法、重叠保留法。

7.4. 重叠相加法:把长序列分成若干个短序列,再分别进行离散傅里叶变换,再加起来,其中有重叠的部分长度为短序列长度M-1。

7.5. 重叠保留法:把长序列分成若干个短序列(长度为N),再扩充另一个短序列长度M-1个点,那么若干个短序列的长度为N+M-1。

 再分别计算循环卷积,其中将重叠的部分长度为M-1个点去掉,再把剩下的连起来。

八、混叠现象、泄漏现象、窗函数、栅栏现象。

8.1 混叠现象。

工程中所遇到的信号一般是时间有限且频带无限、时间无限且频带有限的信号。不存在时间有限,而且频带也有限的信号。

在用ADC采样实际的信号时,其序列是有限的(时间有限且频带无限),也就是说在序列前、后均截断了。那么在截断的那里就会出现高频分量(信号产生突变)。

那么这个截断误差就会带来混叠现象。

要克服混叠现象,可以采取抗混叠滤波器和减少采样间隔。

8.2 泄漏现象。

对于时间无限且频带有限的信号,一般采取加窗处理,也就是将时域的信号乘以窗函数,根据卷积定理,时域乘积对应频域卷积。

加窗之后,由于窗函数不能完全包含真实的频谱,频谱向两边扩散了,也就是频谱泄漏。

对于频谱泄漏,可以考虑选择合适的窗函数和宽度来改善。

8.3 窗函数。

在ADC采样完成之后,就是默认的对信号加了矩形窗,这个是无法改变的,但是可以对矩形窗进行加权。

也就是说,只有矩形窗才是真正的加窗,其它窗都是加权窗,在矩形的基础上进行加权(并非加两次窗)。

8.4 栅栏现象。

对于真实的频谱应该是个连续的曲线,但是使用DFT后,得到的频谱却是离散的,也就是说对真实的频谱进行采样。

那么DFT的频谱像是隔着栅栏来观察真实的频谱,这个叫栅栏效应,可以通过补零来改善。

  • 10
    点赞
  • 121
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值