SQNR simulation result does not match with the formula 6.02*N + 1.76
30 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I have implemented an ideal 10 bit midrise type quantizer in MATLAB. The signal-to-quantization-noise value from the simulation
and theory differ by approximately 6 dB. I have checked this difference with multiple bit numbers such as 10 bits, 12bits, 16bits and
the result is the same, SQNR from the simulation is always 6 dB below the ideal value. Also, fft of the quantized signal is strange, it
does have two peaks at signal frequency as expected, however all other values are zero. I cannot understand these two results.
Here is my code:
clear all;clc;close all;
fs = 1e6;
t = 0:1/fs:4.095e-3;
y1 = sin(2*pi*37/512*1e6*t);
N = length(y1);
y1_dft = abs(fft(y1))/N;
dft_idy1 = 0:N-1;
f = (fs/N)*dft_idy1;
figure (1);
plot(f,20*log10(y1_dft));
title("fft of the original signal y1");
nbits = 10;
delta = 2*max(abs(y1))/(2^nbits); %% for n bit quantization, step size(delta) is Vpp/(2^nbit)
n_quants = 2^nbits;
% following part implements a midrise quantizer
partition_right = delta:delta:(n_quants/2)*delta;
partition_left = -flip(partition_right,2);
partition = [partition_left 0 partition_right];
codebook_left = [min(partition_left) partition_left];
codebook_right = [partition_right max(partition_right)];
codebook = [codebook_left codebook_right];
[index,y1_quantized] = quantiz(y1,partition,codebook);
%quantized_y1 = floor((n_quants-1)*y1)/(n_quants);
figure(2);
plot(t,y1);
hold on
stem(t,y1_quantized);
legend('Original signal y1','Quantized y1');
hold off
quants_dft = abs(fft(y1_quantized))/N;
dft_idquants = 0:N-1;
f = (fs/N)*dft_idquants;
figure(3);
plot(f,(quants_dft));
title("fft of the quantized signal");
quantization_noise = y1 - y1_quantized;
figure
plot(t,quantization_noise);
xlabel('time')
ylabel('quantization noise')
title('quantization noise in time domain')
quantization_noise_power = sum(abs(quantization_noise).^2)/N;
quantization_noise_power_theory = (delta^2)/12;
signal_power = var(y1);
SQNR_sim = 10*log10(signal_power/quantization_noise_power);
SQNR_theory = 6.02*nbits + 1.76 % in dB
0 commentaires
Réponses (1)
Arthi Sathyamurthi
le 28 Déc 2021
Hello,
The theoritical SQNR formula is where is the signal power in dB and ν is the number of bits. Hence you can try modifying the SQNR theory as
SQNR_theory = 10*log10(signal_power) + 6.02*nbits + 1.76;
0 commentaires
Voir également
Catégories
En savoir plus sur Signal Processing Toolbox dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!