我是靠谱客的博主 魔幻飞鸟,最近开发中收集的这篇文章主要介绍Matlab如何进行利用离散傅里叶逆变换iDFT 从频谱恢复时域信号,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

    • 1. 定义
    • 2. 变换和处理
    • 3. 函数
    • 4. 实例演示
      • 例1:单频正弦信号(整数周期采样)
      • 例2:含有直流分量的单频正弦信号
      • 例3:正弦复合信号
      • 例4:含有随机干扰的正弦信号
      • 例5:实际案例
    • 5. 联系作者

1. 定义

上一篇研究了Matlab如何进行离散傅里叶变换DFT(快速傅里叶变换FFT)进行频谱分析。工程上我们还会遇到这样的问题:获取了信号的频谱,希望从信号的频谱来恢复时域信号。这一篇来研究如何进行利用离散傅里叶逆变换(iDFT)从频谱中恢复时域信号。
离散傅里叶逆变换 (iDFT)的定义为:

x ( n ) = i D F T [ X ( k ) ] = 1 N ∑ k = 0 N − 1 X ( k ) e j 2 π N n k x(n) = {rm{iDFT}}[X(k)] = frac{1}{N}sumlimits_{k = 0}^{N - 1} {X(k){e^{jfrac{{2pi }}{N}nk}}} x(n)=iDFT[X(k)]=N1k=0N1X(k)ejN2πnk, 0 ≤ n ≤ N − 1 0 le n le N-1 0nN1
式中, x ( n ) x(n) x(n)为时域离散采样序列(通常为实数序列), N N N为时域离散采样序列 x ( n ) x(n) x(n)的长度, X ( k ) X(k) X(k)为频域离散采样序列(通常为复数序列)。

也存在快速傅里叶逆变换(iFFT)来实现iDFT的快速算法,其主要作用也是减小计算量、节约计算资源、便于在线计算。

2. 变换和处理

Matlab软件自带ifft函数实现快速傅里叶逆变换算法,与上一篇DFT变换一样,要想从频谱恢复时域信号,也需要解决以下问题(建议与上一篇对应起来看):
在这里插入图片描述

a) 幅值变换:真实频谱幅值乘以 N / 2 N/2 N/2得到频谱序列 X ( k ) X(k) X(k)的幅值 ∣ X ( k ) ∣ |X(k)| X(k)
b) 频谱延拓:真实频谱的频率范围为 0 − f s / 2 0-f_s/2 0fs/2,而参与iDFT变换的频谱序列 X ( k ) X(k) X(k)为两部分共轭复数序列组成,因此需要对物理频谱进行延拓得到 X ( k ) X(k) X(k)。频谱延拓的方案上图所示。
c) 直流信号的处理:直流信号幅值乘以2,再进行幅值变换乘以 N / 2 N/2 N/2,得到频谱序列 X ( k ) X(k) X(k)的直流分量 ∣ X ( 0 ) ∣ |X(0)| X(0)

3. 函数

作者在Matlab软件自带ifft函数的基础上,使用Matlab开发了函数iDFT.m,通过函数来实现上述幅值变换、频谱延拓和直流信号的处理,能够直接从从频谱恢复时域信号,函数简单、易用、通用性好。

function [xn,t] = iDFT(X_m,X_phi,ts,drawflag)
% [xn,t] = iDFT(X_m,X_phi,ts) 离散序列的快速傅里叶逆变换,频域转换为时域信号
% 输入 X_m为幅值向量
%      X_phi为相位向量,单位为°
%      ts为序列的采样时间/s
%      drawflag为绘图标识位,取0时不绘图,其余非0值时绘图,默认为绘图
% 输出  xn为离散序列向量
%       t为与xn对应的时间向量
% 注意计算出来的0频分量在进行ifft计算时,幅值应乘以2
% By ZFS@wust  2020
% 获取更多Matlab/Simulink原创资料和程序,清关注微信公众号:Matlab Fans

4. 实例演示

下面结合实例进行演示和分析。

例1:单频正弦信号(整数周期采样)

%% Eg 1 单频正弦信号
ts = 0.01;
t = 0:ts:1;
A = 1.5;       % 幅值  
f = 2;         % 频率
w = 2*pi*f;    % 角频率
phi = pi/3;    % 初始相位 
x = A*cos(w*t+phi);   % 时域信号
figure
plot(t,x)
xlabel('时间/s')
ylabel('时域信号x(t)')
% DFT变换将时域转换到频域,并绘制频谱图
[f,X_m,X_phi] = DFT(x,ts);
% iDFT逆变换将频域转换到时域,并绘制时域图
[xn,t2] = iDFT(X_m,X_phi,ts);
hold on
plot(t,x,'r--')
legend('恢复的时域信号','原始时域信号')

结果:
在这里插入图片描述
在这里插入图片描述

例2:含有直流分量的单频正弦信号

%% Eg 2 含有直流分量的单频正弦信号
ts = 0.01;
t = 0:ts:1;
A = 1.5;       % 幅值  
f = 5;         % 频率
w = 2*pi*f;    % 角频率
phi = pi/6;    % 初始相位 
x = 0.5 + A*cos(w*t+phi);   % 时域信号,带有直流偏移0.5
figure
plot(t,x)
xlabel('时间/s')
ylabel('时域信号x(t)')
% DFT变换将时域转换到频域,并绘制频谱图
[f,X_m,X_phi] = DFT(x,ts);
% iDFT逆变换将频域转换到时域,并绘制时域图
[xn,t2] = iDFT(X_m,X_phi,ts);
hold on
plot(t,x,'r--')
legend('恢复的时域信号','原始时域信号')

结果:
在这里插入图片描述
在这里插入图片描述

例3:正弦复合信号

%% Eg 3 正弦复合信号
ts = 0.01;
t = 0:ts:2;
A = [1.5 1 0.5 0.2];    % 幅值  
f = [3 6 9 15];         % 频率
w = 2*pi*f;             % 角频率
phi = (1:4)*pi/4;       % 初始相位 
x = -0.5 + A(1)*cos(w(1)*t+phi(1)) + A(2)*cos(w(2)*t+phi(2)) + A(3)*cos(w(3)*t+phi(3)) + A(4)*cos(w(4)*t+phi(4));     % 时域信号
figure
plot(t,x)
xlabel('时间/s')
ylabel('时域信号x(t)')
% DFT变换将时域转换到频域,并绘制频谱图
[f,X_m,X_phi] = DFT(x,ts);
% iDFT逆变换将频域转换到时域,并绘制时域图
[xn,t2] = iDFT(X_m,X_phi,ts);
hold on
plot(t,x,'r--')
legend('恢复的时域信号','原始时域信号')

结果:
在这里插入图片描述
在这里插入图片描述

例4:含有随机干扰的正弦信号

%% Eg 4 含有随机干扰的正弦信号
ts = 0.01;
t = 0:ts:2;
A = [1 0.5];    % 幅值  
f = [3 10];         % 频率
w = 2*pi*f;             % 角频率
phi = (1:2)*pi/3;       % 初始相位 
x =  A(1)*cos(w(1)*t+phi(1)) + A(2)*cos(w(2)*t+phi(2)) + 0.8*(rand(size(t))-0.5);     % 时域信号
figure
plot(t,x)
xlabel('时间/s')
ylabel('时域信号x(t)')
% DFT变换将时域转换到频域,并绘制频谱图
[f,X_m,X_phi] = DFT(x,ts);
% iDFT逆变换将频域转换到时域,并绘制时域图
[xn,t2] = iDFT(X_m,X_phi,ts);
hold on
plot(t,x,'r--')
legend('恢复的时域信号','原始时域信号')

结果:
在这里插入图片描述
在这里插入图片描述

例5:实际案例

%% Eg 5 实际案例
load data
ts = 0.001;
x = Jsd;
t = [0:length(x)-1]*ts;
figure
plot(t,x)
xlabel('时间/s')
ylabel('时域信号x(t)')
% DFT变换将时域转换到频域,并绘制频谱图
[f,X_m,X_phi] = DFT(x,ts);
% iDFT逆变换将频域转换到时域,并绘制时域图
[xn,t2] = iDFT(X_m,X_phi,ts);
hold on
plot(t,x,'r--')
legend('恢复的时域信号','原始时域信号')

结果:
在这里插入图片描述
在这里插入图片描述

上述各例中,通过iDFT恢复的时域信号与原始信号完全重合,说明利用离散傅里叶逆变换(iDFT)可以从频谱恢复时域信号。

5. 联系作者

有Matlab/Simulink方面的技术问题,欢迎发送邮件至944077462@qq.com讨论。
更多Matlab/Simulink原创资料,欢迎关注微信公众号:Matlab Fans

源程序下载:
1. csdn资源: Matlab如何进行离散傅里叶变换DFT(快速傅里叶变换FFT)进行频谱分析
2. 扫码关注微信公众号Matlab Fans,回复BK07获取百度网盘下载链接。

在这里插入图片描述

最后

以上就是魔幻飞鸟为你收集整理的Matlab如何进行利用离散傅里叶逆变换iDFT 从频谱恢复时域信号的全部内容,希望文章能够帮你解决Matlab如何进行利用离散傅里叶逆变换iDFT 从频谱恢复时域信号所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部