|
对armadillo矩阵进行fft与ifft的注意点
//警告:当变换长度是 2 的幂时,变换速度最快
//ifft()变换只能对复矩阵
//如果给定一个矩阵,则对矩阵的每个列向量进行变换
- #include <iostream>
- #include <armadillo>
- #include <vector>
- #include <math.h>
- using namespace std;
- //对armadillo矩阵进行fft与ifft的注意点
- int main(){
- float f0 = 100.0;
- float fs = 1000.0;
- std::cout << "信号频率=" << f0 << ";采样率=" << fs << endl;
- std::cout << "信号周期=" << 1/f0 << ";采样间隔=" << 1/fs << endl;
- std::cout << "一个周期采多少个点=" << fs/f0 << endl;
- int sample_num = 128;
- std::cout << "采样点数确定后的最大时间=" << sample_num*1/fs << endl;
- vector<float> signal_Rx;
- for(int i=0;i<sample_num;i++){
- signal_Rx.emplace_back(cos(2*M_PI*f0 * i / fs));
- }
- arma::fmat A(2, sample_num, arma::fill::zeros); // float实矩阵
- arma::cx_fmat B, C; // complex_float 复矩阵
- // arma::frowvec r=signal_Rx;
- // A.row(0) = r;
- A.row(0) = (arma::frowvec)signal_Rx;
- //A.row(1) = (arma::frowvec)signal_Rx;
- A.print("原始A矩阵:");
- //警告:当变换长度是 2 的幂时,变换速度最快
- //ifft()变换只能对复矩阵
- //如果给定一个矩阵,则对矩阵的每个列向量进行变换
- //arma::fft(A);
- B = arma::fft(A.t());
- B = B.t();
- cout << "B.n_rows行数: " << B.n_rows << ";B.n_cols列数: " << B.n_cols << endl;
- B.print("fft变换后的B矩阵:");
- C = arma::ifft(B.t());
- C = C.t();
- cout << "C.n_rows行数: " << C.n_rows << ";C.n_cols列数: " << C.n_cols << endl;
- C.print("ifft变换后的C矩阵:");
- return 0;
- }
复制代码
|
|