我想计算信号的SQNR。
fs = 44100;
fs_orig=44100;
nbits = 16;
[x1,fs,nbits]=wavread('Mysong.wav');
y=x1(:,1);
y=y*32768;
y=round(y);
%filter your data
[B1,A1] = butter(4,[90 715]/(fs_orig/2),'bandpass');
dataOut1 = filter(B1, A1, dataIn); % // filter command filters your music
首先'删除'4个最低有效位。所以我将样本分成16个,然后再进行循环再乘以16。
d1 = dataOut1*16;
d2 = round(d1);
a = int32(d1);
b = int32(16);
C = idivide(a, b);
r = snr(dataOut1,fs,fs)
d = snr(double(C),fs,fs)
error_signal = minus(d,r)
%express in db
error_db = 20*log10(error_signal)
我计算了误差信号(原始信号和重新量化信号之间的差异)。我来到了6.4180e-05的结果。这可能吗?当我将其转换为db时,我得到了-83.8519 db的结果。它是否正确?我做了什么是正确的?这个值看起来很大。