为信号添加谐波

时间:2012-04-08 06:38:39

标签: matlab signal-processing

如何添加输入信号的谐波?

  • 未进行频率估算(提供频率)
  • 进行频率估算

输入:信号的矢量化形式 输出:与输入格式相同

注意:如果您知道答案,可以给我算法或链接,这将有助于我解决这个问题。

3 个答案:

答案 0 :(得分:1)

如果频率已知,则可以通过向信号添加适当频率的正弦波(即,已知频率的两倍)来增加谐波。类似的东西:

result = signal .* sin((0:(1/sample_rate):length_of_signal) * freq));

当频率未知时,您可以使用FFT(链接到文档的@ L7ColWinters)来查找频率。由于您可以将信号从频域转换回时域(ifft用于反向),因此可能更容易进行FFT,添加谐波然后执行逆FFT,或者一旦您知道从第一种情况来看,您可以将正弦波添加到原始输入中。

答案 1 :(得分:1)

  • 假设您的输入是幅度为A且间隔为[0, t0]的时域信号。然后使用

    循环i

    A [i] = A [i] + A0 * sin(2 pi f dt)

其中dt是每个数组元素之间的时差,即dt = N/t0

  • 如果您先进行傅立叶变换,则只需在频率A0对应的位置添加f,然后按@ L7ColWinters链接进行逆傅立叶变换

答案 2 :(得分:1)

如果查看trig identities,您会看到

cos(2x)= 2 *(cos(x))^ 2 -1

由于一次谐波是基频的两倍,因此您可以简单地对输入求平方,根据需要进行缩放并消除DC偏移。频率不需要知道或估计。

请记住,奈奎斯特仍然适用,因此您可能需要低通输入以防止混叠。