东方耀AI技术分享

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 2585|回复: 0
打印 上一主题 下一主题

[C/C++] 对armadillo矩阵进行fft与ifft的注意点

[复制链接]

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14439
QQ
跳转到指定楼层
楼主
发表于 2021-10-8 17:34:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式



对armadillo矩阵进行fft与ifft的注意点


//警告:当变换长度是 2 的幂时,变换速度最快
    //ifft()变换只能对复矩阵
    //如果给定一个矩阵,则对矩阵的每个列向量进行变换





  1. #include <iostream>
  2. #include <armadillo>
  3. #include <vector>
  4. #include <math.h>

  5. using namespace std;

  6. //对armadillo矩阵进行fft与ifft的注意点

  7. int main(){
  8.     float f0 = 100.0;
  9.     float fs = 1000.0;
  10.     std::cout << "信号频率=" << f0 << ";采样率=" << fs << endl;
  11.     std::cout << "信号周期=" << 1/f0 << ";采样间隔=" << 1/fs << endl;
  12.     std::cout << "一个周期采多少个点=" << fs/f0 << endl;
  13.     int sample_num = 128;
  14.     std::cout << "采样点数确定后的最大时间=" << sample_num*1/fs << endl;
  15.     vector<float> signal_Rx;
  16.     for(int i=0;i<sample_num;i++){
  17.         signal_Rx.emplace_back(cos(2*M_PI*f0 * i / fs));
  18.     }

  19.     arma::fmat A(2, sample_num, arma::fill::zeros);   // float实矩阵
  20.     arma::cx_fmat B, C;                               // complex_float 复矩阵
  21.     // arma::frowvec r=signal_Rx;
  22.     // A.row(0) = r;
  23.     A.row(0) = (arma::frowvec)signal_Rx;
  24.     //A.row(1) = (arma::frowvec)signal_Rx;

  25.     A.print("原始A矩阵:");

  26.     //警告:当变换长度是 2 的幂时,变换速度最快
  27.     //ifft()变换只能对复矩阵
  28.     //如果给定一个矩阵,则对矩阵的每个列向量进行变换
  29.     //arma::fft(A);
  30.     B = arma::fft(A.t());
  31.     B = B.t();
  32.     cout << "B.n_rows行数: " << B.n_rows << ";B.n_cols列数: " << B.n_cols << endl;
  33.     B.print("fft变换后的B矩阵:");

  34.     C = arma::ifft(B.t());
  35.     C = C.t();

  36.     cout << "C.n_rows行数: " << C.n_rows << ";C.n_cols列数: " << C.n_cols << endl;
  37.     C.print("ifft变换后的C矩阵:");


  38.     return 0;
  39. }
复制代码


让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|人工智能工程师的摇篮 ( 湘ICP备2020019608号-1 )

GMT+8, 2024-5-19 19:07 , Processed in 0.163975 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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