我正在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/