Error: using abs Complex integers are not supported

Error: using abs Complex integers are not supported

我使用“audioread(filename, 'native')”获得 class:int16 类型的数据,这是一个数据 IQIQIQ... 流。然后,我使用 complex(I, Q) 来形成复杂的数据样本。当我执行 abs(complex(I, Q)) 获取样本幅度时,出现错误:“错误:不支持使用 abs 复数整数”。关于如何解决这个问题有什么建议吗?

在调用 abs() 之前将 complex(I,Q) 转换为 double 可能是一种选择。然后可以将结果重新转换为 int16 类型。我相信 abs() 函数需要 doublecomplex doublesingle 作为输入来计算幅度。由于数据很复杂,因此唯一允许的类型是 singlesdoubles。假设您正在寻找复杂数据的量级,这可能就足够了。如果您只想在调用 complex() 之前在 channels/vectors IQ 上调用 abs() 的组件的绝对值可能是一个选项。

转换为类型 single

Audio = audioread("TETRA IQ.wav",'native');
I = Audio(:,1);
Q = Audio(:,2);

Complex_Pair = complex(I,Q);
Complex_Pair_Double = single(Complex_Pair);
Magnitude = uint16(abs(Complex_Pair_Double));

转换为类型 double

Audio = audioread("TETRA IQ.wav",'native');
I = Audio(:,1);
Q = Audio(:,2);

Complex_Pair = complex(I,Q);
Complex_Pair_Double = double(Complex_Pair);
Magnitude = uint16(abs(Complex_Pair_Double));

运行 使用 MATLAB R2019b