Sei sulla pagina 1di 63

Communications Systems Design with MATLAB

Houman Zarrinkoub, Development Manager Peter Sheridan, Senior Account Manager

2014 The MathWorks, Inc. 1

Visit The MathWorks Web Site

Visit www.mathworks.com/academia

MATLAB Releases

Visit http://www.mathworks.com/products/matlab/whatsnew.html

Learning Resources

Interactive Video Tutorials Students learn the basics outside of the classroom with self-guided tutorials provided by The MathWorks
MATLAB Simulink Signal Processing Control Systems Computational Math

Visit www.mathworks.com/academia/student_center/tutorials

Self-Paced Training

Immediate access (90 days) Learn at your own pace Use features and workflows that are considered best practices Hands-on MATLAB experience Online discussion boards and live trainer chats

Available on demand:

MATLAB Fundamentals - $200.pp MATLAB Programming Techniques $150.pp


5

MATLAB Central

Open exchange for the MATLAB and Simulink user community


662,000 visits per month Upload/download free files including MATLAB code, Simulink models, and documents Rate files, comment, and ask questions Web forum and newsgroup for technical discussions about MATLAB and Simulink Read posts from key MathWorks developers who design and build the products

File Exchange

Newsgroup

Blogs

Visit www.mathworks.com/matlabcentral

MATLAB Central

Visit www.mathworks.com/matlabcentral

Accelerate your career at MathWorks


If you have a strong technical background in software design, web development, control theory, signal processing, or embedded systems, this is the place for you! To launch your career now, apply at: matlab.my/EDGcareer

Student Version

MATLAB Simulink 10 popular add-on products


Control System Toolbox Data Acquisition Toolbox DSP System Toolbox Image Processing Toolbox Instrument Control Toolbox Optimization Toolbox Signal Processing Toolbox Simulink Control Design Statistics Toolbox Symbolic Math Toolbox

Further Information
Contact Information:
Peter Sheridan peter.sheridan@mathworks.com 508-647-7176

Academic Community:
www.mathworks.com/academia

Public Training & E-Learning: (50% EDU Discount)


www.mathworks.com/training

Visit www.mathworks.com/

10

Communications Seminar

Houman Zarrinkoub PhD. Product Manager LTE & Communications Systems houmanz@mathworks.com
2014 The MathWorks, Inc. 11

Agenda

Baseband signal processing


Case study: 802.11n/ac/ad as MIMO-OFDM Systems

Accelerating Communications Simulations


Case study: LTE PDCCH processing

12

Another resource

13

Baseband signal processing

2014 The MathWorks, Inc. 14

What we learn today


Understand MIMO-OFDM systems Examine family of WIFI standards (802.11x) as a MIMO-OFDM system Effects of OFDM on bandwidth flexibility Effects of beamforming on higher performance How to evaluate system performance with presence of interference , large- and small-scale fading, noise Link adaptation with modulation and coding changing based on channel conditions

15

Why look at MIMO-OFDM systems?

16

What does MIMO-OFDM offer?


Broadband Wireless Communications High data rates Flexibility in frequency resource
WiFi standard 802.11n 802.11ac Fc (GHz) {5, 2.4} 5 60 BW (MHz) {20, 40} {20, 40, 80, 160} 2160 Data rate (Mbps) {6.5, 13.5, , 540} {6.5, 13.5, , 6240} {385, , 6756.75}

H(f)

802.11ad

f
17

How does a MIMO-OFDM System work?


Transmitter
Input bits
Channel coding Modulation MIMO

. . ..

Large-scale fading (path-loss ) Small-scale fading (Multipath, Doppler effects) Interference

Channel

Receiver
Output bits
Channel decoding Demodulation MIMO Receiver (Equalizer) Channel estimation

Noise
OFDM receiver


OFDM receiver

18

OFDM
Multicarrier transmission scheme Subdivide wideband channel into multiple narrowband orthogonal sub-channels (subcarriers) Enables Flexible transmission bandwidths (BW) Robust to multipath fading High spectral efficiency Low-complexity implementation Works with MIMO transmission

19

OFDM implementation
Modulated symbols organized in a time-frequency grid Grid is composed of data, pilots and control signals Pilots are pre-determined samples used for channel estimation In frequency, symbols align with subcarriers Subcarriers are multiples of frequency spacing OFDM modulation is essentially an Inverse Fourier Transform (IFFT) plus Cyclic Prefix (CP) insertion: Append last N samples to the beginning CP insertion ensures orthogonality among frames at the receiver
=subcarriers = 2 pilots

+3

1
OFDM symbol = n
/2

=/2

< +

( + ) 1

OFDM modulated symbols


20

MIMO
Class of Multi-antenna techniques
Advantages of MIMO techniques Boosting overall data rates Increasing reliability of communication link Various types of MIMO/SIMO Receive diversity Transmit diversity Beamforming Spatial multiplexing

WiFi standard 802.11n 802.11ac 802.11ad

MIMO

Max. Data rate (Mbps) 540 6240 6756.75

Up to 4 substreams Up to 8 substreams (Optional) Beamforming

21

MIMO implementation
MIMO layer mapping in
Essentially composed of 2 steps

Layer mapping Precoding Splits modulated symbol stream into multiple substreams Transforms (scales) substreams In beamforming provides beamsteering In transmit diversity it creates orthogonal codes In spatial multiplexing, each substream is steered to a different direction Beamforming Transmit diversity

Layer mapping

Precoding

MIMO precoding in

Beamforming

Spatial multiplexing

22

Channel modeling & propagation scenarios (1)

Mobile context (WiMAX or LTE)


Multipath fading

Interfering Base station

pathloss

Signal Base station

pathloss

23

Channel modeling & propagation scenarios (2)

Stationary context (WiFi)


Multipath fading pathloss Signal source pathloss Interference source

24

Challenges in design and evaluation of MIMOOFDM systems


Performance evaluation with realistic channel models Large scale simulations Transceiver system responding to dynamic channel conditions Evaluating the combined effects of

Fading channels

Interfering signals
Non-linearities front-end receivers Phase noise, Frequency offset, Timing mismatch, IQ imbalance Channel estimation & Equalization Antenna arrays & directional propagation Beamforming & beamsteering

25

Demonstration: 802.11n/ac/ad as a MIMO-OFDM system

Step-by-step MATLAB demo


OFDM as the air interface technology of 802.11x Beamforming as a MIMO technique

Easy-to-follow end-to-end simulation Graphical test bench Adjustment of channel characteristics on the fly

26

Baseband demo workflow

27

Version 1: Baseline - Modulation and Coding


Transceiver with modulation, coding, scrambling (No OFDM or MIMO yet) Channel (Interferer + path loss) (No multipath fading yet) Isotropic (non-directional) antennas Antenna configuration (1x1)

Signal Source (S)

Interference Source (I)

28

Version 2: Baseline + OFDM


Introduce OFDM transmission of 802.11x Transceiver with modulation, coding, scrambling & OFDM transmitter & receiver Channel (Interferer + path loss) (No multipath fading yet)

Interference Source (I)

Signal Source (S)

29

Version 3: Baseline + OFDM + Receiver-side beamforming


Introduce Receive-side beamforming Transceiver with modulation, coding, scrambling, OFDM transmitter & receiver & Receive diversity SIMO (receiver beamforming) Channel with Interferer + path loss (No multipath fading yet) Receiver has multiple Antennas (1 to 8)
Interference Source (I)

Signal Source (S)

30

Version 4: Baseline + OFDM + Receiver-side beamforming + Multipath fading


Introduce Receive-side beamforming with Multipath fading Transceiver with modulation, coding, scrambling, OFDM transmitter & receiver & Receive diversity SIMO (receiver beamforming) Channel with Interferer + path loss + fading Receiver has multiple Antennas (1 to 8)
Interference Source (I)

Signal Source (S)

31

Version 5: Baseline + OFDM + Transmit-side beamforming + Multipath fading


Introduce Transmit-side beamforming with Multipath fading Transceiver with modulation, coding, scrambling, MIMO-OFDM transmitter & receiver Channel with Interferer + path loss + fading Transmitter has multiple Antennas (1 to 8)
Interference Source (I)

Signal Source (S)

32

Version 6: Baseline + OFDM + Multiuser Transmit-side beamforming + Multipath fading


Introduce Steered transmission(s) in base station (OFDMA) Transceiver with modulation, coding, scrambling, MIMO-OFDM transmitter & receiver Channel with Interferer + path loss + fading Transmitter has multiple Antennas (1 to 8)
Interference Source (I)

Signal Source (S)

33

Version 7: Baseline + OFDM + MIMO beamforming + Multipath fading


Introduce MIMO beamforming (both Tx-side and Rx-side) Transceiver with modulation, coding, scrambling, MIMO-OFDM transmitter & receiver Channel with Interferer + path loss + fading Transmitter has multiple Antennas (1 to 8)
Interference Source (I)

Signal Source (S)

34

What MathWorks product features did we highlight

Communications System Toolbox


Modulation, Coding, OFDM, MIMO Fading Channels, Visualizations and Measurements

Phased Array System Toolbox


Beamforming, Beam steering

DSP System Toolbox


Mapping User interface parameters into MATLAB parameters instantaneously, Spectral Analysis

MATLAB
Live interactive MATLAB testbenches

(Optionally) Computer Vision System Toolbox


Providing live data feeds of telemetry data as transmitted bit stream

35

What else can MATLAB do to help with communications system modeling

Large scale BER, Block Error Rate, Throughput computations


Parallel Processing Toolbox MATLAB Coder (Genrating C code for design bottlenecks) Synchronization, Phase noise, Frequency offset, Timing mismatch, IQ imbalance

Analysis of link impairments

36

Accelerating Communications System Simulations in MATLAB

2014 The MathWorks, Inc. 37

Why simulation acceleration?

From algorithm exploration to system design


Size and complexity of models increases Time needed for a single simulation increases Number of test cases increases Test cases become larger

Need to reduce
simulation time during design simulation time for large scale testing during prototyping

38

MATLAB is quite fast

Optimized and widely-used libraries


BLAS Basic Linear Algebra Subroutines (multithreaded) LAPACK Linear Algebra Package

JIT (Just In Time) Acceleration


On-the-fly multithreaded code generation for increased speed

Built-in support for vector and matrix operations

39

Application
LTE Physical Downlink Control Channel (PDCCH)

40

Workflow

Start with a baseline algorithm Profile it to introduce a performance yardstick Introduce the following optimizations:
Better MATLAB serial programming techniques Using System objects MATLAB to C code generation (MEX) Parallel Computing GPU-optimized System objects Rapid Accelerator mode of simulation in Simulink

41

Simulation acceleration options in MATLAB

Better MATLAB code

System objects Users Code MATLAB to C

Parallel Computing

GPU processing

42

Profiling MATLAB algorithms

Profiler summarizes MATLAB code execution


total time spent within each function which lines of code use the most processing time

Helps identify algorithm bottlenecks

43

Effective MATLAB programming techniques


Example of pre-allocation
y=[]; for n=1:LEN/Tx G=[u(idx1(n)) u(idx2(n));... -conj(u(idx2(n))) conj(u(idx1(n)))]; y=[y;G]; end y=complex(zeros(LEN,Tx)); y(idx1,1)=u(idx1); y(idx1,2)=u(idx2); y(idx2,1)=-conj(u(idx2)); y(idx2,2)=conj(u(idx1));

Pre-allocation
Initialize an array using its final size Helps avoid dynamically resizing arrays in a loop

Vectorization
Convert code from using scalar loops to using matrix/vector operations Helps MATLAB leverage processor-optimized libraries for vector processing
44

Using System objects of DSP & Communications System Toolboxes


Example of System objects
function s = Alamouti_DecoderS(u,H) %#codegen % STBC Combiner persistent hTDDec if isempty(hTDDec) hTDDec= comm.OSTBCCombiner(... 'NumTransmitAntennas',2,'NumReceiveAntennas',2); end s = step(hTDDec, u, H);

System objects facilitate stream processing Can accelerate simulation because


Decouple declaration from the execution of the algorithms Reduce overhead of parameter handling in the loop Most of them implemented as MATLAB executables (MEX)
45

MATLAB to C code generation


MATLAB Coder

Automatically generate a MEX function Call the generated MEX file within testbench Verify same numerical results Assess the baseline function and the generated MEX function for speed

46

Parallel Simulation Runs

Worker

TOOLBOXES

BLOCKSETS

Worker Worker

Worker

Task 1

Task 2

Task 3

Task 4

Time
>> Demo

Time
47

Summary

matlabpool available workers No modification of algorithm Use parfor loop instead of for loop Parallel computation or simulation leads to further acceleration More cores = more speed

48

Simulation acceleration options in MATLAB

Better MATLAB code

Users Code

System objects

MATLAB to C

Parallel Computing

GPU processing
49

What is a Graphics Processing Unit (GPU)

Originally for graphics acceleration, now also used for scientific calculations Massively parallel array of integer and floating point processors Typically hundreds of processors per card GPU cores complement CPU cores Dedicated high-speed memory

50

Why would you want to use a GPU?


Speed up execution of computationally intensive simulations For example:


Performance: A\b with Double Precision

51

Options for Targeting GPUs

1) Use GPU with MATLAB built-in functions


Greater Control

Ease of Use

2) Execute MATLAB functions elementwise on the GPU

3) Create kernels from existing CUDA code and PTX files

52

Data Transfer between MATLAB and GPU


% Push data from CPU to GPU memory Agpu = gpuArray(A) % Bring results from GPU memory back to CPU B = gather(Bgpu)

53

GPU Processing with Communications System Toolbox

Alternative implementation for many System objects take advantage of GPU processing Use Parallel Computing Toolbox to execute many communications algorithms directly on the GPU Easy-to-use syntax Dramatically accelerate simulations

GPU System objects comm.gpu.TurboDecoder comm.gpu.ViterbiDecoder comm.gpu.LDPCDecoder comm.gpu.PSKDemodulator comm.gpu.AWGNChannel

54

Example: Turbo Coding


Impressive coding gain High computational complexity Bit-error rate performance as a function of number of iterations
= comm.TurboDecoder( NumIterations, numIter,

55

Acceleration with GPU System objects


Version Elapsed time Acceleration

CPU

8 hours

1.0

1 GPU Cluster of 4 GPUs

40 minutes 11 minutes

12.0 43.0

Same numerical results


= ( ( = comm.TurboDecoder comm.gpu.TurboDecoder NumIterations NumIterations, , N N, , = ( ( = comm.AWGNChannel comm.gpu.AWGNChannel

56

Key Operations in Turbo Coding Function


CPU
% Turbo Encoder hTEnc = comm.TurboEncoder('TrellisStructure',poly2trellis(4, [13 15], 13),.. 'InterleaverIndices', intrlvrIndices) % AWG Noise hAWGN = comm.AWGNChannel('NoiseMethod', 'Variance'); % BER measurement hBER = comm.ErrorRate; % Turbo Decoder hTDec = comm.TurboDecoder( 'TrellisStructure',poly2trellis(4, [13 15], 13),... 'InterleaverIndices', intrlvrIndices,'NumIterations', numIter);

GPU Version 1
% Turbo Encoder hTEnc = comm.TurboEncoder('TrellisStructure',poly2trellis(4, [13 15], 13),.. 'InterleaverIndices', intrlvrIndices) % AWG Noise hAWGN = comm.AWGNChannel('NoiseMethod', 'Variance'); % BER measurement hBER = comm.ErrorRate; % Turbo Decoder hTDec = comm.gpu.TurboDecoder( 'TrellisStructure',poly2trellis(4, [13 15], 13),... 'InterleaverIndices', intrlvrIndices,'NumIterations', numIter);

ber = zeros(3,1); %initialize BER output %% Processing loop while ( ber(1) < MaxNumErrs && ber(2) < MaxNumBits) data = randn(blkLength, 1)>0.5; % Encode random data bits yEnc = step(hTEnc, data); %Modulate, Add noise to real bipolar data modout = 1-2*yEnc; rData = step(hAWGN, modout); % Convert to log-likelihood ratios for decoding llrData = (-2/noiseVar).*rData; % Turbo Decode decData = step(hTDec, llrData); % Calculate errors ber = step(hBER, data, decData); end

ber = zeros(3,1); %initialize BER output %% Processing loop while ( ber(1) < MaxNumErrs && ber(2) < MaxNumBits) data = randn(blkLength, 1)>0.5; % Encode random data bits yEnc = step(hTEnc, data); %Modulate, Add noise to real bipolar data modout = 1-2*yEnc; rData = step(hAWGN, modout); % Convert to log-likelihood ratios for decoding llrData = (-2/noiseVar).*rData; % Turbo Decode decData = step(hTDec, llrData); % Calculate errors ber = step(hBER, data, decData); end

57

Profile results in Turbo Coding Function


CPU
% Turbo Encoder <0.01 hTEnc = comm.TurboEncoder('TrellisStructure',poly2trellis(4, [13 15], 13),.. 'InterleaverIndices', intrlvrIndices) % AWG Noise <0.01 hAWGN = comm.AWGNChannel('NoiseMethod', 'Variance'); % BER measurement <0.01 hBER = comm.ErrorRate; % Turbo Decoder <0.01 hTDec = comm.TurboDecoder( 'TrellisStructure',poly2trellis(4, [13 15], 13),... 'InterleaverIndices', intrlvrIndices,'NumIterations', numIter);

GPU Version 1
% Turbo Encoder <0.01 hTEnc = comm.TurboEncoder('TrellisStructure',poly2trellis(4, [13 15], 13),.. 'InterleaverIndices', intrlvrIndices) % AWG Noise <0.01 hAWGN = comm.AWGNChannel('NoiseMethod', 'Variance'); % BER measurement <0.01 hBER = comm.ErrorRate; % Turbo Decoder 0.02 hTDec = comm.gpu.TurboDecoder( 'TrellisStructure',poly2trellis(4, [13 15], 13),... 'InterleaverIndices', intrlvrIndices,'NumIterations', numIter);

<0.01 ber = zeros(3,1); %initialize BER output %% Processing loop while ( ber(1) < MaxNumErrs && ber(2) < MaxNumBits) 0.30 data = randn(blkLength, 1)>0.5; % Encode random data bits 2.33 yEnc = step(hTEnc, data); %Modulate, Add noise to real bipolar data 0.05 modout = 1-2*yEnc; 1.50 rData = step(hAWGN, modout); % Convert to log-likelihood ratios for decoding 0.03 llrData = (-2/noiseVar).*rData; % Turbo Decode 330.54 decData = step(hTDec, llrData); % Calculate errors 0.17 ber = step(hBER, data, decData); end

<0.01 ber = zeros(3,1); %initialize BER output %% Processing loop while ( ber(1) < MaxNumErrs && ber(2) < MaxNumBits) 0.28 data = randn(blkLength, 1)>0.5; % Encode random data bits 2.38 yEnc = step(hTEnc, data); %Modulate, Add noise to real bipolar data 0.05 modout = 1-2*yEnc; 1.45 rData = step(hAWGN, modout); % Convert to log-likelihood ratios for decoding 0.04 llrData = (-2/noiseVar).*rData; % Turbo Decode 98.18 decData = step(hTDec, llrData); % Calculate errors 0.17 ber = step(hBER, data, decData); end

58

Key Operations in Turbo Coding Function


CPU
% Turbo Encoder hTEnc = comm.TurboEncoder('TrellisStructure',poly2trellis(4, [13 15], 13),.. 'InterleaverIndices', intrlvrIndices) % AWG Noise hAWGN = comm.AWGNChannel('NoiseMethod', 'Variance'); % BER measurement hBER = comm.ErrorRate; % Turbo Decoder hTDec = comm.TurboDecoder('TrellisStructure',poly2trellis(4, [13 15], 13),... 'InterleaverIndices', intrlvrIndices,'NumIterations', numIter);

GPU Version 2
% Turbo Encoder hTEnc = comm.TurboEncoder('TrellisStructure',poly2trellis(4, [13 15], 13),.. 'InterleaverIndices', intrlvrIndices) % AWG Noise hAWGN = comm.gpu.AWGNChannel ('NoiseMethod', 'Variance'); % BER measurement hBER = comm.ErrorRate; % Turbo Decoder - setup for Multi-frame or Multi-user processing numFrames = 30; hTDec = comm.gpu.TurboDecoder('TrellisStructure',poly2trellis(4, [13 15], 13),... 'InterleaverIndices', intrlvrIndices,'NumIterations',numIter, NumFrames,numFrames); %% Processing loop while ( ber(1) < MaxNumErrs && ber(2) < MaxNumBits) data = randn(numFrames*blkLength, 1)>0.5; % Encode random data bits yEnc = gpuArray(multiframeStep(hTEnc, data, numFrames)); %Modulate, Add noise to real bipolar data modout = 1-2*yEnc; rData = step(hAWGN, modout); % Convert to log-likelihood ratios for decoding llrData = (-2/noiseVar).*rData; % Turbo Decode decData = step(hTDec, llrData); % Calculate errors ber=step(hBER, data, gather(decData)); end

%% Processing loop while ( ber(1) < MaxNumErrs && ber(2) < MaxNumBits) data = randn(blkLength, 1)>0.5; % Encode random data bits yEnc = step(hTEnc, data); %Modulate, Add noise to real bipolar data modout = 1-2*yEnc; rData = step(hAWGN, modout); % Convert to log-likelihood ratios for decoding llrData = (-2/noiseVar).*rData; % Turbo Decode decData = step(hTDec, llrData); % Calculate errors ber = step(hBER, data, decData); end

59

Profile results in Turbo Coding Function


CPU
% Turbo Encoder <0.01 hTEnc = comm.TurboEncoder('TrellisStructure',poly2trellis(4, [13 15], 13),.. 'InterleaverIndices', intrlvrIndices) % AWG Noise <0.01 hAWGN = comm.AWGNChannel('NoiseMethod', 'Variance'); % BER measurement <0.01 hBER = comm.ErrorRate; % Turbo Decoder <0.01 hTDec = comm.TurboDecoder( 'TrellisStructure',poly2trellis(4, [13 15], 13),... 'InterleaverIndices', intrlvrIndices,'NumIterations', numIter);

GPU Version 2
% Turbo Encoder <0.01 hTEnc = comm.TurboEncoder('TrellisStructure',poly2trellis(4, [13 15], 13),.. 'InterleaverIndices', intrlvrIndices) % AWG Noise 0.03 hAWGN = comm.gpu.AWGNChannel ('NoiseMethod', 'Variance'); % BER measurement <0.01 hBER = comm.ErrorRate; % Turbo Decoder - setup for Multi-frame or Multi-user processing 0.01 numFrames = 30; 0.01 hTDec = comm.gpu.TurboDecoder('TrellisStructure', poly2trellis(4, [13 15], 13),'InterleaverIndices', intrlvrIndices, 'NumIterations',numIter, NumFrames,numFrames); %% Processing loop while ( ber(1) < MaxNumErrs && ber(2) < MaxNumBits) 0.22 data = randn(numFrames*blkLength, 1)>0.5; % Encode random data bits 2.45 yEnc = gpuArray(multiframeStep(hTEnc, data, numFrames)); %Modulate, Add noise to real bipolar data 0.02 modout = 1-2*yEnc; 0.31 rData = step(hAWGN, modout); % Convert to log-likelihood ratios for decoding 0.01 llrData = (-2/noiseVar).*rData; % Turbo Decode 20.89 decData = step(hTDec, llrData); % Calculate errors 0.09 ber=step(hBER, data, gather(decData)); end

%% Processing loop while ( ber(1) < MaxNumErrs && ber(2) < MaxNumBits) 0.30 data = randn(blkLength, 1)>0.5; % Encode random data bits 2.33 yEnc = step(hTEnc, data); %Modulate, Add noise to real bipolar data 0.05 modout = 1-2*yEnc; 1.50 rData = step(hAWGN, modout); % Convert to log-likelihood ratios for decoding 0.03 llrData = (-2/noiseVar).*rData; % Turbo Decode 330.54 decData = step(hTDec, llrData); % Calculate errors 0.17 ber = step(hBER, data, decData); end

60

Things to note when targeting GPU

Minimize data transfer between CPU and GPU. Using GPU only makes sense if data size is large. Some functions in MATLAB are optimized and can be faster than the GPU equivalent (eg. FFT). Use arrayfun to explicitly specify elementwise operations.

61

Summary
Acceleration methodologies in MATLAB & Simulink 1. Best Practices in Programming Vectorization & pre-allocation Environment tools. (i.e. Profiler, Code Analyzer) 2. Better Algorithms Ideal environment for algorithm exploration Rich set of functionality (e.g. System objects) Technology / Product
MATLAB, Toolboxes, System Toolboxes

MATLAB, Toolboxes, System Toolboxes

3. More Processors or Cores Parallel Computing High level parallel constructs (e.g. parfor, matlabpool) Toolbox, MATLAB Distributed Utilize cluster, clouds, and grids
Computing Server

4. Refactoring the Implementation Compiled code (MEX) GPUs, FPGA-in-the-Loop

MATLAB, MATLAB Coder, Parallel Computing Toolbox

62

Thank You

Q&A

63

Potrebbero piacerti anche