硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2694|回复: 1
收起左侧

[DSP] matlab实现FFT正变换和逆变换, matlab的逆变换效果真是完美

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106978
QQ
发表于 2021-5-18 09:36:19 | 显示全部楼层 |阅读模式


代码:
  1. Fs = 1024;              % 采样率
  2. N  = 1024; % 采样点数
  3. n  = 0:N-1;           % 采样序列
  4. t  = 0:1/Fs:1-1/Fs;     % 时间序列
  5. f = n * Fs / N;          %真实的频率

  6. x = 1.5*sin(2*pi*20*t+pi/3) ;  %原始信号
  7. y = fft(x, N);    %对原始信号做FFT变换
  8. z = conj(y);     %对转换结果取共轭

  9. subplot(2,1,2);
  10. z = fft(z, N);     %再次做FFT
  11. k = conj(z);      %对转换结果去共轭
  12. plot(f,  real(k));  %绘制转换后的波形
  13. title('FFT逆变换后的波形');

  14. subplot(2,1,1);
  15. plot(f,  x);       %绘制原始波形
  16. title('原始波形');
复制代码


3.png





回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106978
QQ
 楼主| 发表于 2021-5-18 11:49:37 | 显示全部楼层
傅里叶反变化:调用FFT的例子计算IFFT
将FFT的结果取共轭,然后再次调用FFT,将结果取共轭。将所得结果除以N就是所要
void conj(complex *xx)                           //将数据取共轭
{
        int i;
        for(i=0;i<size_x;i++)
        xx[i].img=-(xx[i].img);   
}   
void ifft(complex *xx)
{
        int i;   
        conj(xx);                                          //FFT变换后的X(k)取共轭
        fft(xx);                                          //FFT变换
        conj(xx);                                          //将变换后的结果再次取共轭
        for(i=0;i<size_x;i++)                  //将所得到的结果除以N 就是所要的原始数据
    {
          xx[i].real=xx[i].real/size_x;
          xx[i].img=xx[i].img/size_x;
        }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-12 20:56 , Processed in 0.173128 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表