以julia对高于奈奎斯特频率的信号进行采样



我正试图构建一个包含频率为10 Hz和1 Hz的信号,振幅分别为10和1,并通过在Julia 中高于奈奎斯特频率的采样来模拟该信号

这是我的代码

using Plots
T = 10
delta = 0.01
ts = 0:delta:T
omega =0.5*pi/delta
f = sin.(omega*ts)+10*sin.(10*omega*ts)
plot(f)

但是我得到的图没有接近实际输出的地方,请帮我找到我的错误

正如DNF所指出的,你需要了解奈奎斯特定理中讨论的正弦波的参数是什么。要做到这一点,你应该了解如何绘制正弦波,这样你就可以在图上看到正弦波。这通常意味着你的屏幕上不会有数百或数千个循环被塞进几厘米。因此,您应该回到您的第一个正弦曲线图,研究频率、持续时间、振幅和采样率的变化如何影响曲线图的外观。你的正弦曲线图和你的参数有意义吗?

考虑(sinpi(x)只是sin(pi * x)(:

function sinewave(frequency, duration, amplitude, samplerate)
x_vector = collect(0 : 1 / samplerate : duration * samplerate)
y_vector = map(sinpi, 2 * frequency .* x_vector ./ samplerate)
return x_vector, y_vector .* amplitude
end

如果我们选择10赫兹的频率和10秒的持续时间,我们的图表顶部将有100个峰值。这对我来说太多了,至少在屏幕上看不到曲线。所以选择3秒。

奈奎斯特说,最小采样率至少需要是我们想要检测的最高频率的两倍。否则,我们可能会错过样本之间的循环。

nyquist_rate(freqs) = maximum(freqs) * 2
myrates = [1.0, 10.0]
fs = nyquist_rate(myrates) # 20
x1, y1 = sinewave(1.0, 3.0, 1.0, fs)
x10, y10 = sinewave(10.0, 3.0, 10.0, fs)
plot(x1 .+ x10, y1 .+ y10)

现在你应该可以看到情节了。

最新更新