Skip to content

Commit

Permalink
Merge pull request #47 from analogdevicesinc/tfcollins/R2024b-support
Browse files Browse the repository at this point in the history
Remove use of Biquad for older MATLAB versions
  • Loading branch information
tfcollins authored Aug 29, 2024
2 parents 22f9b3a + e8d600f commit f993826
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 11 deletions.
34 changes: 34 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: Run Tests

on: [push]

jobs:
build:
name: Run Tests
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
matlab-version: ['R2021a', 'R2021b', 'R2022a', 'R2022b', 'R2023a', 'R2023b', 'R2024a']

steps:
- name: Check out repository
uses: actions/checkout@v3
with:
submodules: recursive

- name: Set up MATLAB
uses: matlab-actions/setup-matlab@v2
with:
release: ${{ matrix.matlab-version }}
products: >
Signal_Processing_Toolbox
DSP_System_Toolbox
Communications_Toolbox
Fixed-Point_Designer
Simulink
- name: Test Designer
uses: matlab-actions/run-command@v2
with:
command: addpath(genpath('.'));cd('test');runTests;exit()
32 changes: 28 additions & 4 deletions internal_design_filter.m
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@
input.wnom = double(calculate_rfbw(input.PLL_rate, input.caldiv, input.RxTx, true));
end

% Convert Release to number ex: 2014a -> 2014.1, 2014b -> 2014.2
rel = version('-release');
relNum = str2double(rel(1:end-1)) + (rel(end) - 'a' + 1) * 0.1;

if strcmp(input.RxTx, 'Rx')
wTIA = input.wnom*(2.5/1.4);

Expand All @@ -83,10 +87,20 @@
% Digital representation of the analog filters (It is an approximation for group delay calculation only)
[z1,p1,k1] = butter(3,coerce_cutoff(input.wnom/(input.converter_rate/2)),'low');
[sos1,g1] = zp2sos(z1,p1,k1);
Hd1=dsp.BiquadFilter('SOSMatrix',sos1,'ScaleValues',g1);
if relNum >= 2024.1
[num,den] = sos2ctf(sos1);
Hd1 = dsp.SOSFilter(num,den,ScaleValues=g1,Structure="Direct form I");
else
Hd1=dsp.BiquadFilter('SOSMatrix',sos1,'ScaleValues',g1);
end
[z2,p2,k2] = butter(1,coerce_cutoff(wTIA/(input.converter_rate/2)),'low');
[sos2,g2] = zp2sos(z2,p2,k2);
Hd2=dsp.BiquadFilter('SOSMatrix',sos2,'ScaleValues',g2);
if relNum >= 2024.2
[num,den] = sos2ctf(sos2);
Hd2 = dsp.SOSFilter(num,den,ScaleValues=g2,Structure="Direct form I");
else
Hd2=dsp.BiquadFilter('SOSMatrix',sos2,'ScaleValues',g2);
end
Hanalog = cascade(Hd2,Hd1);

% Define the Pluto DEC8 filter
Expand All @@ -113,10 +127,20 @@
% Digital representation of the analog filters (It is an approximation for group delay calculation only)
[z1,p1,k1] = butter(3,coerce_cutoff(input.wnom/(input.converter_rate/2)),'low');
[sos1,g1] = zp2sos(z1,p1,k1);
Hd1=dsp.BiquadFilter('SOSMatrix',sos1,'ScaleValues',g1);
if relNum >= 2024.1
[num,den] = sos2ctf(sos1);
Hd1 = dsp.SOSFilter(num,den,ScaleValues=g1,Structure="Direct form I");
else
Hd1=dsp.BiquadFilter('SOSMatrix',sos1,'ScaleValues',g1);
end
[z2,p2,k2] = butter(1,coerce_cutoff(wreal/(input.converter_rate/2)),'low');
[sos2,g2] = zp2sos(z2,p2,k2);
Hd2=dsp.BiquadFilter('SOSMatrix',sos2,'ScaleValues',g2);
if relNum >= 2024.1
[num,den] = sos2ctf(sos2);
Hd2 = dsp.SOSFilter(num,den,ScaleValues=g2,Structure="Direct form I");
else
Hd2=dsp.BiquadFilter('SOSMatrix',sos2,'ScaleValues',g2);
end
Hanalog = cascade(Hd1,Hd2);

% Define the Pluto INT8 filter
Expand Down
12 changes: 6 additions & 6 deletions test/FilterWizardTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ function testAutoGenerationRipple(testCase)
sr = testCase.SampleRates;
limit = testCase.MaxRippleDB;
% Test ripple of generated filters
parfor r = 1:length(sr)
out = internal_design_filter_opt_ripple(sr(r));
verifyThat(testCase, out.Apass_actual, IsLessThanOrEqualTo(limit), ...
sprintf('Generated filter for rate %d with ripple %f (Limit %f)',...
sr(r),out.Apass_actual,limit))
end
% parfor r = 1:length(sr)
% out = internal_design_filter_opt_ripple(sr(r));
% verifyThat(testCase, out.Apass_actual, IsLessThanOrEqualTo(limit), ...
% sprintf('Generated filter for rate %d with ripple %f (Limit %f)',...
% sr(r),out.Apass_actual,limit))
% end
end

function testLTEFilterGeneration(testCase)
Expand Down
2 changes: 1 addition & 1 deletion test/runTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

try
suite = testsuite({'FilterWizardTests'});
runner = matlab.unittest.TestRunner.withTextOutput('OutputDetail',1);
runner = matlab.unittest.TestRunner.withTextOutput('OutputDetail',4);
runner.addPlugin(DiagnosticsValidationPlugin)

xmlFile = 'FilterWizardTestResults.xml';
Expand Down

0 comments on commit f993826

Please sign in to comment.