{"id":2202,"date":"2017-03-14T16:27:20","date_gmt":"2017-03-14T21:27:20","guid":{"rendered":"https:\/\/blogs.mathworks.com\/loren\/?p=2202"},"modified":"2019-03-18T14:21:27","modified_gmt":"2019-03-18T19:21:27","slug":"introducing-the-signal-analyzer-app","status":"publish","type":"post","link":"https:\/\/blogs.mathworks.com\/loren\/2017\/03\/14\/introducing-the-signal-analyzer-app\/","title":{"rendered":"Introducing the Signal Analyzer App"},"content":{"rendered":"<div class=\"content\"><!--introduction--><p>Today, my guest blogger is Rick Gentile, an engineer in our Signal Processing Product Marketing group. He will introduce a new app which enables you to gain quick insights into your data.<\/p><!--\/introduction--><h3>Contents<\/h3><div><ul><li><a href=\"#5839934a-52cf-4830-a7f2-f0e6dc3006ef\">Introduction<\/a><\/li><li><a href=\"#88f18b89-e62e-40ce-8d60-e3fb84e2bea2\">Getting Started with Signal Analyzer<\/a><\/li><li><a href=\"#ee012772-7b5c-429b-80de-9d91d100e909\">Exploring Your Signals<\/a><\/li><li><a href=\"#70bf0276-8ce0-4ad8-9703-e6d351dbf017\">Extracting Signals of Interest<\/a><\/li><li><a href=\"#94b9794e-9f96-4cdd-b732-5538bf085cce\">Gaining Insight into Your Data<\/a><\/li><li><a href=\"#cc1fc0b1-2cf8-49bd-9c2a-f35de18b94c7\">Finding Signals in Your Data<\/a><\/li><li><a href=\"#0a675737-39a9-4d8a-8633-5425ece2b545\">Results<\/a><\/li><li><a href=\"#bd1c7705-de99-4560-844b-b508849a2d76\">Learn More About Signal Analyzer<\/a><\/li><\/ul><\/div><h4>Introduction<a name=\"5839934a-52cf-4830-a7f2-f0e6dc3006ef\"><\/a><\/h4><p><a href=\"https:\/\/www.mathworks.com\/products\/signal.html\">Signal Processing Toolbox<\/a> has helped MATLAB users generate and work with signals for many years. In our recent releases, we have expanded the ability to analyze and compare signals in the time, frequency, and time-frequency domains. You can now use these capabilities to gain insights into your data, which can help you to develop and validate your algorithms.<\/p><h4>Getting Started with Signal Analyzer<a name=\"88f18b89-e62e-40ce-8d60-e3fb84e2bea2\"><\/a><\/h4><p>Signal Processing Toolbox provides functions and apps to preprocess, explore, and extract features from signals. We recently added <b>Signal Analyzer<\/b> app to the toolbox to make it really simple for you to visualize and compare multiple, time-based signals that live in the MATLAB Workspace. You can gather insight with the app about the nature of your signals in the time and frequency domains simultaneously. You will find this to be very helpful in data analytics and machine learning applications where identifying patterns and trends, extracting features, and developing custom algorithms are key aspects of the workflow.<\/p><p>To demonstrate some of the new capabilities of the app, I have selected data that is easy to visualize and understand. The short example below is based on what may be a familiar data set to you, a blue whale call. The file <tt>bluewhale.au<\/tt> contains audio data from a Pacific blue whale. The file is from the library of animal vocalizations maintained by the <a href=\"http:\/\/www.birds.cornell.edu\/brp\/\">Cornell University Bioacoustics Research Program<\/a>. The time scale in the data is compressed by a factor of 10 to raise the pitch and make the calls more audible.<\/p><p>To start, I read the data into the MATLAB Workspace. Note that you can use the command <tt>sound(x,fs)<\/tt> to listen to the audio. In the code, I start the <b>Signal Analyzer<\/b> app from the <b>APPS<\/b> tab at the top of the MATLAB environment toolstrip. I could have also done this by typing <tt>signalAnalyzer<\/tt> at the MATLAB prompt.<\/p><pre class=\"codeinput\">whaleFile = fullfile(matlabroot,<span class=\"string\">'examples'<\/span>,<span class=\"string\">'matlab'<\/span>,<span class=\"string\">'bluewhale.au'<\/span>);\r\n[x,fs] = audioread(whaleFile);\r\nsignalAnalyzer\r\n<\/pre><h4>Exploring Your Signals<a name=\"ee012772-7b5c-429b-80de-9d91d100e909\"><\/a><\/h4><p>In the picture below, after the app opens, I drag the signal <tt>x<\/tt> directly from the Workspace Browser (lower left section of the app) into the display region.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/images\/loren\/2017\/whale1.gif\" alt=\"\"> <\/p><p>The recorded data includes four signal components of interest. The first is commonly referred to as a \"trill\" and comprises roughly the first 10,000 samples. The next three sounds are referred to as \"moans\".<\/p><p>You see the <b>Signal Analyzer<\/b> app in the picture below with time, spectrum and panner axes enabled. The middle axes show the spectrum of the signal. The bottom axes contain a panner, where you can zoom and navigate into the whale call of interest.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/images\/loren\/2017\/whale2.gif\" alt=\"\"> <\/p><h4>Extracting Signals of Interest<a name=\"70bf0276-8ce0-4ad8-9703-e6d351dbf017\"><\/a><\/h4><p>I then turn on Data Cursors to find where each of the sounds is located in the data. Next, I use this information to extract vectors with the signal segments of interest. The code below extracts these vectors based on the beginning and end of the specific moans. In a data analytics application, this is analogous to exploring a data set and finding a condition of interest in the data stream.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/images\/loren\/2017\/whale3.gif\" alt=\"\"> <\/p><pre class=\"codeinput\">moan1 = x(24396:31087);  <span class=\"comment\">% Extract Signal for Moan 1<\/span>\r\nmoan2 = x(45499:52550);  <span class=\"comment\">% Extract Signal for Moan 2<\/span>\r\nmoan3 = x(65571:72571);  <span class=\"comment\">% Extract Signal for Moan 3<\/span>\r\n<\/pre><h4>Gaining Insight into Your Data<a name=\"94b9794e-9f96-4cdd-b732-5538bf085cce\"><\/a><\/h4><p>You can use Signal Processing Toolbox functions to do a range of operations on the data, including finding changes and outliers, filtering and smoothing, or filling gaps where data is missing. Signal Processing Toolbox also has functions to find signal segments within a larger signal based on similarity measures. Let's look at how you can use this to automate the work that was manually performed above.<\/p><p>The <a href=\"https:\/\/www.mathworks.com\/help\/signal\/ref\/findsignal.html\"><tt>findsignal<\/tt><\/a> function returns the start and stop indices of a segment of the data array, <tt>data<\/tt>, that best matches the search array, <tt>signal<\/tt>. The best-matching segment is such that <tt>dist<\/tt>, the Euclidean distance between the segment and the search array, is smallest. Note that many functions in Signal Processing Toolbox conveniently generate a plot when no output arguments are specified. You will see that in the code below where I repeated some instructions to take advantage of this but you don't need to repeat the lines if only the plot or the outputs are needed.<\/p><p>I start by taking an additional look at the signals of interest in the app. As shown in the picture below, I compare the three whale moans by simply dragging <tt>moan1<\/tt>, <tt>moan2<\/tt>, and <tt>moan3<\/tt> directly into the display region. The three moans are overlaid in the time domain in the top axes. The bottom axes provide the overlaid spectrum of the three occurrences. From this view, the moan spectra of all three occurrences look more similar than their time-domain counterparts. This is an indication that it may be best to find the signals using the frequency content rather than looking through their time-domain representations.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/images\/loren\/2017\/whale4.gif\" alt=\"\"> <\/p><p>With this intuition, I now try to use <tt>findsignal<\/tt> with the <a href=\"https:\/\/www.mathworks.com\/help\/signal\/ref\/spectrogram.html\">spectrogram<\/a> as an input to see if it matches the signal of interest with the spectra of other occurrences. First I look at the spectrogram for the entire signal. The trill and moans are visible in the image.<\/p><pre class=\"codeinput\">spectrogram(x,kaiser(64,3), 60, 256, fs,<span class=\"string\">'yaxis'<\/span>) <span class=\"comment\">% View spectrogram for original signal<\/span>\r\n<\/pre><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/images\/loren\/2017\/SignalAnalyzerIntro_01.png\" alt=\"\"> <h4>Finding Signals in Your Data<a name=\"cc1fc0b1-2cf8-49bd-9c2a-f35de18b94c7\"><\/a><\/h4><p>I now compute the spectrogram of the entire signal and a reference spectrogram based on the first moan and feed these to <tt>findsignal<\/tt> in order to find all call signal occurrences.<\/p><pre class=\"codeinput\">[~,F,T,PxxSignal] = spectrogram(x,kaiser(64,3), 60, 256, fs);\r\n[~,F,T,PxxMoan]   = spectrogram(moan1,kaiser(64,3), 60, 256, fs);\r\n\r\nfindsignal(PxxSignal, PxxMoan, <span class=\"string\">'Normalization'<\/span>,<span class=\"string\">'power'<\/span>,<span class=\"string\">'TimeAlignment'<\/span>,<span class=\"string\">'dtw'<\/span>,<span class=\"string\">'Metric'<\/span>,<span class=\"string\">'symmkl'<\/span>,<span class=\"keyword\">...<\/span>\r\n    <span class=\"string\">'MaxNumSegments'<\/span>,3);\r\n<\/pre><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/images\/loren\/2017\/SignalAnalyzerIntro_02.png\" alt=\"\"> <h4>Results<a name=\"0a675737-39a9-4d8a-8633-5425ece2b545\"><\/a><\/h4><p>You can see that <tt>findsignal<\/tt> did return three matches. The start and stop index for each match is highlighted in the plot. This confirmed the intuition we gained by viewing the data in <b>Signal Analyzer<\/b>. For completeness, I make the same call using output arguments to capture the start and stop index of each match. With this information now in the MATLAB Workspace, it is much easier to automate the signal extraction for larger signals, especially if there are many more signal segments to find. Having these locations generated automatically will save you time as you navigate through your own signals.<\/p><pre class=\"codeinput\">[istart,istop,d] = findsignal(PxxSignal, PxxMoan, <span class=\"string\">'Normalization'<\/span>,<span class=\"string\">'power'<\/span>,<span class=\"string\">'TimeAlignment'<\/span>, <span class=\"keyword\">...<\/span>\r\n    <span class=\"string\">'dtw'<\/span>,<span class=\"string\">'Metric'<\/span>,<span class=\"string\">'symmkl'<\/span>,<span class=\"string\">'MaxNumSegments'<\/span>,3);      <span class=\"comment\">% Obtain start and stop index for each match<\/span>\r\n<\/pre><h4>Learn More About Signal Analyzer<a name=\"bd1c7705-de99-4560-844b-b508849a2d76\"><\/a><\/h4><p>There are many other functions you can use to improve the quality of the data. These functions can all be used in a similar manner, in conjunction with the app, which can provide you with more insights into your data and signal sets.<\/p><p>You can also find more info on the app <a title=\"https:\/\/www.mathworks.com\/help\/signal\/ug\/using-signal-analyzer-app.html\">here<\/a>.<\/p><p>I hope this example has helped you understand how to visualize and compare multiple time-based signals and find interesting features. Can this help in your area of work? Let us know <a href=\"https:\/\/blogs.mathworks.com\/loren\/?p=2202#respond\">here<\/a>.<\/p><script language=\"JavaScript\"> <!-- \r\n    function grabCode_61ec389c8e824aa3b14f50ad39598fa4() {\r\n        \/\/ Remember the title so we can use it in the new page\r\n        title = document.title;\r\n\r\n        \/\/ Break up these strings so that their presence\r\n        \/\/ in the Javascript doesn't mess up the search for\r\n        \/\/ the MATLAB code.\r\n        t1='61ec389c8e824aa3b14f50ad39598fa4 ' + '##### ' + 'SOURCE BEGIN' + ' #####';\r\n        t2='##### ' + 'SOURCE END' + ' #####' + ' 61ec389c8e824aa3b14f50ad39598fa4';\r\n    \r\n        b=document.getElementsByTagName('body')[0];\r\n        i1=b.innerHTML.indexOf(t1)+t1.length;\r\n        i2=b.innerHTML.indexOf(t2);\r\n \r\n        code_string = b.innerHTML.substring(i1, i2);\r\n        code_string = code_string.replace(\/REPLACE_WITH_DASH_DASH\/g,'--');\r\n\r\n        \/\/ Use \/x3C\/g instead of the less-than character to avoid errors \r\n        \/\/ in the XML parser.\r\n        \/\/ Use '\\x26#60;' instead of '<' so that the XML parser\r\n        \/\/ doesn't go ahead and substitute the less-than character. \r\n        code_string = code_string.replace(\/\\x3C\/g, '\\x26#60;');\r\n\r\n        copyright = 'Copyright 2017 The MathWorks, Inc.';\r\n\r\n        w = window.open();\r\n        d = w.document;\r\n        d.write('<pre>\\n');\r\n        d.write(code_string);\r\n\r\n        \/\/ Add copyright line at the bottom if specified.\r\n        if (copyright.length > 0) {\r\n            d.writeln('');\r\n            d.writeln('%%');\r\n            if (copyright.length > 0) {\r\n                d.writeln('% _' + copyright + '_');\r\n            }\r\n        }\r\n\r\n        d.write('<\/pre>\\n');\r\n\r\n        d.title = title + ' (MATLAB code)';\r\n        d.close();\r\n    }   \r\n     --> <\/script><p style=\"text-align: right; font-size: xx-small; font-weight:lighter;   font-style: italic; color: gray\"><br><a href=\"javascript:grabCode_61ec389c8e824aa3b14f50ad39598fa4()\"><span style=\"font-size: x-small;        font-style: italic;\">Get \r\n      the MATLAB code <noscript>(requires JavaScript)<\/noscript><\/span><\/a><br><br>\r\n      Published with MATLAB&reg; R2016b<br><\/p><\/div><!--\r\n61ec389c8e824aa3b14f50ad39598fa4 ##### SOURCE BEGIN #####\r\n%% Introducing the Signal Analyzer App\r\n% Today, my guest blogger is Rick Gentile, an engineer in our Signal\r\n% Processing Product Marketing group. He will introduce a new app which\r\n% enables you to gain quick insights into your data.\r\n%\r\n%% Introduction\r\n% <https:\/\/www.mathworks.com\/products\/signal.html Signal Processing Toolbox> has helped \r\n% MATLAB users generate and work with signals for many years. In our recent releases, \r\n% we have expanded the ability to analyze and compare signals in the time, frequency, \r\n% and time-frequency domains. You can now use these capabilities to gain insights into your data,\r\n% which can help you to develop and validate your algorithms.  \r\n%\r\n%% Getting Started with Signal Analyzer\r\n% Signal Processing Toolbox provides functions and apps to preprocess, explore, \r\n% and extract features from signals. We recently added *Signal Analyzer* app \r\n% to the toolbox to make it really simple for you to visualize and compare multiple, \r\n% time-based signals that live in the MATLAB Workspace. You can gather insight with \r\n% the app about the nature of your signals in the time and frequency domains simultaneously. \r\n% You will find this to be very helpful in data analytics and machine learning applications \r\n% where identifying patterns and trends, extracting features, and developing custom \r\n% algorithms are key aspects of the workflow.\r\n% \r\n% To demonstrate some of the new capabilities of the app, I have selected \r\n% data that is easy to visualize and understand. The short example below is based \r\n% on what may be a familiar data set to you, a blue whale call. The file |bluewhale.au| \r\n% contains audio data from a Pacific blue whale. The file is from the library \r\n% of animal vocalizations maintained by the <http:\/\/www.birds.cornell.edu\/brp\/ \r\n% Cornell University Bioacoustics Research Program>. The time scale in the data is \r\n% compressed by a factor of 10 to raise the pitch and make the calls more audible. \r\n%\r\n% To start, I read the data into the MATLAB Workspace. Note that you can use \r\n% the command |sound(x,fs)| to listen to the audio. In the code, I start the \r\n% *Signal Analyzer* app from the *APPS* tab at the top of the MATLAB environment \r\n% toolstrip. I could have also done this by typing |signalAnalyzer| at the MATLAB prompt.\r\n\r\nwhaleFile = fullfile(matlabroot,'examples','matlab','bluewhale.au');\r\n[x,fs] = audioread(whaleFile);\r\nsignalAnalyzer\r\n%% Exploring Your Signals\r\n%\r\n% In the picture below, after the app opens, I drag the signal |x|  \r\n% directly from the Workspace Browser (lower left section of the app) into the \r\n% display region. \r\n% \r\n% <<whale1.gif>>\r\n% \r\n% The recorded data includes four signal components of interest. The first \r\n% is commonly referred to as a \"trill\" and comprises roughly the first 10,000 \r\n% samples. The next three sounds are referred to as \"moans\".\r\n% \r\n% You see the *Signal Analyzer* app in the picture below with time, spectrum \r\n% and panner axes enabled. The middle axes show the spectrum of the signal. The \r\n% bottom axes contain a panner, where you can zoom and navigate into the whale \r\n% call of interest.\r\n% \r\n% <<whale2.gif>>\r\n% \r\n% \r\n%% Extracting Signals of Interest \r\n% I then turn on Data Cursors to find where each of the sounds is located in \r\n% the data. Next, I use this information to extract vectors with the signal \r\n% segments of interest. The code below extracts these vectors based on the beginning \r\n% and end of the specific moans. In a data analytics application, this is analogous \r\n% to exploring a data set and finding a condition of interest in the data stream.\r\n% \r\n% <<whale3.gif>> \r\n%\r\nmoan1 = x(24396:31087);  % Extract Signal for Moan 1\r\nmoan2 = x(45499:52550);  % Extract Signal for Moan 2\r\nmoan3 = x(65571:72571);  % Extract Signal for Moan 3\r\n\r\n%% Gaining Insight into Your Data\r\n%\r\n% You can use Signal Processing Toolbox functions to do a range of operations \r\n% on the data, including finding changes and outliers, filtering and smoothing, \r\n% or filling gaps where data is missing. Signal Processing Toolbox also has functions \r\n% to find signal segments within a larger signal based on similarity measures. \r\n% Let's look at how you can use this to automate the work that was manually performed \r\n% above. \r\n% \r\n% The <https:\/\/www.mathworks.com\/help\/signal\/ref\/findsignal.html |findsignal|> \r\n% function returns the start and stop indices of a segment of the data array, \r\n% |data|, that best matches the search array, |signal|. The best-matching \r\n% segment is such that |dist|, the Euclidean distance between the segment and \r\n% the search array, is smallest. Note that many functions in Signal Processing \r\n% Toolbox conveniently generate a plot when no output arguments are \r\n% specified. You will see that in the code below where I repeated some instructions \r\n% to take advantage of this but you don't need to repeat the lines if only the \r\n% plot or the outputs are needed.\r\n% \r\n% I start by taking an additional look at the signals of interest in the app. \r\n% As shown in the picture below, I compare the three whale moans by simply dragging \r\n% |moan1|, |moan2|, and |moan3| directly into the display region. The three moans \r\n% are overlaid in the time domain in the top axes. The bottom axes provide the \r\n% overlaid spectrum of the three occurrences. From this view, the moan spectra \r\n% of all three occurrences look more similar than their time-domain counterparts. \r\n% This is an indication that it may be best to find the signals using the frequency \r\n% content rather than looking through their time-domain representations. \r\n% \r\n% \r\n% <<whale4.gif>>\r\n% \r\n% \r\n% With this intuition, I now try to use |findsignal| with the \r\n% <https:\/\/www.mathworks.com\/help\/signal\/ref\/spectrogram.html spectrogram> \r\n% as an input to see if it matches the signal of interest with the spectra of \r\n% other occurrences. First I look at the spectrogram for the entire signal. \r\n% The trill and moans are visible in the image. \r\n\r\n\r\nspectrogram(x,kaiser(64,3), 60, 256, fs,'yaxis') % View spectrogram for original signal\r\n%% Finding Signals in Your Data\r\n% I now compute the spectrogram of the entire signal and a reference spectrogram \r\n% based on the first moan and feed these to |findsignal| in order to find all \r\n% call signal occurrences. \r\n%\r\n\r\n[~,F,T,PxxSignal] = spectrogram(x,kaiser(64,3), 60, 256, fs);        \r\n[~,F,T,PxxMoan]   = spectrogram(moan1,kaiser(64,3), 60, 256, fs);   \r\n\r\nfindsignal(PxxSignal, PxxMoan, 'Normalization','power','TimeAlignment','dtw','Metric','symmkl',...\r\n    'MaxNumSegments',3);\r\n%% Results\r\n% You can see that |findsignal| did return three matches. The start and stop index for each \r\n% match is highlighted in the plot. This confirmed the intuition we gained by viewing the \r\n% data in *Signal Analyzer*. \r\n% For completeness, I make the same call using output arguments to capture \r\n% the start and stop index of each match. With this information now in the MATLAB Workspace, \r\n% it is much easier to automate the signal extraction for larger signals, especially if there are many more signal segments to\r\n% find. Having these locations generated automatically will save you time\r\n% as you navigate through your own signals.\r\n\r\n[istart,istop,d] = findsignal(PxxSignal, PxxMoan, 'Normalization','power','TimeAlignment', ...\r\n    'dtw','Metric','symmkl','MaxNumSegments',3);      % Obtain start and stop index for each match\r\n\r\n%% Learn More About Signal Analyzer\r\n%\r\n% There are many other functions you can use to improve the quality \r\n% of the data. These functions can all be used in a similar manner, in conjunction \r\n% with the app, which can provide you with more insights into your data and signal \r\n% sets. \r\n% \r\n% \r\n% You can also find more info on the app\r\n% <https:\/\/www.mathworks.com\/help\/signal\/ug\/getting-started-with-signal-analyzer-app.html\r\n% here>.\r\n% \r\n% I hope this example has helped you understand how to visualize and\r\n% compare multiple time-based signals and find interesting features. Can\r\n% this help in your area of work? Let us know\r\n% <https:\/\/blogs.mathworks.com\/loren\/?p=2202#respond here>.\r\n\r\n\r\n##### SOURCE END ##### 61ec389c8e824aa3b14f50ad39598fa4\r\n-->","protected":false},"excerpt":{"rendered":"<div class=\"overview-image\"><img decoding=\"async\"  class=\"img-responsive\" src=\"https:\/\/blogs.mathworks.com\/images\/loren\/2017\/SignalAnalyzerIntro_02.png\" onError=\"this.style.display ='none';\" \/><\/div><!--introduction--><p>Today, my guest blogger is Rick Gentile, an engineer in our Signal Processing Product Marketing group. He will introduce a new app which enables you to gain quick insights into your data.... <a class=\"read-more\" href=\"https:\/\/blogs.mathworks.com\/loren\/2017\/03\/14\/introducing-the-signal-analyzer-app\/\">read more >><\/a><\/p>","protected":false},"author":39,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[6,37],"tags":[],"_links":{"self":[{"href":"https:\/\/blogs.mathworks.com\/loren\/wp-json\/wp\/v2\/posts\/2202"}],"collection":[{"href":"https:\/\/blogs.mathworks.com\/loren\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.mathworks.com\/loren\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/loren\/wp-json\/wp\/v2\/users\/39"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/loren\/wp-json\/wp\/v2\/comments?post=2202"}],"version-history":[{"count":4,"href":"https:\/\/blogs.mathworks.com\/loren\/wp-json\/wp\/v2\/posts\/2202\/revisions"}],"predecessor-version":[{"id":3278,"href":"https:\/\/blogs.mathworks.com\/loren\/wp-json\/wp\/v2\/posts\/2202\/revisions\/3278"}],"wp:attachment":[{"href":"https:\/\/blogs.mathworks.com\/loren\/wp-json\/wp\/v2\/media?parent=2202"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/loren\/wp-json\/wp\/v2\/categories?post=2202"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/loren\/wp-json\/wp\/v2\/tags?post=2202"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}