小编Sit*_*ito的帖子

使用 Eigen::FFT 执行 FFT 时的频率

我目前正试图弄清楚如何使用Eigen的 FFT 算法。让我们假设我有一个功能

std::complex<double> f(std::complex<double> const & t){
    return std::sin(t);
}
Run Code Online (Sandbox Code Playgroud)

然后我用这个函数计算

Eigen::VectorXcd time(1000);
Eigen::VectorXcd f_values(1000);
for(int u = 0; u < 1000; ++u){
    time(u) = u* 2. * M_PI / 1000;
    f_values(u) = f(time(u));
}
Run Code Online (Sandbox Code Playgroud)

我现在想计算 的傅立叶变换f_values,所以我做

Eigen::FFT<double> fft;
Eigen::VectorXcd f_freq(1000);
fft.fwd(f_freq, f_values);
Run Code Online (Sandbox Code Playgroud)

现在我想绘制它,但要做到这一点,我需要f_freq评估的频率,但我真的不知道如何获得这些频率。所以我的问题归结为找到Eigen::VectorXcd包含频率来绘制这样的东西 在此处输入图片说明 (我很抱歉使用图片作为描述,但我认为这样更清晰,如果我试图用文字来描述它......amplitude来自情节的应该对应于我f_freq和我寻找的是freqin的值图片……)。

以下是放在单个文件中的上述代码片段:

#include <eigen3/Eigen/Dense>
#include <eigen3/unsupported/Eigen/FFT>
#include <complex>
#include <cmath>

std::complex<double> f(std::complex<double> const & t){
     return std::sin(t);
}

int main(){
    Eigen::VectorXcd …
Run Code Online (Sandbox Code Playgroud)

c++ math fft eigen eigen3

5
推荐指数
1
解决办法
687
查看次数

在 Rust 中读取以 f64 为单位的二进制文件

假设你有一个二进制文件example.bin,并且你想以 为单位读取该文件f64,即前 8 个字节给出一个浮点数,接下来的 8 个字节给出一个数字等。(假设你知道字节序)这在 Rust 中如何完成?

我知道可以用来std::fs::read("example.bin")获取 aVec<u8>数据,但是你必须做很多“体操”才能将 8 个字节始终转换为 a f64,即

fn eight_bytes_to_array(barry: &[u8]) -> &[u8; 8] {
    barry.try_into().expect("slice with incorrect length")
}

let mut file_content = std::fs::read("example.bin").expect("Could not read file!");
let nr = eight_bytes_to_array(&file_content[0..8]);
let nr = f64::from_be_bytes(*nr_dp_per_spectrum);
Run Code Online (Sandbox Code Playgroud)

我看到了这篇文章,但它是从 2015 年开始的,从那时起 Rust 发生了很多变化,所以我想知道现在是否有更好/更快的方法?

file-processing rust

5
推荐指数
1
解决办法
3832
查看次数

标签 统计

c++ ×1

eigen ×1

eigen3 ×1

fft ×1

file-processing ×1

math ×1

rust ×1