
前面介绍过一期在STM32中进行傅里叶变换的教程,我们成功的对一段信号进行了傅里叶变换,获得其频率谱。![]() 同样的,我们也同样介绍了双边频谱:FFT的结果是一个双边频谱,他不仅仅包含了实数的频谱也包含了负频率的频谱。 我们的采样长度为FFT_Lenth,同样的傅里叶变换的长度也是FFT_Lenth,而由于双边频谱的存在,我们的FFT结果数组长度是2*FFT_Lenth,并且通常直流信号会被统计两次。9 q1 i& V$ T( g! o. M 事实上对于我们的时域信号而言,我们采集到的数据仅仅只是实部信号(虚部信号之所以叫做虚部信号也正是因为在复平面上)。6 Y" I/ @; c4 l, D9 J6 w ![]() 在大名鼎鼎的火柴人数学中也体现了这一点。( D6 W. f' v% E" G5 K7 I ![]() 而真正的信号应该是一个在复平面上的合信号,但是对于我们而言虚数轴上并没有什么意义。 因此我们在计算FFT的时候也会主动的不向原始信号虚数轴上填充数据。9 N; r. K9 g" o$ I* c2 p0 V + ^" J* B$ `- Y# `
但是,即便是我们主动的忽略了时域信号中的虚部,但是FFT的结果中依旧包含了负频率的双边频谱 & v9 a+ g& n$ ?& P# a1 b" z ![]() 因此,当我们利用得到频谱的时候,通常情况下只考虑他的单边频谱,而负频率通常是不考虑的。 / r5 t- D" ^6 D* S 好了,说了那么多我们还是聊聊我们接下去要干什么,FFT在STM32中的应用有许多文章都在对其进行介绍,但是几乎没有文章有介绍IFFT也就是傅里叶反变换。5 n2 B: X k9 e- I5 N 也对,通常我们知道的时域信号,我们通过傅里叶变换之后将其转换为频域信号,但是很少有知道频域的情况下对其进行傅里叶反变换,因为首先是应用场合比较少,其次是好像没什么必要。 6 x$ E* t" D; U0 A$ G7 x 但是如果我们可以实现傅里叶反变换,那能不能通过对其频率信息的修改,即修改频域的值,实现一种滤波效果。/ E- h; T" p5 m! \& R* H; i - k2 t) o1 R& m }1 o. N+ b 假如我们的信号采样率为10KHZ即10240,而我们的FFT长度是1024,那么我们的输出数组结果所对应的频率差,即相邻两个数据对应的频率差为10240/1024 = 10HZ3 ]! M8 ?! Z7 f & ]4 C. N0 c9 ]# C+ }) H# @ ![]() $ e1 N" B" F" N F! ] 那么例如我们将FFT的结果中前2*X项赋值为0(因为输出的结果中包含了一个实部数据和一个虚部数据)并且FFT_Lenth~FFT_Lenth*2的值均为负频率。9 F5 \6 z% g& F( n+ y 这样子我们就可以实现一个X*10(频率差)的一个高通滤波器(低频段被删除了),之后我们通过傅里叶反变换实现还原原始信号。3 g+ O. |# }( r 这里需要注意的是,DSP库中没有给出IFFT的算法,因此我们选用最常见到的累加法求其IFFT的结果。. I% i& V& I+ n, h2 }* ~: E
这里不具体介绍原理,总之我们看看效果。 ![]() , E( L$ Z3 N7 E8 H- I& T$ G/ h" T 将信号采集之后经过FFT变换之后再通过IFFT反变换为时域信号。$ \* K. K, _; X # e5 G/ F B1 b R# K) E" E 这里我们采集了3KHZ的信号并进行了还原,可以看到并没有什么失真。( \- w/ o& k( y ![]() 三角波的还原,可以看到似乎叠加了一个什么信号,但是不是很明显。 ![]() 调制信号的还原,可以看到信号还原度还是非常高的。 ![]() ) I V6 S: A6 J3 _ 两个正弦波,100HZ+500HZ的累加信号,可以看到其还原度也是非常高的。 在这里我们应用一下我们之前的方法,将某个频段的信号去除。, b4 s9 t4 n8 F + b) ?7 H+ g6 z* M; `0 K) ~3 K ![]() 0 a+ i+ e: ^) W- g0 w# D8 Q 可以看到,我们非常轻松的从500HZ的信号中提取到了100HZ的信号。 ![]() 8 d+ g1 |! M6 e 方波中提取其基波频率。 ! y( d- b! U& S- b" \ ![]() 以及还有方波信号的 还原。4 s/ ]) i$ X' D" b4 D/ u) W+ O : q: [) X# u( N R1 X- K 并且这个方法 的滤波精度相当之高。 ![]() % b1 w2 D2 P# r K6 O o 从一个900HZ叠加1000HZ的信号中将1000HZ的分量去掉。1 C0 A7 B/ G( @ ) A4 L7 G* W: y# I 转载自:电路小白 如有侵权请联系删除4 Z# _0 a# q5 R& F : k( V6 E. ?! F: C, V' M |
实战经验 | Keil工程使用NEAI库的异常问题
STM32 ISP IQTune:真正零门槛的免费ISP调整软件
【经验分享】STM32 新建基于STM32F40x 固件库的MDK5 工程
意法半导体MCU双供应链策略,打消中国客户后顾之忧
【经验分享】基于STM32使用HAL库实现USB组合设备CDC+MSC
2024意法半导体工业峰会:赋能智能电源和智能工业,构筑可持续未来
ST推出灵活、面向未来的智能电表通信解决方案,助力能源转型
意法半导体 x Qu-Bit Electronix:推动新一轮的数字声音合成革命
从STM32 MPU产品看嵌入式系统中微处理器的新变化
【Hot!】STM32全系列开发板都支持Arduino开发,你知道吗?