相同量化位数衰减不同原因分析

% 设计高通最优FIR滤波器,过渡带为1000~1500Hz,采样频率为8000Hz,通带容限为0.01,阻带容限为0.001
% 将滤波器系数12bit量化,与无量化时的幅度响应曲线比较

clear
close all;

fs=8000;            %采样频率
fc=[1000 1500];     %过渡带
mag=[0 1];          %窗函数的理想滤波器幅度
dev=[0.001 0.01];   %纹波

[n,wn,beta,ftype]=kaiserord(fc,mag,dev,fs);     %获取凯塞窗参数

fpm=[0 fc(1)*2/fs fc(2)*2/fs 1];    %firpm函数的频段向量
magpm=[0 0 1 1];                    %firpm函数的幅值向量
h_pm=firpm(n,fpm,magpm);            %设计最优滤波器

h_pm12=round(h_pm/max(abs(h_pm))*(2^11-1)); %12bit量化

m_pm=20*log(abs(fft(h_pm,1024))); m_pm=m_pm-max(m_pm);  %求幅频响应
m_pm12=20*log(abs(fft(h_pm12,1024))); m_pm12=m_pm12-max(m_pm12);

x_f=0:(fs/length(m_pm)):fs/2;   %设置幅频响应的横坐标单位为Hz
mf_pm=m_pm(1:length(x_f));      %只显示正频率部分的幅频响应
mf_pm12=m_pm12(1:length(x_f));

%绘制幅频响应曲线
plot(x_f,mf_pm,'-',x_f,mf_pm12,'-.');
xlabel('频率(Hz)');ylabel('幅度(dB)');
legend('未量化','12位量化');
grid;

相同量化位数衰减不同原因分析_第1张图片

图1


% 设计一个低通滤波器。采样频率fs=8MHz,过渡带fc=[1MHz 2MHz];
% 绘出滤波器第数量化前后的幅频响应图
clear
close all;

fs=8*10^6;           %采样频率
qm=12;               %滤波器系数量化位数
fc=[1*10^6 2*10^6];  %过渡带
mag=[1 0];           %窗函数的理想滤波器幅度
%设置通带容限a1及阻带容限a2
%通带衰减ap=-20*log10(1-a1)=0.915dB,阻带衰减为as=-20*log10(a2)=40dB
a1=0.1;
a2=0.01;
dev=[a1 a2];
%采用凯塞窗函数获取满足要求的最小滤波器阶数
[n,~,~,ftype]=kaiserord(fc,mag,dev,fs);  
%采用firpm函数设计最优滤波器
fpm=[0 fc(1)*2/fs fc(2)*2/fs 1];  %firpm函数的频段向量
magpm=[1 1 0 0];                  %firpm函数的幅值向量
h_pm=firpm(n,fpm,magpm);          %设计最优滤波器

q_pm=round(h_pm/max(abs(h_pm))*(2^(qm-1)-1));   %量化滤波系数

m_pm=20*log10(abs(fft(h_pm,1024)));   m_pm=m_pm-max(m_pm);  %求幅频响应
q_pm=20*log10(abs(fft(q_pm,1024)));   q_pm=q_pm-max(q_pm);

x_f=[0:(fs/length(m_pm)):fs/2]/10^6;    %设置幅频响应的横坐标单位为MHz
mf_pm=m_pm(1:length(x_f));
mf_qm=q_pm(1:length(x_f));

%绘制幅频响应曲线
plot(x_f,mf_pm,'--',x_f,mf_qm,'-');
xlabel('频率(MHz)');ylabel('幅度(dB)');
legend('未量化','12位量化');
grid;

相同量化位数衰减不同原因分析_第2张图片

图2

对滤波器系数进行量化处理一定会带来有限字长效应,但是有限字长效应影响的大小需要根据实际情况而定。对比图1与图2可以看出,12bit量化之后图1对性能的影响比图2对性能影响大很多。这是为什么呢?因为在设计高通滤波器时,过渡带很窄,滤波器的长度为61;在设计低通滤波器时,过渡带较宽,滤波器的长度为19。由于FIR滤波器其实是一个乘积累计运算,显然滤波器长度越长,则相同的量化位数所造成的累加运算误差越大。

你可能感兴趣的:(相同量化位数衰减不同原因分析)