我有兴趣创建一系列奇数谐波,没有基频,用于音频。
的正弦波,输出是、、等 - 但没有原始的。
由于(在真实的音频系统中)是未知的并且输入是多音的,因此仅将过滤掉不是一种选择。
、、等的输出替换
编辑:已删除帖子中的其他信息
示例:让我们假设基频是 100 到 4000 Hz 之间的任何可能值。更重要的是,如果输入是多音的(就像大多数音乐一样......)。50 和 425 Hz 输入同时输入??
我正在寻找一个数学函数,它可以在多音输入中重新创建任何基本的奇次谐波......
我有兴趣创建一系列奇数谐波,没有基频,用于音频。
的正弦波,输出是、、等 - 但没有原始的。
由于(在真实的音频系统中)是未知的并且输入是多音的,因此仅将过滤掉不是一种选择。
、、等的输出替换
编辑:已删除帖子中的其他信息
示例:让我们假设基频是 100 到 4000 Hz 之间的任何可能值。更重要的是,如果输入是多音的(就像大多数音乐一样......)。50 和 425 Hz 输入同时输入??
我正在寻找一个数学函数,它可以在多音输入中重新创建任何基本的奇次谐波......
大概这是一个采样系统,所以您可以根据您的奈奎斯特频率选择 N?
系数有一种模式可以抵消基本面,但我不知道它是什么。:)
我正在寻找一个数学函数,它可以在多音输入中重新创建任何基本的奇次谐波......
(我强调)
你所要求的是不可能的。如果您要求音乐中出现多个音调和复杂音调,那么您的问题会导致冲突。复杂的音调伴随着泛音。即使您有一个向每个正弦分量添加奇次谐波的过程,基频的偶次泛音也会产生偶次谐波。那是因为奇数乘以偶数又是偶数。
因此,为了避免这种情况,您必须首先识别复杂音调的基频,从而直接导致复音音高检测问题,该问题大部分仍未解决。
也许你应该解释你真正想要完成的事情,比如你想到的应用程序是什么。有了这些信息,我们很可能可以提出一组可以实际实施的宽松要求。
(请注意,这个答案是在问题被编辑之前写的,其方式清楚地表明输入不是正弦曲线,并且过滤掉基频也是没有选择的。无论如何,暂时我会保持原样.)
函数应该是这样的:
SR=sampling rate
T=duration in second of the output
t=0:(1/SR):T
x=your sin wave input
X=fft(x)
freq=index of max(mod(X)) from 0 to SR/2 (in [Hz])
ai=[1 1 0.5 ... ] %harmonics amplitude
y=zeros(length(t))
for i=1:n %n harmonics, n=floor(SR/2/(freq*2))-1 if you want all the harmonics
y=y+ai(i)*sin(2*pi*(2*i+1)*freq*t)
end
编辑:
如果x是罪过而你不想使用FFT你可以通过freq这种方式找到相当好的:
sgn=sign(x);
i=1;
periods=0;
Psmp=0;
while i<length(t)
if (sgn(i)~=sgn(i+1) && sgn(i+1)~=0) || sgn(i)==0
for j=(i+1):length(t)-1
if (sgn(j)~=sgn(j+1) && sgn(j+1)~=0) || sgn(j)==0
Psmp=Psmp+(j+j+(sgn(j)~=0))/2-(i+i+(sgn(i)~=0))/2;
periods=periods+1;
break;
end
end
i=j;
end
i=i+1;
end
if periods>0
Psmp=Psmp/periods/2;
P=Psmp/SR;
freq=1/P;
end
它使每对样本的线性插值约为 0,并找到周期的平均值。