Cast fixed-point filter to use double-precision arithmetic
hd = double(h)
hd = double(h) returns a new filter hd that has the same structure and coefficients as h, but whose arithmetic property is set to double to use double-precision arithmetic for filtering. double(h) is not the same as the reffilter(h) function:
hd, the filter returned by double has the quantized coefficients of h represented in double-precision floating-point format
The reference filter returned by reffilter has double-precision, floating-point coefficients that have not been quantized.
You might find double(h) useful to isolate the effects of quantizing the coefficients of a filter by using double to create a filter hd that operates in double-precision but uses the quantized filter coefficients.
Use the same filter, once with fixed-point arithmetic and once with floating-point, to compare fixed-point filtering with double-precision floating-point filtering.
h = dfilt.dffir(firgr(27,[0 .4 .6 1],... [1 1 0 0])); % Lowpass filter. % Set h to use fixed-point arithmetic to filter. % Quantize the coeffs. h.arithmetic = 'fixed'; % Cast h to double-precision hd = double(h); % Set up an input signal. n = 0:99; x = sin(0.7*pi*n(:)); y = filter(h,x); % Fixed-point output. yd = filter(hd,x); % Floating-point output. FixedFloatNormDiff=norm(yd-double(y),inf);