Индексы нижних индексов должны быть либо действительными положительными целыми числами, либо логическими при вычислении SNR - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь рассчитать SNR несинусоидального сигнала, при расчете мощности сигнала я получаю ошибку.Пожалуйста, помогите, спасибо заранее

Я пытался увеличить длину БПФ и утечки, я: е N = 2 ^ nextpow2 (длина (сигнал));но не повезло.Частота выборки: 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));% мощности сигнала = сумма величин бинов, соответствующих сигналу

1 Ответ

0 голосов
/ 20 мая 2019

Возможно, у вас отрицательное значение sigpos, например N <<code>p+leak. Попробуйте добавить эту строку:

sigpos = sigpos(sigpos > 0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...