matlab - 在 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 幅度之和
解决方案
您可能有一个负值sigpos
,例如N
< p+leak
。尝试添加这一行:
sigpos = sigpos(sigpos > 0)
推荐阅读
- visual-studio-code - Visual Studio Code 嵌入式终端中的垂直行距
- dynamics-365 - Power bi 自定义视觉对象中有关 Dynamics 365 执行上下文的可能性
- html - 使用 Tailwind CSS 将文本居中并将图标放在右侧
- android - Android studio profiler + leack canary
- sql - SSRS 参数 - 在列表中显示月份名称和年份,而不是日历
- python-3.x - 正则表达式错误和改进驾驶执照数据提取
- ios - 迁移 Cocos2d 到最新的设备支持
- r - 将数据框的 substr 映射到新列
- python - 通过包含在 Pandas 中创建列
- sql - 带有case语句的Oracle'+'运算符?