有人能告诉我如何使用MATLAB实现谐波产品频谱,以便在存在谐波的情况下找到音符的基频?我知道我应该多次对信号进行下采样(当然是在执行fft之后),然后将它们与原始信号相乘 .
说我的fft信号是“FFT1”
然后代码大致会像
hps1 = downsample(FFT1,2);
hps2 = downsample(FFT1,3);
hps = FFT1.*hps1.*hps2;
这段代码是否正确?我想知道我是否正确地进行了采样,因为每个变量都有不同的长度乘以它们导致矩阵尺寸误差 . 我真的需要一些真正的快速帮助作为项目工作...真的很绝望.... Thanx提前....
1 回答
好的,你不能为每个下采样数据做
"hps = FFT1.*hps1.*hps2;"
,你有不同的尺寸......我为你做了一个例子,如何使用5次谐波抽取(下采样)制作一个非常简单的谐波产品频谱(HPS),我只是测试正弦信号,在我的测试中我得到非常接近基频的频率 .
此代码仅显示如何计算算法的主要步骤,很可能您需要改进它!
资源:
HPS通常会产生一个错误,显示音高一个八度,我改变了一点代码,见上文:-)