matlab产生谐波的代码,谐波产品频谱的MATLAB代码

好的,你不能为每个下采样数据做 "hps = FFT1.*hps1.*hps2;" ,你有不同的尺寸......

我为你做了一个例子,如何使用5次谐波抽取(下采样)制作一个非常简单的谐波产品频谱(HPS),我只是测试正弦信号,在我的测试中我得到非常接近基频的频率 .

此代码仅显示如何计算算法的主要步骤,很可能您需要改进它!

资源:

%[x,fs] = wavread('ederwander_IN_250Hz.wav');

CorrectFactor = 0.986;

threshold = 0.2;

%F0 start test

f = 250;

fs = 44100;

signal= 0.9*sin(2*pi*f/fs*(0:9999));

x=signal';

framed = x(1:4096);

windowed = framed .* hann(length(framed));

FFT = fft(windowed, 4096);

FFT = FFT(1 : size(FFT,1) / 2);

FFT = abs(FFT);

hps1 = downsample(FFT,1);

hps2 = downsample(FFT,2);

hps3 = downsample(FFT,3);

hps4 = downsample(FFT,4);

hps5 = downsample(FFT,5);

y = [];

for i=1:length(hps5)

Product = hps1(i) * hps2(i) * hps3(i) * hps4(i) * hps5(i);

y(i) = [Product];

end

[m,n]=findpeaks(y, 'SORTSTR', 'descend');

Maximum = n(1);

%try fix octave error

if (y(n(1)) * 0.5) > (y(n(2))) %& ( ( m(2) / m(1) ) > threshold )

Maximum = n(length(n));

end

F0 = ( (Maximum / 4096) * fs ) * CorrectFactor

plot(y)

HPS通常会产生一个错误,显示音高一个八度,我改变了一点代码,见上文:-)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值