Это зависит от того, как вы хотите сделать сравнение ввода и вывода. Код, который я вам дал для вычисления BER, будет считать любую разницу между входом и выходом как ошибку. Таким образом, значение 3 для выхода и соответствующее 1 для входа учитываются как Different .
Если вы хотите вычислить BER другим способом, вот еще пара вариантов, которые вы могли бы использовать. Каждый из них предполагает, что values
содержит только нули и единицы:
Считать любое ненулевое выходное значение как 1: В этом случае вы будете использовать функцию LOGICAL для преобразования любого не нулевое значение z
(то есть значения 3, 0,5, -1 и т. д.) до 1, при этом значения, равные точно ноль, остаются неизменными:
BER = sum(values(:)-logical(z(:)))/numel(values);
Считать положительные значения как 1 и отрицательные значения как 0: Это решение просто использует оператор сравнения вместо LOGICAL :
BER = sum(values(:)-(z(:) > 0))/numel(values);
Вы также можете попробовать установить для свойства 'OutputType'
объекта modem.oqpskdemod
значение 'bit'
, чтобы обеспечить двоичный вывод. Тогда вам не нужно ничего делать с z
:
...
g = modem.oqpskdemod(h,'OutputType','bit');
z = demodulate(g,y);
BER = sum(values(:)-z(:))/numel(values);