我想用谐波产品谱找到音符的基频。这是实现HPS算法的部分
seg_fft = seg_fft(1 : size(seg_fft,1)/2 ); % FFT data
seg_fft = abs(seg_fft);
seg_fft2 = ones(size(seg_fft));
seg_fft3 = ones(size(seg_fft));
seg_fft4 = ones(size(seg_fft));
seg_fft5 = ones(size(seg_fft));
for i = 1:floor((length(seg_fft)-1)/2)
seg_fft2(i,1) = (seg_fft(2*i,1) + seg_fft((2*i)+1,1))/2;
end
for i = 1:floor((length(seg_fft)-2)/3)
seg_fft3(i,1) = (seg_fft(3*i,1) + seg_fft((3*i)+1,1) + seg_fft((3*i)+2,1))/3;
end
for i = 1:floor((length(seg_fft)-3)/4)
seg_fft4(i,1) = (seg_fft(4*i,1) + seg_fft((4*i)+1,1) + seg_fft((4*i)+2,1) + seg_fft((4*i)+3,1))/4;
end
for i = 1:floor((length(seg_fft)-4)/5)
seg_fft5(i,1) = (seg_fft(5*i,1) + seg_fft((5*i)+1,1) + seg_fft((5*i)+2,1) + seg_fft((5*i)+3,1) + seg_fft((5*i)+4,1))/5;
end
f_ym = (seg_fft) .* (seg_fft2) .* (seg_fft3) .* (seg_fft4) .*(seg_fft5);
现在当我玩F4时,二次谐波(698 -F5)具有更高的振幅。因此,HPS应该帮助我检测F4和非F5的基波。
当我做HPS这些是我得到的图表:
上图分别显示了seg_fft2,seg_fft3,seg_fft4和seg_fft5的图。
但我不明白的是,为什么这些图中获得的频率点不是原始频谱的因素?是不是HPS应该如何工作?
这是我在拍摄所有5个产品时获得的情节。
峰值是698Hz ..但不应该是349Hz而不是??
但是在整个代码运行之后,我确实得到了基本的F4 ..这一切都非常令人困惑....有人能告诉我为什么我的图表与预期不同但我得到了正确的基础吗? ??
这是代码的其余部分
%HPS, PartIII: find max
f_y1 = max(f_ym)
for c = 1 : length(f_ym)
if(f_ym(c,1) == f_y1)
index = c;
end
end
% Convert that to a frequency
f_y(h) = (index / NFFT) * FS;
h=h+1;
%end
V = abs(f_y);
请提前帮助...... Thanx ....