SampleRateConvertion error in plugin

K
khalilabby · Nov 30, 2020 · 2K views
Question
I´m trying to implement a x4 oversampling process but I´m having difficulties on how let the SampleRateConverter sytem object knows about sample rate used. When compiling the example attached for plugin generation, the following error shows up: “Failed to compute constant value for nontunable property 'SampleRate'. In code generation, nontunable properties can only be assigned constant values.” I'd really appreciate if someone can give me a hint on how fix/treat this. classdef (StrictDefaults)DistoLab_Test2 < matlab.System & audioPlugin properties GainDisto=0; Input=0; Volume=0; end properties (Constant, Hidden) % Define the plugin interface PluginInterface = audioPluginInterface( ... 'InputChannels',2,... 'OutputChannels',2,... 'PluginName','DistoLab_Test2',... audioPluginParameter('Volume', ... 'DisplayName', 'Out', ... 'DisplayNameLocation','none',... 'Label','dB', ... 'Mapping', { 'lin', -15, 15}, ... 'Style', 'rotaryknob', 'Layout', [4 6]),... audioPluginParameter('Input', ... 'DisplayName', 'In', ... 'DisplayNameLocation','none',... 'Label','dB', ... 'Mapping', { 'lin', -5, 5}, ... 'Style', 'rotaryknob', 'Layout', [4 3]),... audioPluginParameter('GainDisto', ... 'DisplayName', 'Saturation', ... 'DisplayNameLocation','none',... 'Style', 'rotaryknob', 'Layout', [4,5],... 'Mapping', { 'lin', 0, 10}, ... 'Filmstrip','knob_67_black.png', ... %<-- 'FilmstripFrameSize',[80,80]), ... audioPluginGridLayout('RowHeight', [30 90 10 100 37], ... 'ColumnWidth', [30 100 100 20 100 100 20 80 80 80 60], 'Padding', [10 10 10 10])); end properties (Access = private) Up4; Down4; end methods % Constructor function plugin = DistoLab_Test2 plugin.Up4=dsp.SampleRateConverter; plugin.Down4=dsp.SampleRateConverter; calculateSampleRates(plugin); end end methods(Access = protected) function out = stepImpl(plugin, in) inadjusted=in*(10^(plugin.Input/20)); % Incoming signal adjusted by Input Gain %SampleRateConverter x4 process v=step(plugin.Up4,inadjusted); disto=(v*plugin.GainDisto).^5; % input distorted outdisto=(disto)*(10^(plugin.Volume/20)); out = step(plugin.Down4,outdisto); end function resetImpl(plugin) reset(plugin.Up4); reset(plugin.Down4); end function calculateSampleRates(plugin) plugin.Up4.InputSampleRate=getSampleRate(plugin); plugin.Up4.OutputSampleRate=4*getSamplerate(plugin); plugin.Down4.InputSampleRate=4*getSampleRate(plugin); plugin.Down4.OutputSampleRate=getSampleRate(plugin); end end end
Expert Answer
Profile picture of Kshitij Singh
Kshitij Singh PhD Expert
Answered Aug 12, 2026

There are some limitations with codegen and the resampling objects. If you have a hard-coded ratio of 4, the easiest way around it might be to use a nominal sample rate, such as 48kHz. The added benefit is that avoid calls to getSampleRate will be faster.

function calculateSampleRates(plugin)
    sampleRate = 48000; % use a nominal rate
    plugin.Up4.InputSampleRate=sampleRate;
    plugin.Up4.OutputSampleRate=4*sampleRate;
    plugin.Down4.InputSampleRate=4*sampleRate;
    plugin.Down4.OutputSampleRate=sampleRate;
end

The following challenge will be that the input of the sample rate converter will be of unknown size. You can get around that by looping over partitions of a maximum size (like 4096). Something like this might work for you:

 

% Replaces out = step(plugin.Down4,outdisto);
out = zeros(size(in));
for ii = 1:4096:size(in,1)
    endIdx = min(ii+4095,size(in,1));
    xin = outdisto(4*ii-3:4*endIdx,:);
    assert(size(xin,1)<=4*4096); % Tell codegen xin won't be larger than 4x4096
    out(ii:endIdx,:) = step(plugin.Down4,xin);
end
100% Run Guarantee 3-Hour Fast-Track Delivery

Need a Custom Version or Complete Simulation for This Problem?

Our 500+ PhD engineers build, debug, and optimize working MATLAB scripts and Simulink (.slx) models tailored to your exact assignment rubrics with zero plagiarism.

Tested on MATLAB R2024b / R2026a
Turnitin 0% Plagiarism Report
Free 7-Day Revisions Guarantee
Have a different question? Ask here

Get a Free Consultation or a Sample Assignment Review!