我正在MATLAB中录制一些声音,然后将其从16位降到1位,因此我可以计算SNR,但没有得到合理的SNR数字。有人指出我正确的方向吗?

% Store recorded audio signal in numeric array
signal = getaudiodata(recording, 'int16');

quanRate = 16;
quantsignal = signal;

while quanRate ~= 1
 quanRate = quanRate - 1;

 quantsignalHold = quantsignal;

 % Remove LSB using bitshift
 quantsignal = bitshift(quantsignal, -1);

 % Plot the quantized signal
 figure()
 plot(quantsignal);
 title(['Sample recording at ' num2str(quanRate) '-bits']);
 xlabel('Sample number') % x-axis label
 ylabel('Sample value') % y-axis label

 % Calculate the quantisation error
 quantError = quantsignal - signal;

 % Calculate the SNR
 SNR = snr(signal,quantError);

 disp(['The SNR of the ' num2str(quanRate) '-bit recording is: ' num2str(SNR) ' dB'])
end

最佳答案

通过将信号的样本向右移动,可以将其除以2。此量化信号与原始信号之间的差始终是信号幅度的一半,而不是量化误差。

您可能想用量化

floor( signal / N ) * N + N/2;

或类似的内容(N为2的幂,每次循环迭代都会增加)。

关于matlab - MATLAB中的量化噪声,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51796477/

10-11 07:48