首页 > 解决方案 > 在 SNR 计算期间,下标索引必须是实数正整数或逻辑数

问题描述

我正在尝试计算非正弦信号的 SNR,在计算信号功率时,我遇到了错误。请帮助,提前谢谢你

我试图增加 FFT 和泄漏的长度,即:e N = 2^nextpow2(length(signal)); 但没有运气。采样率:16000

我的代码如下:

[signal, Fs] = audioread('40db_heart_insulation.wav');
N               = 8192; % FFT length
leak            = 150; %bins
fft_s           = fft(signal,N);
abs_fft_s       = abs(fft_s);
plot (abs_fft_s)
[~,p]           = max(abs_fft_s(1:N/2));
sigpos= [p-leak:p+leak N-p-leak:N-p+leak];% Finding the peak
sig_pow         = sum(abs_fft_s(sigpos));

错误:下标索引必须是实数正整数或逻辑数。

心音错误(第 17 行)sig_pow = sum(abs_fft_s(sigpos)); % 信号功率 = 对应于信号的 bin 幅度之和

标签: matlabfftindices

解决方案


您可能有一个负值sigpos,例如N< p+leak。尝试添加这一行:

sigpos = sigpos(sigpos > 0)


推荐阅读