数字信号处理v3 第四章 快速傅里叶变换(2)
感谢快速傅里叶变换的出现,使得我们算法人员能够提高信号处理的效率。虽然芯片的运算速度一直在提升,但是一些新的理论的发现会加速相关技术的发展。FFT的出现就让人感受到算法的强大作用,虽然和DFT有着同样的结果,但是却更加简单、运算量更小。在讲课之前,我们可以先回顾一下DFT的几个主要特性。在DFT讲解的过程中,本人出了一道仿真题目让同学们课后写程序。两个正弦信号(频率分别为100Hz和101Hz,时间长度为1秒)叠加后的双音信号(信号发生器可以产生双音信号)经过FFT后,观察信号的频域情况?将信号的时间长度减为0.5秒,频域情况又会是如何呢?结果只有几位同学做了仿真,没有给出什么实质性的结论。他们压根没有看或者没看懂DFT章节的内容。没有复习,怎么能理解DFT。在课堂上提问,频率分辨率和信号的什么参数有关?台下一片寂静。出这样实践性较强的题目不是为了为难大家,而是为了让大家能够通过仿真来了解DFT。只有清楚的知道DFT的参数特性,才能灵活的使用。灵活二字看起来很简单,但要从初学者到这个境界,至少需要五年以上,因为这个过程需要很多理论知识的承载,多遍看书和思考总结的结合。2021年9月,再次修订文章!2022年,准备回归课堂,也不知教学效果会如何?忐忑!每个人都希望改变,但改变需要实际行动!我是时刻在努力,但很多人在沉睡或者装睡,那么我就只能和志同道合的人一起前行!2022年6月,得知下半年没有机会讲本课程,赶紧更新发出v2版本!2024年9月,本人花费一个多月时间更新完成第四章内容,也就三篇文章,每一篇文章都接近五千字,如同一篇小论文,请读者保持耐心看完。抽样频率如何选择?频率分辨率如何计算?这两个概念是应用FFT的关键知识点!在数字信号处理中,抽样频率(Sampling Rate)和频率分辨率(Frequency Resolution)**是两个非常重要的概念,分别影响信号捕捉的精度和频率域分析的能力。它们的选择和计算有密切的关系,并且在仿真程序中通过不同的参数设置来体现。
1. 抽样频率的选择
抽样频率是指每秒钟从连续信号中抽取样本的次数,通常以赫兹(Hz)为单位。它的选择需要遵循奈奎斯特采样定理,即:抽样频率应至少为信号中最高频率的两倍,才能避免混叠现象。这里先不讨论带通采样定理,该定理的应用和奈奎斯特采样定理有些差异。如果信号中最高频率成分为 fmax,则根据奈奎斯特采样定理抽样频率 fs 应满足:fs≥2fmax。在仿真中,设定合适的抽样频率是为了确保捕捉到信号的完整频谱。例如,在MATLAB中,可以通过设置 fs
参数来控制采样率:fs = 1000; % 1000Hz 的采样频率 signal = sin(2*pi*50*t); % 频率为50Hz的正弦波通过调节信号的采样点数或采样时长,可以影响频率分辨率。例如,使用快速傅里叶变换分析信号的频谱时,频率分辨率由采样频率和采样点数决定:N = length(signal); % 信号的采样点数freq = (0:N-1)*(fs/N); % 频率轴fft_signal = fft(signal); % 对信号进行FFT变换plot(freq, abs(fft_signal)); % 绘制频谱课本涉及了频谱泄露的概念!非常实用的概念!因为信号有截断,那么必然会造成频谱泄露!为什么会有截断?频率泄露(Spectral Leakage) 是傅里叶变换中的一种常见现象,发生在信号长度不匹配其周期,导致其频谱能量泄露到相邻频率。它通常表现为频谱峰值变宽,且未在特定频率上集中。要想理解这些概念,光看书很难做到!来个仿真,那么很多概念会在写仿真代码的时候变的清晰!一起来看仿真代码!N = length(signal); % 采样点数fft_signal = fft(signal); % FFTfft_magnitude = abs(fft_signal/N); % FFT幅值归一化fft_signal1 = fft(signal1); % FFTfft_magnitude1 = abs(fft_signal1/N); % FFT幅值归一化freq = (0:N-1)*(fs/N); % 频率轴half_N = floor(N/2); % 取一半频率(对称)