【问题标题】:discrete Fourier transform in matlab for data?matlab中的离散傅里叶变换数据?
【发布时间】:2012-04-07 19:35:10
【问题描述】:

我有一些时域数据,每个元素之间的时间间隔是 dt,我的数据是从 0 到 N*dt 秒,我想查看我的数据的频谱从 .6e15 Hz 到 1e15 Hz 我必须做什么?

【问题讨论】:

    标签: matlab fft


    【解决方案1】:

    假设你已经及时获得了 x。

    x%is given
    fmin = 1e15;
    fmax = 6*fmin;
    numOfSamples = length(x);
    f = linspace(fmin,fmax,numOfSamples);
    t = 1 : numOfSamples;
    y=fft(x);
    plot(fftshift(y));
    

    【讨论】:

    • X 是固定 w 的 sin 函数,例如 w=2*pi*2e15 我们必须只有峰值和镜像峰值,您的代码我看到大约 10 个峰值。
    • 我在一个点和时域中有电场我想查看我的电场的光谱行为我认为你的代码会帮助我,但我想确保它正常工作,为了测试它我把 sin(2*pi*2e15.*t) 而不是 x 我只想要一个在 sin 频率上有一个峰值的图,你能改变你的代码吗?(只需修复 w 并只显示一个峰值)谢谢很多。
    • @ehsan 希望它现在适合您,如果您自己制作,请上传您的代码。
    • 我在这里上传了一个测试代码:stackoverflow.com/q/9978436/976870它使用离散傅里叶变换
    【解决方案2】:

    这是我需要的代码:

    NT=10000;%size of data that I have
    ddx=2e-9;
    dt=ddx/(3e8);%time separation between each element
    i=sqrt(-1);
    NFREQS=1000;%size of frequency array
    lambdai=150e-9;
    lambdaf=500e-9;
    freqi=3e8/lambdai;%lower limit of frequency
    freqf=3e8/lambdaf;%upper limit of frequency
    freq=zeros(1,NFREQS);
    for j=1:NFREQS
    freq(j)=freqi-j*(freqi-freqf)/NFREQS;%frequency array
    end
    arg=2*pi*freq*dt;
    lambda=linspace(lambdai,lambdaf,NFREQS);
        for n=1:NFREQS
        for j=1:NT
         Exf(n)=Exf(n)+Ex(j)*exp(-i*arg(n)*j);%Ex the data that I have and Exf is fft of it
        end
        end
    
    plot(lambda,real(Epsilon));
    

    此代码计算 Ex 在 150e-9m t0 500e-9m 范围内的傅里叶变换

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多