首页 > 解决方案 > 如何计算(供以后使用)具有非常高频率的波?

问题描述

我正在运行一个与可见光相关的物理模拟,得到的波函数有一个非常非常高的频率——循环频率大约是1.0e15,空间频率k大约是1.0e7。谢天谢地,我只使用空间频率,但是当我计算它以供以后使用时(使用mathor numpy),我得到类似于拍波的东西,除非我使用N~=k样本点,因为我必须在更大的范围内计算它范围(按 的顺序1.0e-3 - 1.0e-1)。它产生了一个拍波,所以我花了几个小时来确保我实际上没有计算一个。我还必须fft()在生成的 wave 上使用,我担心它不能与错误描述的 wave 一起正常工作。

我尝试过使用不同数量的样本点,但除非它非常高(需要一两分钟来计算),否则只有跳动的突出程度会发生变化。以防万一我误用了 numpy,我尝试了相同的方法,将wave.value计算结果附加math.sin到浮点数组,但结果相同。

import numpy as np
import matplotlib.pyplot as plt

mmScale = 1.0e-3
nmScale = 1.0e-9
c = 3.0e8
N = 1000

class Wave:
    def __init__(self, amplitude, wavelength):
        self.wavelength = wavelength*nmScale
        self.amplitude = amplitude
        self.omega = 2*pi*c/self.wavelength
        self.k = 2*pi/self.wavelength
    def value(self, time, travel):
        return self.amplitude*np.sin(self.omega*time - self.k*travel)

x = np.linspace(50, 250, N)*mmScale
wave = Wave(1, 400)
y = wave.value(0.1, x)

plt.plot(x,y)
plt.show()

上面的代码生成了函数图,您可以输入不同的值N来查看它如何给出不同的波形。

标签: python-3.xnumpymathphysics

解决方案


您的采样空间频率为:

1/Ts = 1 / ((250-50)*mmScale) / N) = 5000 [samples/meter]

你的波的空间频率是:

1/Tw = 1 / wavelength = 1 / (400e-9) = 2500000 [wavelengths/meter]

您未能满足 Nyquist 标准的一个因子(2*2500000 ) / 5000 = 1000。因此,您必须预料到严重的混叠效应。请参阅https://en.wikipedia.org/wiki/Aliasing

没有什么可以做的。但是根据应用程序,有些技巧可能会对您有所帮助。一种是将波表示为围绕载波频率的复包络,即 400e-9。请提供有关您如何处理 wave 的更多详细信息。


推荐阅读