【发布时间】:2012-04-08 06:38:39
【问题描述】:
如何添加输入信号的谐波?
- 不进行频率估计(提供频率)
- 通过频率估计
输入:信号的矢量化形式 输出:与输入相同的格式
注意:如果你知道答案,你能给我算法或链接,这将帮助我解决这个问题。
【问题讨论】:
-
这不是关于编程的问题。更像是信号理论。
-
候选人搬到dsp.stackexchange.com ?
如何添加输入信号的谐波?
输入:信号的矢量化形式 输出:与输入相同的格式
注意:如果你知道答案,你能给我算法或链接,这将帮助我解决这个问题。
【问题讨论】:
如果频率已知,那么您大概可以通过在信号中添加适当频率(即已知频率的两倍)的正弦波来添加谐波。比如:
result = signal .* sin((0:(1/sample_rate):length_of_signal) * freq));
当频率未知时,您可以使用 FFT(链接到文档的@L7ColWinters)来查找频率。由于您可以将信号从频域转换回时域(ifft 为逆),因此执行 FFT、添加谐波然后执行逆 FFT 可能更容易,或者一旦您知道频率FFT,您可以像第一种情况一样将正弦波添加到原始输入中。
【讨论】:
假设您的输入是幅度数组A 间隔[0, t0] 的时域信号。然后用
i
A[i] = A[i] + A0 * sin (2 pi f dt)
其中 dt 是每个数组元素之间的时间差,即dt = N/t0。
f对应的位置加上A0,然后做傅里叶逆变换,下面链接@L7ColWinters【讨论】:
如果你查看trig identities,你会看到
cos(2x) = 2 * (cos(x))^2 -1
由于一次谐波是基频的两倍,您可以简单地对输入进行平方,根据需要进行缩放并消除直流偏移。频率不需要知道或估计。
请记住,奈奎斯特仍然适用,因此您可能需要低通输入以防止混叠。
【讨论】: