首页 > 其他分享 >傅里叶?傅里叶!傅里。。。

傅里叶?傅里叶!傅里。。。

时间:2024-06-03 15:02:19浏览次数:8  
标签:傅里 return int data fft ++ vector 傅里叶

球球来个人一次性把NVH中怎么用讲明白啊

#include <bits/stdc++.h> 
using namespace std;

const double PI = 3.14159265358979323846;

void fft(vector<complex<double>>& a, bool invert) { // 定义 FFT 函数
    int n = a.size();
    if (n == 1) return;

    vector<complex<double>> a0(n / 2), a1(n / 2);
    for (int i = 0, j = 0; i < n; i += 2, j++) {
        a0[j] = a[i];
        a1[j] = a[i + 1];
    }
    fft(a0, invert);
    fft(a1, invert);

    double angle = 2 * PI / n * (invert ? -1 : 1);
    complex<double> w(1), wn(cos(angle), sin(angle));
    for (int i = 0; i < n / 2; i++) {
        a[i] = a0[i] + w * a1[i];
        a[i + n / 2] = a0[i] - w * a1[i];
        if (invert) {
            a[i] /= 2;
            a[i + n / 2] /= 2;
        }
        w *= wn;
    }
}

vector<complex<double>> fft(const vector<complex<double>>& a) { // 定义快速傅里叶变换函数
    vector<complex<double>> A = a;
    fft(A, false);
    return A;
}

vector<complex<double>> ifft(const vector<complex<double>>& A) { // 定义逆快速傅里叶变换函数
    vector<complex<double>> a = A;
    fft(a, true);
    return a;
}

vector<double> generateData(int n) { // 生成原始数据
    vector<double> data(n);
    for (int i = 0; i < n; i++) {
        data[i] = sin(2 * PI * i / n) + 0.5 * sin(4 * PI * i / n);
    }
    return data;
}

vector<double> getMagnitudeSpectrum(const vector<complex<double>>& fftResult) { // 获取频谱幅度
    vector<double> magSpectrum(fftResult.size());
    for (int i = 0; i < fftResult.size(); i++) {
        magSpectrum[i] = abs(fftResult[i]);
    }
    return magSpectrum;
}

int main() { // 主函数
    int n = 1024; // 数据点数
    vector<double> data = generateData(n); // 生成原始数据

    vector<complex<double>> a(n);
    for (int i = 0; i < n; i++) {
        a[i] = complex<double>(data[i], 0);
    }

    vector<complex<double>> A = fft(a); // 进行快速傅里叶变换
    vector<double> magSpectrum = getMagnitudeSpectrum(A); // 获取频谱幅度

    for (int i = 0; i < magSpectrum.size(); i++) {
        cout << magSpectrum[i] << " "; // 输出频谱幅度
    }
    cout << endl;

    return 0;
}

测试生成:

标签:傅里,return,int,data,fft,++,vector,傅里叶
From: https://blog.csdn.net/weixin_45582252/article/details/139414998

相关文章

  • 《旋转的快速傅里叶变换》——2024.5.31
    $$\aleph$$——发疯记录(无题,不知道起什么好,用前几天看书看到的符号阿列夫表示了)我很久没发过阶段性总结类的博文了,对比去年来是少之又少。一是因为我觉得现在的日子比去年枯燥多了;二是其实我平时会写记录,但没有总的;三是上了高中以后几次语文考试我的作文成绩都很差,老师说我写的......
  • §1. 傅里叶级数
    掌握函数正交的概念,和三角函数系的正交性。能够求出以为周期的函数的傅里叶展开式,并掌握其收敛性。重点习题:例1、例3  让·巴普蒂斯·约瑟夫·傅里叶(BaronJeanBaptisteJosephFourier,1768年3月21日-1830年5月16日),男爵,法国数学家、物理学家。傅里叶生于法国中部欧塞尔(Au......
  • 周期函数的傅里叶级数
    1.三角函数基本性质本文主要用于复习一下傅里叶级数、傅里叶变换的基础,并引出后续的DCT变换,根据DCT变换特性,引入各类量化器基本定理三角函数的正交性:频率不同的三角函数乘积在一个周期内的积分是0,即:\[\int_{-\pi}^{\pi}sin(mx\pm\frac{\pi}{2})cos(nx\pm\frac{\pi}{2})dx......
  • 复数域傅里叶级数
    复数域傅里叶级数由欧拉公式:\[e^{i\theta}=cos(\theta)+isin(\theta)\]那么正余弦函数可以表示为:\[cos(n\omegat)=\frac{e^{in\omegat}+e^{-in\omegat}}{2}\\sin(n\omegat)=\frac{e^{in\omegat}-e^{-in\omegat}}{2i}\]将上式代入傅里叶级数可得:\[f(t......
  • 非周期信号的傅里叶变换
    时间连续非周期信号我们前面讨论的都是周期信号:\[f(t)=f(t+T)\]其傅里叶级数的基频率\(\omega_0=2\pif=\frac{2\pi}{T}\),由信号的周期T决定。假设其傅里叶级数展开是频率\(\omega\)的函数,那么可见其展开式只有\(\omega=n\omega_0\)时有分布,即其频域(函数)是离散的傅里......
  • 离散傅里叶变换
    离散时间傅里叶变换(DTFT)设离散序列x(n)的采样周期是\(T_s\),那么\(x(n)\)可表示为\(x(nTs)\delta(t-nTs)\),整个信号可看做采样而得的\(x_s(t)\);求这个东西的傅里叶变换就是:\[\mathcal{F}[x_s(t)]=\int\sumx(nT_s)\delta(t-nTs)exp(-j\Omegat)dt=\\\sum[x(nT_s)\in......
  • 【信号与系统 - 5】傅里叶变换性质2
    这一篇涉及剩余的几个性质⑤对称性(互易特性)⑥时/频域卷积⑦时域微/积分特性⑧频域微/积分特性1对称性(互易特性)总的来说,有:若f(t......
  • 嵌入式算法开发系列之离散傅里叶变换算法
    嵌入式算法开发系列之离散傅里叶变换算法文章目录嵌入式算法开发系列之离散傅里叶变换算法前言一、离散傅里叶变换原理二、算法应用三、C语言实现示例总结前言在嵌入式系统中,离散傅里叶变换(DiscreteFourierTransform,DFT)是一种常见且重要的信号处理技术,用于将时......
  • FFTW 最快的FFT 快速傅里叶算法实现
    FFTW isaCsubroutinelibraryforcomputingthediscreteFouriertransform(DFT)inoneormoredimensions,ofarbitraryinputsize,andofbothrealandcomplexdata(aswellasofeven/odddata,i.e.thediscretecosine/sinetransformsorDCT/DST).We......
  • 基于傅里叶描述子和HSV颜色特征的KNN水果类型识别,Matlab实现
           博主简介:专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188)       个人主页:Matlab_ImagePro-CSDN博客       原则:代码均由本人编写完成,非中介,提供有偿Matlab算法代码编程服务,不从事不违反涉及学术原则......