从MATLAB代码实战看FS、FT、DFS、DTFS、DTFT的区别与应用

news2026/3/19 1:37:39
从MATLAB代码实战看FS、FT、DFS、DTFS、DTFT的区别与应用在信号处理领域傅里叶分析是一把打开频域大门的金钥匙。但对于许多工程师和学生来说各种傅里叶变换的变体——FS傅里叶级数、FT傅里叶变换、DFS离散傅里叶级数、DTFS离散时间傅里叶级数和DTFT离散时间傅里叶变换——常常让人感到困惑。本文将通过MATLAB代码实例直观展示这些变换在实际应用中的差异和适用场景。1. 理论基础与核心概念傅里叶分析的核心思想是将信号分解为不同频率的正弦波组合。不同类型的信号连续/离散、周期/非周期对应不同的傅里叶分析方法信号类型与变换对应关系信号类型连续信号离散信号周期信号FS (傅里叶级数)DFS/DTFS (离散傅里叶级数)非周期信号FT (傅里叶变换)DTFT (离散时间傅里叶变换)表1不同类型信号对应的傅里叶分析方法1.1 连续信号分析对于连续时间信号我们有两种主要分析方法傅里叶级数(FS)适用于周期连续信号% 生成周期为T的方波信号 T 2*pi; % 周期 t linspace(0, 3*T, 1000); % 时间向量 f square(t); % 方波信号傅里叶变换(FT)适用于非周期连续信号% 生成非周期信号高斯脉冲 t linspace(-5, 5, 1000); f exp(-t.^2); % 高斯脉冲提示MATLAB中的fft函数实际上计算的是DFT离散傅里叶变换要分析连续信号需要适当选择采样率。1.2 离散信号分析对于离散时间信号我们也有对应的分析方法离散傅里叶级数(DFS/DTFS)适用于周期离散信号% 生成周期离散信号 N 20; % 周期 n 0:3*N-1; % 离散时间索引 x mod(n, N) N/2; % 周期方波离散时间傅里叶变换(DTFT)适用于非周期离散信号% 生成非周期离散信号 n 0:100; x (0.9).^n; % 指数衰减序列2. MATLAB实现与可视化对比2.1 周期连续信号的FS分析让我们从一个简单的周期信号开始——方波信号% 方波信号的FS分析 T 2; % 周期(秒) f0 1/T; % 基频(Hz) t linspace(0, 3*T, 1000); % 时间向量 square_wave square(2*pi*f0*t); % 生成方波 % 计算FS系数(前20个谐波) N 20; k 1:N; ak (2./(pi*k)) .* sin(pi*k/2) .* (mod(k,2)1); % FS系数 bk zeros(size(k)); % 方波只有奇次谐波 % 重构信号 reconstructed zeros(size(t)); for n 1:length(k) reconstructed reconstructed ak(n)*cos(2*pi*n*f0*t) bk(n)*sin(2*pi*n*f0*t); end % 绘制结果 figure; subplot(2,1,1); plot(t, square_wave); title(原始方波信号); subplot(2,1,2); plot(t, reconstructed); title(FS重构信号);关键观察点FS系数ak表示各频率分量的幅度方波只包含奇次谐波随着谐波数量增加重构信号越来越接近原始信号2.2 非周期连续信号的FT分析考虑一个非周期信号——高斯脉冲的FT分析% 高斯脉冲的FT分析 t linspace(-5, 5, 1000); sigma 0.5; gaussian exp(-t.^2/(2*sigma^2)); % 高斯脉冲 % 计算FT(使用FFT近似) Fs 1000/(t(end)-t(1)); % 采样频率 N length(gaussian); f (-N/2:N/2-1)*(Fs/N); % 频率向量 ft_gaussian fftshift(fft(gaussian))/N; % FFT并归一化 % 理论FT结果 theory_ft sigma*sqrt(2*pi)*exp(-(2*pi*sigma*f).^2/2); % 绘制结果 figure; subplot(2,1,1); plot(t, gaussian); title(高斯脉冲); subplot(2,1,2); plot(f, abs(ft_gaussian), f, theory_ft, --); legend(FFT结果, 理论FT); title(幅度谱);重要发现高斯脉冲的FT仍然是高斯函数FFT可以很好地近似连续FT频域宽度与时域宽度成反比(不确定性原理)2.3 周期离散信号的DFS分析分析一个周期离散信号——周期方波序列% 周期离散信号的DFS分析 N 20; % 周期 n 0:3*N-1; % 3个周期 x mod(n, N) N/2; % 周期方波序列 % 计算DFS系数 k 0:N-1; Xk zeros(size(k)); for kk k Xk(kk1) sum(x(1:N).*exp(-1j*2*pi*kk*(0:N-1)/N)); end % 重构信号 x_recon zeros(size(n)); for nn n x_recon(nn1) (1/N)*sum(Xk.*exp(1j*2*pi*(0:N-1)*nn/N)); end % 绘制结果 figure; subplot(3,1,1); stem(n, x); title(原始周期序列); subplot(3,1,2); stem(k, abs(Xk)); title(DFS幅度谱); subplot(3,1,3); stem(n, real(x_recon)); title(DFS重构信号);关键点DFS频谱也是离散且周期的重构信号与原始信号完全一致(无信息丢失)离散信号的频谱是周期的(2π周期)2.4 非周期离散信号的DTFT分析分析一个非周期离散信号——指数衰减序列% 非周期离散信号的DTFT分析 n 0:100; a 0.9; x a.^n; % 指数衰减序列 % 计算DTFT w linspace(-pi, pi, 1000); % 数字频率 X zeros(size(w)); for k 1:length(w) X(k) sum(x .* exp(-1j*w(k)*n)); end % 理论DTFT结果 theory_X 1./(1 - a*exp(-1j*w)); % 绘制结果 figure; subplot(2,1,1); stem(n, x); title(指数衰减序列); subplot(2,1,2); plot(w, abs(X), w, abs(theory_X), --); legend(数值计算, 理论结果); title(DTFT幅度谱);重要特性DTFT频谱是连续的且2π周期的对于这个简单序列DTFT有解析解数值计算结果与理论解完全吻合3. 工程应用场景与选择指南不同的傅里叶分析方法适用于不同的工程场景。下面通过具体案例说明如何选择适当的分析方法。3.1 音频信号处理音频信号通常是连续时间信号但在数字系统中我们处理的是其采样后的离散版本。典型处理流程模拟信号通过抗混叠滤波器ADC采样得到离散信号使用DFT/FFT进行频谱分析数字信号处理DAC重建模拟信号% 音频信号频谱分析示例 [audio, Fs] audioread(sample.wav); % 读取音频文件 N length(audio); f (0:N-1)*(Fs/N); % 频率轴 % 计算频谱 spectrum abs(fft(audio)); % 绘制频谱 figure; plot(f(1:N/2), spectrum(1:N/2)); xlabel(频率(Hz)); ylabel(幅度); title(音频信号频谱);注意实际音频处理中通常使用短时傅里叶变换(STFT)来分析时变频谱特性。3.2 通信系统中的调制分析在通信系统中FS和FT常用于分析调制信号的频谱特性。AM调制信号分析% AM调制信号分析 fc 1000; % 载波频率(Hz) fm 100; % 调制频率(Hz) Fs 10000; % 采样率 t 0:1/Fs:1; % 1秒时间 % 生成AM信号 m 0.5; % 调制深度 carrier cos(2*pi*fc*t); message cos(2*pi*fm*t); AM (1 m*message).*carrier; % 计算频谱 N length(AM); f (-N/2:N/2-1)*(Fs/N); AM_spectrum abs(fftshift(fft(AM)))/N; % 绘制结果 figure; subplot(2,1,1); plot(t, AM); title(AM调制信号); subplot(2,1,2); plot(f, AM_spectrum); xlim([-1500 1500]); title(AM信号频谱);频谱特征载波频率fc处的峰值边带(fc±fm)处的峰值频谱对称性3.3 数字滤波器设计DTFT在数字滤波器设计和分析中起着核心作用。FIR滤波器频率响应分析% FIR滤波器设计与频率响应分析 N 50; % 滤波器阶数 fc 0.2; % 截止频率(归一化) b fir1(N, fc); % 设计FIR滤波器 % 计算频率响应 [w, H] freqz(b, 1, 1024); % 绘制结果 figure; subplot(2,1,1); stem(b); title(滤波器系数); subplot(2,1,2); plot(w/pi, 20*log10(abs(H))); xlabel(归一化频率(\pi rad/sample)); ylabel(幅度(dB)); title(频率响应);关键概念频率响应就是滤波器冲激响应的DTFT归一化频率(1对应Nyquist频率)幅度响应和相位响应4. 常见问题与实用技巧在实际应用中工程师经常会遇到一些典型问题和挑战。本节提供一些实用解决方案。4.1 频谱泄漏与窗函数当分析有限长度信号时频谱泄漏是一个常见问题。使用适当的窗函数可以减少泄漏。% 频谱泄漏与窗函数比较 N 100; n 0:N-1; f0 0.3; % 非整数倍周期 x cos(2*pi*f0*n); % 不加窗和加汉宁窗的频谱比较 X_nowin abs(fft(x)); win hann(N); X_win abs(fft(x.*win)); % 绘制结果 figure; subplot(2,1,1); stem(n, x); title(原始信号); subplot(2,1,2); plot(0:N-1, 20*log10(X_nowin), b, ... 0:N-1, 20*log10(X_win), r); legend(无窗, 汉宁窗); title(频谱对比);窗函数选择指南窗函数主瓣宽度旁瓣衰减适用场景矩形窗窄差(-13dB)瞬态信号精确频率测量汉宁窗中等好(-31dB)一般频谱分析汉明窗中等较好(-42dB)音频处理布莱克曼窗宽很好(-58dB)要求高动态范围表2常用窗函数特性比较4.2 频率分辨率与补零频率分辨率取决于信号实际长度补零可以提高频谱显示的平滑度但不增加实际分辨率。% 频率分辨率与补零演示 N 32; % 实际数据长度 n 0:N-1; x cos(2*pi*0.2*n) 0.5*cos(2*pi*0.3*n); % 不同补零长度的FFT X1 abs(fft(x)); X2 abs(fft(x, 64)); X3 abs(fft(x, 128)); % 绘制结果 figure; subplot(3,1,1); stem(0:N-1, X1); title(无补零); subplot(3,1,2); stem(0:63, X2); title(补零到64点); subplot(3,1,3); stem(0:127, X3); title(补零到128点);重要结论频率分辨率ΔfFs/N补零不能提高Δf补零使频谱显示更平滑4.3 实时频谱分析实现在许多应用中需要实时计算和显示信号频谱。下面是一个简单的实时频谱分析框架。% 简易实时频谱分析框架 Fs 44100; % 采样率 frameSize 1024; % 帧大小 spectrumLength frameSize/2; % 初始化图形 figure; h plot(zeros(1, spectrumLength)); ylim([0 100]); xlabel(频率(bin)); ylabel(幅度); title(实时频谱分析); % 模拟实时处理 while ishandle(h) % 模拟获取一帧音频数据(实际应用中替换为真实音频输入) frame randn(1, frameSize); % 使用噪声作为示例 % 加窗并计算FFT win hann(frameSize); frame_win frame .* win; spectrum abs(fft(frame_win)); % 更新显示 set(h, YData, 20*log10(spectrum(1:spectrumLength))); drawnow; end优化建议使用重叠-保留法减少帧间突变采用移动平均平滑频谱显示对于嵌入式系统优化FFT计算效率5. 高级应用与扩展5.1 时频分析短时傅里叶变换对于非平稳信号单纯的傅里叶分析不足以描述其频率特性随时间的变化。短时傅里叶变换(STFT)提供了时频联合分析的能力。% STFT示例啁啾信号分析 Fs 1000; t 0:1/Fs:1; f0 50; f1 200; x chirp(t, f0, 1, f1); % 线性啁啾信号 % 计算STFT window hann(128); noverlap 120; nfft 256; [S, f, t_stft] spectrogram(x, window, noverlap, nfft, Fs); % 绘制时频谱 figure; imagesc(t_stft, f, 20*log10(abs(S))); axis xy; colorbar; xlabel(时间(s)); ylabel(频率(Hz)); title(啁啾信号的STFT);STFT参数选择窗长度决定时间/频率分辨率折衷重叠率通常50-75%减少帧间突变FFT点数通常≥窗长度可补零5.2 多速率信号处理在多速率系统中不同采样率转换时需要特别注意频域特性的变化。% 采样率转换与频谱变化 Fs_orig 1000; % 原始采样率 t_orig 0:1/Fs_orig:1; x_orig sin(2*pi*100*t_orig) 0.5*sin(2*pi*300*t_orig); % 降采样 M 2; % 降采样因子 Fs_new Fs_orig/M; x_down x_orig(1:M:end); % 绘制频谱比较 figure; subplot(2,1,1); plot((0:length(x_orig)-1)/length(x_orig)*Fs_orig, abs(fft(x_orig))); title(原始信号频谱); xlim([0 Fs_orig/2]); subplot(2,1,2); plot((0:length(x_down)-1)/length(x_down)*Fs_new, abs(fft(x_down))); title(降采样后频谱); xlim([0 Fs_new/2]);抗混叠处理降采样前必须进行低通滤波截止频率≤新Nyquist频率MATLAB中可用decimate函数自动处理5.3 倒谱分析倒谱分析在语音处理和故障诊断中有广泛应用可以分离激励源和系统响应。% 倒谱分析示例 Fs 8000; [y, Fs] audioread(speech.wav); % 读取语音样本 % 计算实倒谱 cepstrum ifft(log(abs(fft(y)))); % 绘制结果 figure; subplot(2,1,1); plot(y); title(语音信号); subplot(2,1,2); plot((0:length(cepstrum)-1)/Fs, abs(cepstrum)); xlabel(倒频率(s)); title(倒谱); xlim([0 0.02]); % 显示低倒频率部分倒谱应用基音周期检测声道响应分析机械故障特征提取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2424781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…