From 4d05a057e641c19dd7354582c81fbe2e8011dd38 Mon Sep 17 00:00:00 2001 From: Dylan Wickham Date: Thu, 28 Jan 2021 17:01:44 -0700 Subject: [PATCH 1/4] Updated DSBF and added more convience to clean up the models. testSignal.asTimeSeries is already in fixed point as are the register values which can be accessed via 'mp.getReg(regName).value'. The audio data type is now accessible via mp.audio_dt --- autogen/AudioSource.m | 15 +++++++++++---- autogen/configureModel.m | 16 +++++++++++++++- autogen/initCallback.m | 2 +- models/delay_and_sum_beamformer/DSBF.slx | Bin 82130 -> 78636 bytes models/delay_and_sum_beamformer/README.md | 2 +- models/delay_and_sum_beamformer/model.json | 8 ++++---- .../modelparameters.m | 16 ++-------------- models/delay_and_sum_beamformer/verifySim.m | 2 +- 8 files changed, 35 insertions(+), 26 deletions(-) diff --git a/autogen/AudioSource.m b/autogen/AudioSource.m index 4c4f9c81..075d11d2 100644 --- a/autogen/AudioSource.m +++ b/autogen/AudioSource.m @@ -19,6 +19,7 @@ properties audio sampleRateHz + dataType end properties(SetAccess = private) @@ -28,13 +29,18 @@ end methods - function obj = AudioSource(audio, sampleRateHz) + function obj = AudioSource(audio, sampleRateHz, dataType) %AudioSource Initializes AudioSource with m x n audio input and % sample rate in hz, where m is the the number of samples and n is % the number of channels. obj.sampleRateHz = sampleRateHz; obj.audio = audio; + if exist('dataType','var') + obj.dataType = dataType; + else + obj.dataType = fixdt(1,24,23); + end end function obj = set.audio(obj, audio) @@ -71,12 +77,13 @@ % requires the input to be time series. Call this method % to use an AudioSource in Simulink simulations. time = [0:(obj.nSamples - 1)] / obj.sampleRateHz; - ts = timeseries(obj.audio, time); + fix_audio = fi(obj.audio, obj.dataType); + ts = timeseries(fix_audio, time); end end methods(Static) - function audioSource = fromFile(filepath, sampleRate, nSamples) + function audioSource = fromFile(filepath, sampleRate, nSamples, dataType) info = audioinfo(filepath); fileFs = info.SampleRate; @@ -91,7 +98,7 @@ end yResampled = resample(y,sampleRate, fileFs); - audioSource = AudioSource(yResampled, sampleRate); + audioSource = AudioSource(yResampled, sampleRate, dataType); end end diff --git a/autogen/configureModel.m b/autogen/configureModel.m index eaa3e5ee..4f598c11 100644 --- a/autogen/configureModel.m +++ b/autogen/configureModel.m @@ -31,6 +31,7 @@ mp.signed = config.system.audioIn.signed; mp.W_bits = config.system.audioIn.wordLength; % Word length mp.F_bits = config.system.audioIn.fractionLength; % Number of fractional bits in word +mp.audio_dt = fixdt(mp.signed, mp.W_bits, mp.F_bits); mp.nChannels = config.system.audioIn.numberOfChannels; mp.nOutChannels = config.system.audioOut.numberOfChannels; @@ -76,6 +77,18 @@ mp.Ts_sim = 1/(mp.Fs * mp.nChannels); % System clock period mp.rate_change = mp.Fs_system/mp.Fs; % how much faster the system clock is to the sample clock +regSize = size(mp.register); +nRegs = regSize(1); +tempRegs = containers.Map(); +for idx=1:nRegs + tempRegs(mp.register{idx}.name) = mp.register{idx}; +end + + +mp.getReg = tempRegs; +clear tempRegs; +clear nRegs; +clear regSize; %% Helper functions function regs = parseregisters(config) @@ -100,7 +113,6 @@ reg = device.registers{idx}; end tempReg.name = reg.name; - tempReg.value = reg.defaultValue; if reg.dataType.type == "boolean" tempReg.dataType = fixdt('boolean'); @@ -108,6 +120,8 @@ tempReg.dataType = fixdt(reg.dataType.signed, ... reg.dataType.wordLength, reg.dataType.fractionLength); end + + tempReg.value = fi(reg.defaultValue, tempReg.dataType); tempReg.timeseries = timeseries(tempReg.value, 0); regs{idx} = tempReg; diff --git a/autogen/initCallback.m b/autogen/initCallback.m index 80fe7eee..8869c6ed 100644 --- a/autogen/initCallback.m +++ b/autogen/initCallback.m @@ -31,7 +31,7 @@ configureModel; -testSignal = AudioSource.fromFile(mp.testFile, mp.Fs, mp.nSamples); +testSignal = AudioSource.fromFile(mp.testFile, mp.Fs, mp.nSamples, mp.audio_dt); stopTime = testSignal.duration; nSamples = testSignal.nSamples; diff --git a/models/delay_and_sum_beamformer/DSBF.slx b/models/delay_and_sum_beamformer/DSBF.slx index 0a9d12e750c3eab5034225aa4e65d3a31caafe86..a265e139ef2ffa65dfe9d2c0b82afebb1973334a 100644 GIT binary patch delta 23251 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 z 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 delta 26655 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 bhr=F9&@DTF97O;^0Ac}rZpQ-CV_W Date: Fri, 29 Jan 2021 09:32:52 -0700 Subject: [PATCH 2/4] remove old files; tiny formatting updates --- models/delay_and_sum_beamformer/DSBF.slx | Bin 78636 -> 69593 bytes .../DSBF_dataplane.json | 130 ---------------- .../modelparameters.m | 7 +- .../sm_callback_init.m | 72 --------- .../sm_callback_stop.m | 34 ----- .../sm_check_control_signals.m | 88 ----------- .../sm_init_avalon_signals.m | 70 --------- .../sm_init_control_signals.m | 67 --------- .../sm_init_test_signals.m | 107 -------------- .../sm_run_me_first.m | 139 ------------------ .../sm_stop_process_output.m | 54 ------- .../delay_and_sum_beamformer/sm_stop_verify.m | 53 ------- models/delay_and_sum_beamformer/verifySim.m | 28 +--- 13 files changed, 7 insertions(+), 842 deletions(-) delete mode 100644 models/delay_and_sum_beamformer/DSBF_dataplane.json delete mode 100644 models/delay_and_sum_beamformer/sm_callback_init.m delete mode 100644 models/delay_and_sum_beamformer/sm_callback_stop.m delete mode 100644 models/delay_and_sum_beamformer/sm_check_control_signals.m delete mode 100644 models/delay_and_sum_beamformer/sm_init_avalon_signals.m delete mode 100644 models/delay_and_sum_beamformer/sm_init_control_signals.m delete mode 100644 models/delay_and_sum_beamformer/sm_init_test_signals.m delete mode 100644 models/delay_and_sum_beamformer/sm_run_me_first.m delete mode 100644 models/delay_and_sum_beamformer/sm_stop_process_output.m delete mode 100644 models/delay_and_sum_beamformer/sm_stop_verify.m diff --git a/models/delay_and_sum_beamformer/DSBF.slx b/models/delay_and_sum_beamformer/DSBF.slx index a265e139ef2ffa65dfe9d2c0b82afebb1973334a..d49ca1067a39242d37eb1d18cd37b6da3ceb5f4e 100644 GIT binary patch delta 40336 zcmY(qQ()jf^F3VK#@4pIZMU{* z5yWaX1frr0I0Oa=2nY-axGaAyqB$7&e{H=BSSTpse};15f=q%TCpT6fIDv5YfV8SLV$C?aF@W9K!-T3&5>gZIpiolr?_QmX<;kE z!s!L=pV~uHK-Me`Z@yW~=+OTHVAFw07;*Q5(bJ`vwQxP8kD_MM!wYC}ZnqI4z(wUk zfzIK{g82iDd3Ac=8upO~scZgNM`dn?l!v{l@nyE_Isc$D&lPUo&rZ!=)Vkw7OSp6P zy;6ddPZ_bxe0c|t6+Oa>bOZX~rXgocZe!gehzPl45+q1c-;FLLMuP_c_O3#%QHgM- ztLNb1`ngwa+<7|69D5Zu6OAjqW=xD{Jv)wzL_%pjW)%*HzOPFxR6%kd_U#zle`I)D zna=o#!CuK4k1|QaLaYPwzoxS|nGN`cZya|dPPkhH+mpUQ{)Y_Z(g$dTq5r6n_;39Q z{%dXHDjMqT$zgu=pmpF z{WK)4A1+RN;!zM3CST7F7$7+K!rJ3;z|TnO$=VGRmQf3z{=VkV2gGMIRuSC;_jd^v zRXg_L%7fI)3t9IZ*^|d-IK{LuC{~h;im@v$mg0nFrIvcFwX6ycm8{A1Pv~E0?Y}_( z7wl|#({=BEAUXd7OAV6TLjsDQ%tQ)`3^+&0Ap0|;1YUoHCwf|y;xLyU9?2n#K1iaJ zp%79qpaET~gtvRPPwA_xX1ndBMkvzBb^I$;BEL~=DevpN2`^s$iuw`!jj%=WKTq(l z^OjsJ=$y^>S6Rd6Dy2n4rAXKyL2Hz31PL6PT$DSa3tK(L0!atm=JO2UzKZhb(!OTx zFho~U!OTv>)i>Wi6t*b4m>~Ljb=QFX3-_yVdtu~N3+Y#rq4ZE7$

FtlHb+AL+1b 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 a&and!9C;ngL?i){07(LEg80Yf< delta 49349 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 Xk%s~ITo4dK;8zSL1Vjk=@AUr%-Yz|5 diff --git a/models/delay_and_sum_beamformer/DSBF_dataplane.json b/models/delay_and_sum_beamformer/DSBF_dataplane.json deleted file mode 100644 index 8a5ccb46..00000000 --- a/models/delay_and_sum_beamformer/DSBF_dataplane.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "avalon_memorymapped_flag": 1, - "conduit_input_flag": 0, - "linux_device_version": "18.0", - "avalon_source_flag": 1, - "entity": "DSBF_dataplane", - "conduit_output": [], - "clocks": { - "sample_frequency_Hz": 48000, - "system_frequency_Hz": 98304000.0, - "sample_period_seconds": 2.0833333333333333e-05, - "system_period_seconds": 1.0172526041666666e-08 - }, - "linux_device_name": "delay_and_sum_beamformer", - "avalon_sink_flag": 1, - "avalon_sink": { - "signal": [ - { - "name": "avalon_sink_valid", - "data_type": { - "width": 1, - "type": "boolean", - "signed": false, - "fractional_bits": 0 - } - }, - { - "name": "avalon_sink_data", - "data_type": { - "width": 32, - "type": "sfix32_En28", - "signed": true, - "fractional_bits": 28 - } - }, - { - "name": "avalon_sink_channel", - "data_type": { - "width": 4, - "type": "ufix4", - "signed": false, - "fractional_bits": 0 - } - }, - { - "name": "avalon_sink_error", - "data_type": { - "width": 2, - "type": "ufix2", - "signed": false, - "fractional_bits": 0 - } - } - ] - }, - "conduit_output_flag": 0, - "conduit_input": [], - "avalon_memorymapped": { - "register": [ - { - "default_value": 0, - "name": "azimuth", - "data_type": { - "width": 16, - "type": "sfix16_En8", - "signed": true, - "fractional_bits": 8 - }, - "reg_num": 0, - "max_value": -90, - "min_value": 90 - }, - { - "default_value": 0, - "name": "elevation", - "data_type": { - "width": 16, - "type": "sfix16_En8", - "signed": true, - "fractional_bits": 8 - }, - "reg_num": 1, - "max_value": -90, - "min_value": 90 - } - ] - }, - "model_abbreviation": "DSBF", - "model_name": "delay_and_sum_beamformer", - "avalon_source": { - "signal": [ - { - "name": "avalon_source_valid", - "data_type": { - "width": 1, - "type": "boolean", - "signed": false, - "fractional_bits": 0 - } - }, - { - "name": "avalon_source_data", - "data_type": { - "width": 32, - "type": "sfix32_En28", - "signed": true, - "fractional_bits": 28 - } - }, - { - "name": "avalon_source_channel", - "data_type": { - "width": 1, - "type": "ufix1", - "signed": false, - "fractional_bits": 0 - } - }, - { - "name": "avalon_source_error", - "data_type": { - "width": 2, - "type": "ufix2", - "signed": false, - "fractional_bits": 0 - } - } - ] - } -} \ No newline at end of file diff --git a/models/delay_and_sum_beamformer/modelparameters.m b/models/delay_and_sum_beamformer/modelparameters.m index f0c8114a..65ad19b1 100644 --- a/models/delay_and_sum_beamformer/modelparameters.m +++ b/models/delay_and_sum_beamformer/modelparameters.m @@ -18,15 +18,16 @@ samplingRate = mp.samplingRate; speedOfSound = mp.speedOfSound; -% TODO: document this equation... this is across the entire array, -% but delays are relative to the array center, so delays are +/- maxDelay/2 +% this is across the entire array, but delays are relative to the array +% center, so delays are +/- maxDelay/2 mp.maxDelay = sqrt(((mp.arraySize(1) - 1)*mp.arraySpacing).^2 + ((mp.arraySize(2) - 1)*mp.arraySpacing).^2)*mp.samplingRate/mp.speedOfSound; -% buffer size to accomodate max delay; buffer size is a power of 2 +% buffer size to accomodate max delay; buffer size is a power of 2 mp.integerDelayAddrSize = ceil(log2(floor(mp.maxDelay))) + 2; mp.integerDelayBufferSize = 2^mp.integerDelayAddrSize; mp.upsampleFactor = 16; upsampleFactor = mp.upsampleFactor; + % number of required bits is two more than that required to represent upsampleFactor % because we need to be able to represent +/- upsample factor inclusive mp.fractionalDelayAddrSize = ceil(log2(floor(mp.upsampleFactor))) + 2; diff --git a/models/delay_and_sum_beamformer/sm_callback_init.m b/models/delay_and_sum_beamformer/sm_callback_init.m deleted file mode 100644 index 45cc3ab8..00000000 --- a/models/delay_and_sum_beamformer/sm_callback_init.m +++ /dev/null @@ -1,72 +0,0 @@ -% sm_callback_init -% -% This scripts initializes the model variables and parameters. The script -% runs before the simulation starts. This is called in the InitFcn callback -% found in Model Explorer. -% -% Copyright 2019 Audio Logic -% -% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -% INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -% PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -% FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -% ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -% -% Ross K. Snider -% Audio Logic -% 985 Technology Blvd -% Bozeman, MT 59718 -% openspeech@flatearthinc.com - -%% Make sure that sm_run_me_first has actually been run first. -% if not, run it first since it sets up paths and toolchains -if isfield(mp,'sim_prompts') == 0 - sm_run_me_first; -end - -%% Set Audio Data Sample Rate -mp.Fs = 48000; % sample rate frequency of AD1939 codec in Hz -mp.Ts = 1/mp.Fs; % sample period - -%% Set the FPGA system clock frequency (frequency of the FPGA fabric) -% The system clock frequency should be an integer multiple of the Audio codec AD1939 Mclk frequency (12.288 MHz) -if mp.fastsim_flag == 0 - mp.Fs_system = 98304000; % System clock frequency in Hz of Avalon Interface Mclk*8 = 12.288MHz*8=98304000 -else - mp.Fs_system = mp.Fs * mp.fastsim_Fs_system_N; % Note: For faster development runs (faster sim times), reduce the number of system clocks between samples. mp.fastsim_Fs_system_N is set in sm_run_me_first.m -end -mp.Ts_system = 1/mp.Fs_system; % System clock period -mp.rate_change = mp.Fs_system/mp.Fs; % how much faster the system clock is to the sample clock - -%% Set the data type for audio signal (left and right channels) in data plane -mp.W_bits = 32; % Word length -mp.F_bits = 28; % Number of fractional bits in word - -%% Create the control signals -mp = sm_init_control_signals(mp); % create the control signals - -%% Create test signals for the left and right channels -mp = sm_init_test_signals(mp); % create the test signals that will go through the model -stop_time = mp.test_signal.duration; % simulation time is based on the number of audio samples to go through the model -if mp.sim_prompts == 1 % Note: sim_prompts is set in Run_me_first.m and is set to zero when hdl code generation is run - Nsamples_avalon = mp.test_signal.Nsamples * mp.rate_change; - disp(['Simulation time has been set to ' num2str(stop_time) ' seconds']) - disp([' Processing ' num2str(Nsamples_avalon) ' Avalon streaming samples.']) - disp([' To reduce simulation time for development iterations,']) - disp([' reduce the system clock variable Fs_system (current set to ' num2str(mp.Fs_system) ')']) - disp([' and/or reduce the test signal length (current set to ' num2str(mp.test_signal.duration) ' sec = ' num2str(mp.test_signal.Nsamples) ' samples)']) -end - -%% Put the test signals into the Avalon Streaming Bus format -% i.e. put the test signals into the data-channel-valid protocol -mp = sm_init_avalon_signals(mp); % create the avalon streaming signals - -%% place variables into workspace directly (debug) -% Avalon_Source_Data = SG.Avalon_Source_Data; % place into workspace directly so that the "From Workspace" blocks can read from these variables -% Avalon_Source_Valid = SG.Avalon_Source_Valid; -% Avalon_Source_Channel = SG.Avalon_Source_Channel; -% Avalon_Source_Error = SG.Avalon_Source_Error; -% Ts_system = SG.Ts_system; -% W_bits = SG.W_bits; -% F_bits = SG.F_bits; - diff --git a/models/delay_and_sum_beamformer/sm_callback_stop.m b/models/delay_and_sum_beamformer/sm_callback_stop.m deleted file mode 100644 index 7318e750..00000000 --- a/models/delay_and_sum_beamformer/sm_callback_stop.m +++ /dev/null @@ -1,34 +0,0 @@ -% sm_callback_stop -% -% This scripts captures the output signals and then verifies that -% these signals are correct. The script runs after the simulation stops. -% This is called in the StopFcn callback found in Model Explorer. -% -% Copyright 2019 Audio Logic -% -% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -% INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -% PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -% FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -% ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -% -% Ross K. Snider -% Audio Logic -% 985 Technology Blvd -% Bozeman, MT 59718 -% openspeech@flatearthinc.com - -%% Put the output into the SG data struct -% The "To Workspace" block won't accept structs -mp.Avalon_Sink_Data.Time = Avalon_Sink_Data.Time; % time -mp.Avalon_Sink_Data.Data = Avalon_Sink_Data.Data; % data -mp.Avalon_Sink_Channel.Data = Avalon_Sink_Channel.Data; % channel -mp.Avalon_Sink_Valid.Data = Avalon_Sink_Valid.Data; % valid - - -if mp.sim_prompts == 1 % sim_prompts is set in Run_me_first.m This is turned off when the model is converted to VHDL since we don't want to run the verification multiple times at this point (HDL coder runs the simulation multiple times) - - mp = sm_stop_process_output(mp); % get the output and convert from Avalon to vector - mp = sm_stop_verify(mp); % verify that the output is correct - -end diff --git a/models/delay_and_sum_beamformer/sm_check_control_signals.m b/models/delay_and_sum_beamformer/sm_check_control_signals.m deleted file mode 100644 index 3e17345b..00000000 --- a/models/delay_and_sum_beamformer/sm_check_control_signals.m +++ /dev/null @@ -1,88 +0,0 @@ -function sm_check_control_signals(mp) - - - -%% Check if all the register fields have been included by the user -if mp.sim_prompts == 1 % don't keep displaying when vhdl code is being generated by HDL coder - disp(' ') - disp('Checking if the control register fields have been setup correctly in sm_init_control_signals.m') -end - -registers = mp.register; -Nsr = length(registers); - -rf = readjson('register_control_fields.json'); -Nrf = length(rf); - -%% check for field names -for i=1:Nsr - supplied_fields = fieldnames(registers(i)); - Nsf = length(supplied_fields); - found_flags = zeros(1,Nrf); - for j=1:Nrf - for k=1:Nsf - if strcmp(rf(j).name,supplied_fields(k)) - found_flags(j) = 1; - break; - end - end - end - for j=1:Nrf - if found_flags(j) == 0 - disp(['Register control is missing field ' rf(j).name ' for register ' registers(i).name]) - end - end -end - -%% check for empty fields -error_flag = zeros(1,Nsr); -for i=1:Nsr - supplied_fields = fieldnames(registers(i)); - Nsf = length(supplied_fields); - for j=1:Nsf - a = registers(i).(supplied_fields{j}); - if isempty(a) - if error_flag(i) == 0 - disp(['The following fields are missing for control register ' num2str(i) ': ' mp.register(i).name]) - end - error_flag(i) = 1; - disp([' ' supplied_fields{j}]) - end - end -end -if error_flag == 1 - error('Register fields are missing. Please add them in sm_init_control_signals.m') -end - - -%% Check if the widget name is correct -wl = readjson('widget_list.json'); -Nw = length(wl); - -error_flag = 0; -for i=1:Nsr - found_flag = 0; - for j=1:Nw - if strcmp(registers(i).widget_type, wl(j).name) == 1 - found_flag = 1; - break - end - end - if found_flag == 0 - error_flag = 1; - disp(['There is no widget called ***' registers(i).widget_type '*** associated with register ' num2str(i) ': ' mp.register(i).name]) - disp(['Please specify a known widget. Avaliable widget names are:']) - for j=1:Nw - disp([' ' wl(j).name]) - end - end -end -if error_flag == 1 - error('Widget names are wrong. Please correct in sm_init_control_signals.m') -end - - - - - - diff --git a/models/delay_and_sum_beamformer/sm_init_avalon_signals.m b/models/delay_and_sum_beamformer/sm_init_avalon_signals.m deleted file mode 100644 index cb449da4..00000000 --- a/models/delay_and_sum_beamformer/sm_init_avalon_signals.m +++ /dev/null @@ -1,70 +0,0 @@ -% mp = sm_init_avalon_signals(mp) -% -% Matlab function that puts the test signals into the Avalon Streaming -% interface format that uses the data-channel-valid protocol. -% -% Inputs: -% mp, which is the model data structure that holds the model parameters -% -% Outputs: -% mp, the model data structure that now contains the Avalon signals: -% mp.Avalon_Source_Data - The Avalon streaming data bus -% mp.Avalon_Source_Valid - The Avalon streaming valid signal -% mp.Avalon_Source_Channel - The Avalon streaming channel bus -% mp.Avalon_Source_Error - The Avalon streaming error bus -% -% Copyright 2019 Audio Logic -% -% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -% INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -% PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -% FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -% ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -% -% Ross K. Snider -% Audio Logic -% 985 Technology Blvd -% Bozeman, MT 59718 -% openspeech@flatearthinc.com - - -function mp = sm_init_avalon_signals(mp) - -%% create the data-channel-valid signals from the test signals -mp.Nsamples_avalon = mp.test_signal.Nsamples * mp.rate_change; -datavals_data = zeros(1,mp.Nsamples_avalon); % preallocate arrays -datavals_valid = zeros(1,mp.Nsamples_avalon); -datavals_channel = zeros(1,mp.Nsamples_avalon); -datavals_error = zeros(1,mp.Nsamples_avalon); -dataval_index = 1; -for sample_index = 1:mp.test_signal.Nsamples - - % TODO: we should make the number of channels part of mp... - for k=0:min(size(mp.test_signal.data))-1 - datavals_data(dataval_index) = mp.test_signal.data(k+1, sample_index); - datavals_valid(dataval_index) = 1; % data is valid in this time bin - datavals_channel(dataval_index) = k; - datavals_error(dataval_index) = 0; % no error - dataval_index = dataval_index + 1; - end - - %--------------------------------------------- - % fill in the invalid data slots with zeros - %--------------------------------------------- - for k=1:(mp.rate_change-min(size(mp.test_signal.data))) - datavals_data(dataval_index) = 0; % no data (put in zeros) - datavals_valid(dataval_index) = 0; % data is not valid in these time bins - datavals_channel(dataval_index) = min(size(mp.test_signal.data)) - 1; - datavals_error(dataval_index) = 0; % no error - dataval_index = dataval_index + 1; - end -end - -%% Convert to time series objects that can be read from "From Workspace" blocks -Ndatavals = length(datavals_data); % get number of data points -timevals = [0 1:(Ndatavals-1)]*mp.Ts_system; % get associated times assuming system clock -mp.Avalon_Source_Data = timeseries(datavals_data,timevals); -mp.Avalon_Source_Valid = timeseries(datavals_valid,timevals); -mp.Avalon_Source_Channel = timeseries(datavals_channel,timevals); -mp.Avalon_Source_Error = timeseries(datavals_error,timevals); - diff --git a/models/delay_and_sum_beamformer/sm_init_control_signals.m b/models/delay_and_sum_beamformer/sm_init_control_signals.m deleted file mode 100644 index ba3c2bf5..00000000 --- a/models/delay_and_sum_beamformer/sm_init_control_signals.m +++ /dev/null @@ -1,67 +0,0 @@ -function mp = sm_init_control_signals(mp) -% mp = sm_init_control_signals(mp) -% -% Matlab function that creates and initializes the control signals. -% The min/max values the control signals are expected to take need to be -% defined. -% -% Inputs: -% mp, which is the model data structure that holds the model parameters -% -% Outputs: -% mp, the model data structure that now contains the registers in the -% field mp.register(i), indexed by i, which has the following fields: -% mp.register(i).name - The register name -% mp.register(i).value - The value the control register is currently set to -% mp.register(i).min - The minimum value the control signal will ever take -% mp.register(i).max - The maximum value the control signal will ever take -% mp.register(i).timeseries - The timeseries data format that is needed for the from workspace block -% -% Copyright 2019 Audio Logic -% -% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -% INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -% PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -% FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -% ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -% -% Ross K. Snider -% Audio Logic -% 985 Technology Blvd -% Bozeman, MT 59718 -% openspeech@flatearthinc.com - - -%% Create left gain control signal -ri = 1; -mp.register(ri).name = 'azimuth'; % control signal name -mp.register(ri).value = 34; % value control signal will take during simulation -mp.register(ri).min = 90; % The minimum value the control signal will ever take -mp.register(ri).max = -90; % The maximum value the control signal will ever take -mp.register(ri).default = 0; % default (initial) value -mp.register(ri).widget_type = 'slider'; -mp.register(ri).widget_display_units = 'degrees'; -mp.register(ri).dataType = fixdt(1, 16, 8); - -%% Create right gain control signal -ri = ri + 1; -mp.register(ri).name = 'elevation'; % control signal name -mp.register(ri).value = -55; % value control signal will take during simulation -mp.register(ri).min = 90; % The minimum value the control signal will ever take -mp.register(ri).max = -90; % The maximum value the control signal will ever take -mp.register(ri).default = 0; % default (initial) value -mp.register(ri).widget_type = 'slider'; -mp.register(ri).widget_display_units = 'degrees'; -mp.register(ri).dataType = fixdt(1, 16, 8); - -% Any other register control signals should be created in a similar manner - - -%% convert to time series data -for i=1:length(mp.register) - mp.register(i).timeseries = timeseries(mp.register(i).value,0); % timeseries(datavals,timevals); % A timeseries data format is needed for the from workspace block -end - -%% Check if the control signals have valid entries -sm_check_control_signals(mp) - diff --git a/models/delay_and_sum_beamformer/sm_init_test_signals.m b/models/delay_and_sum_beamformer/sm_init_test_signals.m deleted file mode 100644 index f12e6164..00000000 --- a/models/delay_and_sum_beamformer/sm_init_test_signals.m +++ /dev/null @@ -1,107 +0,0 @@ -% mp = sm_init_test_signals(mp) -% -% This function creates and initializes the test signals that are used -% in the model simulation. -% -% Inputs: -% mp, which is the model data structure that holds the model parameters -% -% Outputs: -% mp, the model data structure that now contains the test signals in the -% field mp.test_signal, which has the following fields: -% mp.test_signal.duration - length of test signals in seconds -% mp.test_signal.Nsamples - number of samples in test signals -% mp.test_signal.left - signal for left channel -% mp.test_signal.right - signal for right channel -% -% Copyright 2019 Audio Logic -% -% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -% INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -% PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -% FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -% ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -% -% Ross K. Snider -% Audio Logic -% 985 Technology Blvd -% Bozeman, MT 59718 -% openspeech@flatearthinc.com - -function mp = sm_init_test_signals(mp) - -signal_option = 1; % set which test signal to use - -switch signal_option - case 1 % Simple tones - mp.test_signal.duration = 5; % duration of tone in seconds - Nsamples = round(mp.test_signal.duration*mp.Fs); - if mp.fastsim_flag == 1 % perform fast simulation by reducing the number of samples - mp.test_signal.Nsamples = min(Nsamples, mp.fastsim_Nsamples); - else - mp.test_signal.Nsamples = mp.fastsim_Nsamples; - end - sample_times = [0 1:(mp.test_signal.Nsamples-1)]*mp.Ts; - mp.test_signal.data = repmat(cos(2*pi*1000*sample_times), ... - mp.arraySize(1)*mp.arraySize(2), 1); - case 2 % speech - [y,Fs] = audioread('SpeechDFT-16-8-mono-5secs.wav'); % speech sample found in the Matlab Audio Toolbox - y_resampled = resample(y,mp.Fs,Fs)'; % resample to change the sample rate to SG.Fs - Nsamples = length(y_resampled); - if mp.fastsim_flag == 1 % perform fast simulation by reducing the number of samples - mp.test_signal.Nsamples = min(Nsamples, mp.fastsim_Nsamples); - else - mp.test_signal.Nsamples = mp.fastsim_Nsamples; - end - mp.test_signal.data = repmat(y_resampled(1:mp.test_signal.Nsamples), ... - mp.arraySize(1) * mp.arraySize(2), 1); - mp.test_signal.Nsamples = length(mp.test_signal.data); - mp.test_signal.duration = mp.test_signal.Nsamples * mp.Ts; - case 3 % square wave - mp.test_signal.duration = 5; % duration of tone in seconds - Nsamples = round(mp.test_signal.duration*mp.Fs); - if mp.fastsim_flag == 1 % perform fast simulation by reducing the number of samples - mp.test_signal.Nsamples = min(Nsamples, mp.fastsim_Nsamples); - else - mp.test_signal.Nsamples = mp.fastsim_Nsamples; - end - sample_times = [0 1:(mp.test_signal.Nsamples-1)]*mp.Ts; - mp.test_signal.data = repmat(square(2*pi*2000*sample_times), ... - mp.arraySize(1)*mp.arraySize(2), 1); - otherwise - error('Please choose a viable option for the test signal (see sm_init_test_signals)') -end - -%% simulate direction of arrival for each channel -% the doa can be set arbitrarily between +/- 90 for both angles. -% if you want the incoming doa to match the look direction of the array, -% the angles here need to match those in the sm_init_control_signals. -% -% to simulate steering angle quantization errors due to fixed point data -% types, use doubles for simulatedAzimuth and simulatedElevation and use -% the computeDelaysDoubles function; otherwise, use computeDelaysFixedPoint -% sfix16_8 types for azimuth and elevation -mp.simulatedAzimuth = 34; -mp.simulatedElevation = -55; - -delays = computeDelays(mp); - -%plot(mp.test_signal.data(1,:)'); hold on; - -% delay the signal at each sensor -% fcolshift is from the fileexchange -% https://www.mathworks.com/matlabcentral/fileexchange/73424-fcolshift-fractional-column-circular-shift -mp.test_signal.data = fcolshift(mp.test_signal.data', double(delays))'; - -%plot(mp.test_signal.data'); -%legend('original', cellstr(['original'; num2str(delays)])) - -%% add uncorrelated noise to each channel -% the beamforming algorithm should increase signal-to-noise ratio. -NOISE_AMPLITUDE = 0.4; -mp.test_signal.data = mp.test_signal.data + NOISE_AMPLITUDE * rand(size(mp.test_signal.data)); - - - - - diff --git a/models/delay_and_sum_beamformer/sm_run_me_first.m b/models/delay_and_sum_beamformer/sm_run_me_first.m deleted file mode 100644 index 5e67dca4..00000000 --- a/models/delay_and_sum_beamformer/sm_run_me_first.m +++ /dev/null @@ -1,139 +0,0 @@ -% Run_me_first -% -% This scripts sets up the computer environment parameters -% (directories, paths, tools, etc) that the model needs. It places these -% parameters in the data structure SG, which is the model name initials. -% This setup is needed for the Matlab HDL Coder to generate VHDL code. - -% Copyright 2019 Audio Logic -% -% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -% INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -% PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -% FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -% ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -% -% Ross K. Snider -% Audio Logic -% 985 Technology Blvd -% Bozeman, MT 59718 -% openspeech@flatearthinc.com - -%% Clear the workspace -clear all % clear all workspace variables -close all % close all open Matlab windows -clc % clear command window - -%% Fast simulation -% Fast simulation reduces the Fs_system clock rate to reduce the number of -% simulated clock cycles between each sample in the Avalon bus signals. -% It also reduces the number of stimulus samples. This allow for faster -% development iterations when developing the simulink model. -mp.fastsim_flag = 1; % perform fast simulation Note: fast simulation will be turned off when generating VHDL code since we need to run at the system clock rate. -mp.fastsim_Fs_system_N = 64; % (typical value 2 or 4) Simulate a much slower system clock than what is specified in sm_callback_init.m - The reduce rate will be a multiple of the sample rate, i.e. mp.Fs_system = mp.Fs*mp.fastsim_Fs_system_N -mp.fastsim_Nsamples = 12000; % set to the string 'all' to use all the samples from the input signal specified in sm_init_test_signals.m - - -%% Model parameters -% Model parameters are placed in a data structure called mp that can be passed to functions -mp.model_name = 'delay_and_sum_beamformer'; -mp.model_abbreviation = 'DSBF'; - -% Device driver version for the Linux device tree. Typically set as the Quartus version -mp.linux_device_name = mp.model_name; -mp.linux_device_version = '18.0'; - -mp.speedOfSound = 343; - -% TODO: it'd sure be nice to have access to mp.Fs right here, but we don't.... -mp.samplingRate = 48e3; -mp.arraySpacing = 25e-3; -mp.arraySize = [4,4]; -arraySize = mp.arraySize; -arraySpacing = mp.arraySpacing; -samplingRate = mp.samplingRate; -speedOfSound = mp.speedOfSound; - -% TODO: document this equation... this is across the entire array, -% but delays are relative to the array center, so delays are +/- maxDelay/2 -mp.maxDelay = sqrt(((mp.arraySize(1) - 1)*mp.arraySpacing).^2 + ((mp.arraySize(2) - 1)*mp.arraySpacing).^2)*mp.samplingRate/mp.speedOfSound; -% buffer size to accomodate max delay; buffer size is a power of 2 - -mp.integerDelayAddrSize = ceil(log2(floor(mp.maxDelay))) + 2; -mp.integerDelayBufferSize = 2^mp.integerDelayAddrSize; -mp.upsampleFactor = 16; -upsampleFactor = mp.upsampleFactor; -% number of required bits is two more than that required to represent upsampleFactor -% because we need to be able to represent +/- upsample factor inclusive -mp.fractionalDelayAddrSize = ceil(log2(floor(mp.upsampleFactor))) + 2; -mp.fractionalDelayBufferSize = 2^mp.fractionalDelayAddrSize; - -% NOTE: these variables can't be in a matlab structure because the Matlab Coder -% doesn't support that... -delayDataTypeSign = 1; -delayDataTypeWordLength = mp.integerDelayAddrSize + mp.fractionalDelayAddrSize; -delayDataTypeFractionLength = mp.fractionalDelayAddrSize; -mp.delayDataTypeSign = 1; -mp.delayDataTypeWordLength = mp.integerDelayAddrSize + mp.fractionalDelayAddrSize; -mp.delayDataTypeFractionLength = mp.fractionalDelayAddrSize; - - -%% CIC interpolation -mp.cicInterpolator = dsp.CICInterpolator('InterpolationFactor', mp.upsampleFactor); -mp.cicInterpolatorCompensator = dsp.CICCompensationInterpolator(mp.cicInterpolator, ... - 'PassbandFrequency', 15e3, 'StopbandFrequency', 23e3, 'SampleRate', samplingRate, ... - 'InterpolationFactor', 1); - - -%% CIC decimation -mp.cicDecimator = dsp.CICDecimator('DecimationFactor', mp.upsampleFactor); -mp.cicDecimatorCompensator = dsp.CICCompensationDecimator(mp.cicDecimator, ... - 'PassbandFrequency', 15e3, 'StopbandFrequency', 23e3, 'SampleRate', samplingRate, ... - 'DecimationFactor', 1); - - -%% Setup the directory paths & tool settings -% TODO: these paths should ideally be contained in a toolbox. the one exception is the model path, which is many cases is the pwd, though it doesn't have to be. -addpath('../../config'); -% if isunix % setup for a Linux platform -% path_setup_linux; -% elseif ispc % setup for a Windows platform -% path_setup_windows; -% end - -% TODO: remove python path and version information. All of the code should be python3 and python2 compatible. If not, we should make it python2/3 compatible if possible. -% mp.python_path = 'F:\Python\Python37\python.exe'; - -% Note: addpath() only sets the paths for the current Matlab session -% addpath(mp.model_path) -% addpath(mp.driver_codegen_path) -% addpath(mp.vhdl_codegen_path) -% addpath(mp.config_path) -% hdlsetuptoolpath('ToolName', 'Altera Quartus II', 'ToolPath', mp.quartus_path); % setup the HDL toochain path that needs to be set before calling HDL workflow process -% eval(['cd ' mp.model_path]) % change the working directory to the model directory - -%% python -% [python_version, python_exe, python_loaded] = pyversion; -% if python_loaded -% disp(['Using Python version ' python_version]) -% else -% pyversion(mp.python_path); % Note: if the version changes from what is already loaded in Matlab, you will need to restart Matlab -% [python_version, python_exe, python_loaded] = pyversion; -% disp(['Setting Python to version ' python_version]) -% end -% add the codegen_path to python's search path -% if count(py.sys.path,mp.vhdl_codegen_path) == 0 -% insert(py.sys.path,int32(0),mp.vhdl_codegen_path); -% end -% if count(py.sys.path,mp.driver_codegen_path) == 0 -% insert(py.sys.path,int32(0),mp.driver_codegen_path); -% end - - -%% Open the model -disp(['Please wait while the Simulink Model: ' mp.model_name ' is being opened.']) -disp(['Note: Before generating VHDL, you will need to run a model simulation.']) -open_system([mp.model_abbreviation]) -% display popup reminder message -helpdlg(sprintf(['NOTE: You will need to first run the Simulation for model ' mp.model_name ' to initialize variables in the Matlab workspace before converting to VHDL.']),'Reminder Message') -mp.sim_prompts = 1; % turn on the simulation prompts/comments (these will be turned off when the HDL conversion process starts). diff --git a/models/delay_and_sum_beamformer/sm_stop_process_output.m b/models/delay_and_sum_beamformer/sm_stop_process_output.m deleted file mode 100644 index b7e30eb7..00000000 --- a/models/delay_and_sum_beamformer/sm_stop_process_output.m +++ /dev/null @@ -1,54 +0,0 @@ -% mp = sm_stop_process_output(mp) -% -% Matlab function that gets the Avalon Streaming output and converts it -% to a vector format that is useful for verification. -% -% Inputs: -% mp, which is the model data structure that holds the model parameters -% -% Outputs: -% mp, the model data structure that now contains the left/right channel -% data, which is in the following format: -% mp.left_data_out - The processed left channel data -% mp.left_time_out - time of left channel data -% mp.right_data_out - The processed right channel data -% mp.right_time_out - time of right channel data -% -% Copyright 2019 Audio Logic -% -% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -% INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -% PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -% FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -% ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -% -% Ross K. Snider -% Audio Logic -% 985 Technology Blvd -% Bozeman, MT 59718 -% openspeech@flatearthinc.com - -function mp = sm_stop_process_output(mp) - -%% Get the Avalon streaming signals from the model -t = mp.Avalon_Sink_Data.Time; % time -d = squeeze(mp.Avalon_Sink_Data.Data); % data Note: the Matlab squeeze() function removes singleton dimensions (i.e. dimensions of length 1) -c = squeeze(mp.Avalon_Sink_Channel.Data); % channel -v = squeeze(mp.Avalon_Sink_Valid.Data); % valid -left_index = 1; -right_index = 1; -for i=1:length(v) - if v(i) == 1 % check if valid, valid is asserted when there is data - if c(i) == 0 % if the channel number is zero, it is left channel data - mp.left_data_out(left_index) = double(d(i)); - mp.left_time_out(left_index) = t(i); - left_index = left_index + 1; - end - if c(i) == 1 % if the channel number is one, it is right channel data - mp.right_data_out(right_index) = double(d(i)); - mp.right_time_out(right_index) = t(i); - right_index = right_index + 1; - end - end -end - diff --git a/models/delay_and_sum_beamformer/sm_stop_verify.m b/models/delay_and_sum_beamformer/sm_stop_verify.m deleted file mode 100644 index f8e643e7..00000000 --- a/models/delay_and_sum_beamformer/sm_stop_verify.m +++ /dev/null @@ -1,53 +0,0 @@ -% mp = sm_stop_verify(mp) -% -% Matlab function that verifies the model output - -% Inputs: -% mp, which is the model data structure that holds the model parameters -% -% Outputs: -% mp, the model data structure that now contains the left/right channel -% data, which is in the following format: -% mp.left_data_out - The processed left channel data -% mp.left_time_out - time of left channel data -% mp.right_data_out - The processed right channel data -% mp.right_time_out - time of right channel data -% -% Copyright 2019 Audio Logic -% -% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -% INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -% PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -% FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -% ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -% -% Ross K. Snider -% Audio Logic -% 985 Technology Blvd -% Bozeman, MT 59718 -% openspeech@flatearthinc.com - -function mp = sm_stop_verify(mp) - -%% Verify that the test data got encoded, passed through the model, and -% decoded correctly. The input (modified by gain) and output values should be identical. - -% play the original input signal -%sound(double(mp.test_signal.data(1,:)), mp.Fs) - -% play the sum without delay compensation -%pause(mp.test_signal.duration); -%sound(sum(double(mp.test_signal.data)), mp.Fs) - -% play the beamformed output signal -%pause(mp.test_signal.duration); -%sound(resample(squeeze(double(mp.Avalon_Sink_Data.Data)), mp.Fs, mp.Fs_system), mp.Fs) - -subplot(2,1,1) -plot(mp.test_signal.data); -title('signal at each sensor') -subplot(2,1,2) -plot(squeeze(mp.Avalon_Sink_Data.Data)) -title('beamformed sigal') - -end diff --git a/models/delay_and_sum_beamformer/verifySim.m b/models/delay_and_sum_beamformer/verifySim.m index edb7906c..d539dbaa 100644 --- a/models/delay_and_sum_beamformer/verifySim.m +++ b/models/delay_and_sum_beamformer/verifySim.m @@ -3,16 +3,11 @@ % Matlab function that verifies the model output % Inputs: -% mp, which is the model data structure that holds the model parameters +% mp % % Outputs: -% mp, the model data structure that now contains the left/right channel -% data, which is in the following format: -% mp.left_data_out - The processed left channel data -% mp.left_time_out - time of left channel data -% mp.right_data_out - The processed right channel data -% mp.right_time_out - time of right channel data -% +% mp + % Copyright 2019 Audio Logic % % THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, @@ -21,30 +16,13 @@ % FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, % ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. % -% Ross K. Snider % Audio Logic % 985 Technology Blvd % Bozeman, MT 59718 % openspeech@flatearthinc.com -%% Verify that the test data got encoded, passed through the model, and -% decoded correctly. The input (modified by gain) and output values should be identical. - close all; -figure(1) -% subplot(2,1,1) -% plot(testSignal.audio(:,1)); hold on -% plot(dataOut.Data(:,1)) -% title('azimuth') -% legend('input', 'output') -% -% subplot(2,1,2) -% plot(testSignal.audio(:,2)); hold on -% plot(dataOut.Data(:,2)) -% title('elevation') -% legend('input', 'output') - subplot(3,1,1) plot(testSignal.audio(:,1)); title('signal at each sensor') From 51c301f7517751c4366aad09b4260e03d9a0b684 Mon Sep 17 00:00:00 2001 From: Trevor Vannoy Date: Fri, 29 Jan 2021 09:45:06 -0700 Subject: [PATCH 3/4] typo fix --- models/delay_and_sum_beamformer/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/delay_and_sum_beamformer/README.md b/models/delay_and_sum_beamformer/README.md index c09fc61d..6d8c7dd1 100644 --- a/models/delay_and_sum_beamformer/README.md +++ b/models/delay_and_sum_beamformer/README.md @@ -1,4 +1,4 @@ -git # Delay and Sum Beamformer +# Delay and Sum Beamformer This model implements a delay and sum beamformer, intended for use with the [Audio Logic Microphone Array](https://fpga-open-speech-tools.github.io/ab_mic_array.html). In audio applications, beamforming is a spatial filtering technique in which an array of microphones is used to "focus" on signals coming from a particular direction. This model was developed using the Frost Autogen Framework, and can be manually deployed to an Audio Research or Audio Blade. To set up Frost Autogen, please review the [Getting Started Guides](https://github.com/fpga-open-speech-tools/docs/tree/master/getting_started). From 82b9f37e00b7565e3652cec75901c652491c55e2 Mon Sep 17 00:00:00 2001 From: Trevor Vannoy Date: Fri, 29 Jan 2021 10:05:49 -0700 Subject: [PATCH 4/4] typo fix --- models/delay_and_sum_beamformer/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/delay_and_sum_beamformer/README.md b/models/delay_and_sum_beamformer/README.md index 6d8c7dd1..fcfeecdc 100644 --- a/models/delay_and_sum_beamformer/README.md +++ b/models/delay_and_sum_beamformer/README.md @@ -11,7 +11,7 @@ The basic idea behind [beamforming](https://en.wikipedia.org/wiki/Beamforming) i ## Usage - `Azimuth`: The horizontal steering angle in degrees (audio coming from this direction is reinforced); this ranges between +/-90 degrees. -- `Elevation`: The vertical steering angle in degrees (audio coming from this direction is reincofreced); this ranges between +/-90 degrees. +- `Elevation`: The vertical steering angle in degrees (audio coming from this direction is reinforced); this ranges between +/-90 degrees. ## Implementation The following block diagram shows a high-level view of the implementation.