python - 算法 - 返回混叠频率

标签 python numpy audio-aliasing

在 Python 中,我尝试编写一个算法 alias_freq(f_signal,f_sample,n),其行为如下:

def alias_freq(f_signal,f_sample,n):
    f_Nyquist=f_sample/2.0
    if f_signal<=f_Nyquist:
        return n'th frequency higher than f_signal that will alias to f_signal
    else:
        return frequency (lower than f_Nyquist) that f_signal will alias to

以下是我用来测试上述函数的代码(下面的f_signalf_samplen是任意选择的填写代码)

import numpy as np
import matplotlib.pyplot as plt

t=np.linspace(0,2*np.pi,500)

f_signal=10.0
y1=np.sin(f_signal*t)
plt.plot(t,y1)

f_sample=13.0
t_sample=np.linspace(0,int(f_sample)*(2*np.pi/f_sample),f_sample)
y_sample=np.sin(f_signal*t_sample)
plt.scatter(t_sample,y_sample)

n=2
f_alias=alias_freq(f_signal,f_sample,n)
y_alias=np.sin(f_alias*t)
plt.plot(t,y_alias)

plt.xlim(xmin=-.1,xmax=2*np.pi+.1)
plt.show()

我的想法是,如果该函数正常工作,y1y_alias 的绘图将触及 y_sample 中的每个分散点。到目前为止,我完全没有成功地让函数中的 if 语句或 else 语句执行我认为应该执行的操作,这让我相信,要么我对别名的理解没有达到我想要的程度,要么我的测试代码不好。

我的问题是:首先,我使用的测试代码对于我想要做的事情来说是合理的吗?首先,我正在寻找的 alias_freq 函数是什么?

还请注意:如果某个 Python 包已经内置了这样的功能,我很想听听它 - 然而,我这样做的部分原因是为了给自己一个理解现象的工具更喜欢别名,所以我仍然想看看我的函数应该是什么样子。

最佳答案

据我正确理解问题,混叠信号的频率为 abs(sampling_rate * n - f_signal),其中 n 是最接近的整数倍f_signal

因此:

n = round(f_signal / float(f_sample))
f_alias = abs(f_sample * n - f_signal)

这应该适用于低于和高于奈奎斯特的频率。

关于python - 算法 - 返回混叠频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28650469/

相关文章:

使用 boto3 的 Python 脚本停止生成结果

python - Python行检测

audio - 低频声音采样

python - 如何在按下后更改按钮的背景颜色并恢复到之前的颜色

python - 为 Uwsgi 编译插件

python - 从列表中删除符合条件的第一个匹配项

python - 我怎样才能确保首先放置更大的数字?

python - 为什么 numpy 和 scipy 中的矩阵求逆函数对大二次矩阵返回不同的结果?

python - 对时间序列数据应用傅里叶变换并避免混叠