scalecheck - Check scaling of biquadratic filter - MATLAB (original) (raw)
Check scaling of biquadratic filter
Syntax
Description
[s](#brygv2j-10-s) = scalecheck([sysobj](#brygv2j-10-biquad),[pnorm](#brygv2j-10-pnorm))
checks the scaling of the input filter System object™.
[s](#brygv2j-10-s) = scalecheck([sysobj](#brygv2j-10-biquad),[pnorm](#brygv2j-10-pnorm),Arithmetic=[arithType](#mw%5F44897d6f-1538-44b3-a4ab-fa6016f30716))
checks the scaling of the filter object with the arithmetic specified inarithType
.
Examples
This example shows how to check the Linf-norm scaling of a filter.
Design an elliptic SOS filter in the direct form II structure with default specifications.
EllipII = design(fdesign.lowpass,'ellip',FilterStructure='df2sos',... SystemObject=true)
EllipII = dsp.SOSFilter with properties:
Structure: 'Direct form II'
CoefficientSource: 'Property'
Numerator: [3×3 double]
Denominator: [3×3 double]
HasScaleValues: true
ScaleValues: [0.8629 2.0523 0.0127 1]
Show all properties
Check the scaling.
scalecheck(EllipII,'Linf')
ans = 2×3
3.1678 15.0757 1.4974
4.7360 52.6026 1.0000
Design an elliptic SOS filter in the direct form I structure with default specifications.
EllipI = design(fdesign.lowpass('N,Fp,Ap,Ast',10,0.5,0.5,20),'ellip',... FilterStructure='df1sos',SystemObject=true)
EllipI = dsp.SOSFilter with properties:
Structure: 'Direct form I'
CoefficientSource: 'Property'
Numerator: [5×3 double]
Denominator: [5×3 double]
HasScaleValues: true
ScaleValues: [0.9442 1.0014 1.0170 1.6551 0.1398 1]
Show all properties
Check the scaling.
scalecheck(EllipI,'Linf')
ans = 1×5
1.7078 2.0807 2.6084 7.1467 1.0000
Input Arguments
Discrete-time-domain norm or a frequency-domain norm.
Valid time-domain norm values for pnorm
are'l1'
, 'l2'
, and'linf'
. Valid frequency-domain norm values are'L1'
, 'L2'
, and'Linf'
. The 'L2'
norm is equal to the 'l2'
norm (by Parseval's theorem), but this equivalency does not hold for other norms — 'l1'
is not the same as 'L1'
and 'Linf'
is not the same as 'linf'
.
Arithmetic type used during analysis, specified as'double'
, 'single'
, or'fixed'
. The function assumes a double precision filter when the arithmetic input is not specified and the filter System object is in an unlocked state.
Output Arguments
Filter scaling for a given p-norm. An optimally scaled filter has partial norms equal to one. In such cases, s
contains all ones.
For direct-form I (df1sos
) and direct-form II transposed (df2tsos
) filters, the function returns the p-norm of the filter computed from the filter input to the output of each second-order section. Therefore, the number of elements ins
is one less than the number of sections in the filter. This p-norm computation does not include the trailing scale value of the filter, which you can find by enteringhd.scalevalue(end)
at the MATLAB prompt.
For direct-form II (df2sos
) and direct-form I transposed (df1tsos
) filters, the function returns a row vector whose elements contain the p-norm from the filter input to the input of the recursive part of each second-order section. This computation of the p-norm corresponds to the input to the multipliers in these filter structures. These inputs correspond to the locations in the signal flow where overflow should be avoided.
When hd
has nontrivial scale values, that is, if any scale values are not equal to one, s
is a two-row matrix, rather than a vector. The first row elements of s
report the p-norm of the filter computed from the filter input to the output of each second-order section. The elements of the second row ofs
contain the p-norm computed from the input of the filter to the input of each scale value between the sections. Fordf2sos
and df1tsos
filter structures, the last numerator and the trailing scale value for the filter are not included when scalecheck
checks the scaling.
Data Types: double
Version History
Introduced in R2011a
The dsp.BiquadFilter
object issues a warning and will be removed in a future release. Use the dsp.SOSFilter object instead.
Update Code
This table shows how to replace the dsp.BiquadFilter
object with the dsp.SOSFilter
object in a typical workflow.
Discouraged Usage | Recommended Replacement |
---|---|
[z,p,k] = butter(10,2000/(8000/2)); [s,g] = zp2sos(z,p,k); biquad = dsp.BiquadFilter(Structure='Direct form I',... SOSMatrix=s,ScaleValues=g); scalecheck(biquad,'Linf') 0.0115 0.0435 0.1487 0.4324 1.0000 | [z,p,k] = butter(10,2000/(8000/2)); [s,g] = zp2sos(z,p,k); [num,den] = sos2ctf(s); sosFilter = dsp.SOSFilter(Numerator=num,... Denominator=den,... ScaleValues=g,... Structure="Direct form I"); scalecheck(sosFilter,'Linf') 0.0115 0.0435 0.1487 0.4324 1.0000 |
The dsp.BiquadFilter
object will be removed in a future release. Use the dsp.SOSFilter object instead.