見出し画像

MATLAB R2023b (偏った)アップデートメモ



まえがき

そろそろ秋ですかね。

MATLAB アップデートの季節です。

秋が一番好きなのですが、だんだん短くなってきているようで悲しいです。

MATLAB で気晴らしするしかないですね。(-_☆)

メモ的に、自分に関係ありそうなアップデート部分を列挙しておきます。


Live Editor

-タスク

ライブエディター中のコードを選択して タスク への変換ができるようになりました。

タスクへの変換
変換設定

変換が成功すると、新規ライブスクリプトが開いて挿入されると同時に「マイ タスク」に登録され、タスクメニューから選択、もしくはライブエディター上でタスク名を打てば挿入されて再利用ができます。(カレントフォルダ、もしくはパスが通っている必要があります)


PC2台とも、パスの保存ができない現象が発生しています。
同じPCの R2023a では問題ありません。

パスの設定は $matlabroot\toolbox\local\pathdef.m に書き込まれます。
(通常 C:\Program Files\MATLAB\R2023b\toolbox\local\pathdef.m)

これの所有者が Administrators になっているのが原因のようです。

とりあえず、pathdef.m の読み取り専用属性を外せば書き込めるようになりました。

Windows 側が変わったんですかね?(¬_¬) 

他の対処法があれば教えてください。

2023/09/14 追記
ファイルプロパティ


エディターで "f" を入力
タスク挿入後

詳細は

>> openExample('matlab/CreateLiveEditorTaskFromSelectionExample')

でご参照ください。

-テーブル

挿入 → テーブルで、テキストやイメージを入れ込める テーブル が作成できるようになりました。

「"テーブル" をクリック」と「テーブルアイコンをクリック」の二通りの挿入方法があります。

"テーブル" をクリックして作成
テーブルアイコンをクリックして作成


表示したグラフなども、右クリックメニューで "出力をコピー" してからテーブル内へ画像としてペーストできます。

画像を選択して移動やコピー、一旦エディター上にペーストし、それをテーブル内にドロップして挿入することも可能です。

テーブルを作成してグラフ画像を挿入

テーブル上で右クリックすることにより編集もできます。

テーブルを編集


-カラーピッカー

コントロールに カラーピッカー が追加されました。

カラーピッカー
カラーピッカーで描画済みグラフの色を変更
テーブルに挿入


-フォルダー選択 UI

コントロールのファイルブラウザーで、フォルダー選択が追加されました。
ファイル選択かフォルダー選択かを、右クリック -> コントロールの構成 で設定できます。

ファイルブラウザー
コントロールの構成

当初「ファイル選択 UI が追加」としていましたが、ファイル選択 UI 自体は R2023a からで、「R2023b ではフォルダーも選択可能となった」だったので修正しました。

2023/09/20 追記


-状態ボタン(2023/09/20 追記)

トグルスイッチ UI である状態ボタンが追加されました。

クリックする毎に状態が 0 / 1 に変わります。

状態ボタン(0)
状態ボタン(1)


-セクション実行の独立化(2023/09/20 追記)

ライブエディターではセクション別に実行が可能ですが、これまではどこかにエラーがあると別のセクションも実行できませんでした。R2023b では、他のセクションにエラーあっても実行可能となりました。

セクション別の実行


-変数の自動 rename(2023/09/20 追記)

エディター内(Editor / Live Editor)で変数名を変更したとき、Shift+Enter で他の部分も全て変更することが可能でしたが、R2023b では Alt+Shift+Enter(macOS Option+Shift+Enter)でカーソル以降を変更も選べるようになりました。

変数の自動 rename


-Markdown / Jupyter notebook エクスポート

エクスポートメニューにはないようですが、マークダウン、Jupyter notebook への変換がサポートされました。

export("Lmembrane.mlx","Lmembrane.md")
export("Lmembrane.mlx","Lmembrane.ipynb")

などとすれば、変換ファイルが生成されます。

ライブエディター
VS Code
Carnets(iOS)

もちろん現時点では、このまま実行したらエラーで消えてしまいます。

こちらの進展を待ちましょう!


-HTML エクスポート MP4 変換(2023/09/20 追記)

export 関数でライブスクリプトを HTML に変換するとき、Figure のアニメーションを MP4 に変換して埋め込むことができるようになりました。

export('file.mlx','file.html',GenerateFigureAnimationVideo=true,FigureAnimationVideoFormat="MPEG-4",Run=true)
MP4 埋め込み


その他標準機能

-dictionary 初期化(2023/09/20 追記)

型だけ指定した空の dictionary を作成するには

>> d = dictionary(string([]),[])

d =

  エントリのない dictionary (stringdouble)。

などとする必要がありましたが、新たに configureDictionary 関数が追加され、指定しやすくなりました。

>> d = configureDictionary("string","double")

d =

  エントリのない dictionary (string ⟼ double)。


-軸のリニア/ログ切替え(2023/09/20 追記)

描画後に軸のリニア/ログ切替えをするには

ax = gca;
ax.XScale = "log";

とする必要がありましたが、新たに xscale / yscale / zscale が追加されました。

xscale("linear")
xscale("log")
リニアスケールで plot
plot 後にログスケールに変更


-第2ラベル(2023/09/20 追記)

第2ラベル用関数 xsecondarylabel / ysecondarylabel / zsecondarylabel が追加されました。

xsecondarylabel("(" + date + ")");
xlabel("Time");
第2ラベル

Visible プロパティで表示の ON/OFF ができます

xsecondarylabel(Visible="off")


-string 型ベクター bar ラベル(2023/09/20 追記)

bar のラベルを string 型ベクターで指定できるようになりました。

bar("d" + string(1:10),rand(10,1))
string型ベクター bar ラベル


-円・ドーナッツグラフ(2023/09/25 追記)

元々あった pie を高機能にした piechart / donutchart 関数が追加されました。

マウスオーバーで表示が変わるインタラクティブな関数になっています。

piechart


カテゴリカル変数も使えます。

例として、単語頻度をグラフにしてみます。
まずは bar で出してみましょう。

clear
close all

str = "You say yes, I say no, You say stop and I say go go go.";

% split words
pat = " " | "," | "." | "and";
words = split(str,pat);
words = lower(words);
words(words == "") = []

[w,~,idx] = unique(words);
hNum = histcounts(idx,numel(w));
[hNumSorted,idx2] = sort(hNum,'descend');
wSorted = w(idx2)
bar(wSorted,hNumSorted)
bar 表示

カテゴリカル変数を作って piechart で出してみます。

w2 = categorical(words);
rank2 = reordercats(w2,wSorted)
p = piechart(rank2);
デフォルト表示

標準では自動的にパーセンテージが計算され、ラベルに表示されます。
ラベルを頻度に変更してみましょう。

p.Labels = p.Names + " (" + string(hNumSorted) + ")";
頻度表示

複数行ラベルにしてみます。

p.Labels = p.Names + "\newline" +  " (" + string(hNumSorted) + ")";
複数行ラベル

一部を強調することもできます。

p.ExplodedWedges = 1;
強調表示

強調部分の指定方法は何種類かありますが、カテゴリカル変数の場合はカテゴリでの指定も可能です。

p.ExplodedWedges = ["yes" "no"];
カテゴリで強調指定

カラーマップは、colororder() で以下の7種類から選べます。
 gem (default), glow, sail, reef, meadow, dye, and earth

ドロップダウンリストでの選択例(ライブエディター)

colororder は同一 figure 上の全てに影響してしまうため、複数グラフを出して色を変えたい場合は、グラフィックオブジェクトで個々の ColorOrder プロパティを指定することになるかと思います。

figure("Visible","on")
tiledlayout(2,4)

colMaps = {"gem", "glow", "sail", "reef", "meadow", "dye", "earth"};
pObj = gobjects(length(colMaps));
for k=1:length(colMaps)
    nexttile
    pObj(k) = piechart(rank2);
    pObj(k).ColorOrder = orderedcolors(colMaps{k});
    title(colMaps{k})
end


colororder

任意の場所の色を変えたい場合は、以下のようにします。

p.ColorOrder(1,:) = [1 0 0];
ColorOrder プロパティでの色変更

ここで指定する色は最初の GIF にあるようにマウスオーバーした直後の色で、通常時は FaceAlpha で指定する透明度(デフォルト 0.6)が掛かっています。

piechart の title に関しては、今のところプロパティ指定ができないようです。


donutchart も同機能です。多分中身は同じでしょう。

donutchart(rank2,ExplodedWedges = "go");
donutchart

InnerRadius = 0; とすれば円グラフになります。


-xregion / yregion(2023/09/25 追記)

Inf / -Inf 指定が可能となりました。

figure
plot(rand(10,2))
ylim([0 1])
xregion(2,4,'FaceColor','b',FaceAlpha=0.1)
xregion([3 6],[5 7],'FaceColor','r',FaceAlpha=0.2)
yregion(0.6,0.8,'FaceColor','g',FaceAlpha=0.2)
xregion(9,8,FaceColor='#ff8000')
xregion / yregion
xregion([-inf 9; 2 inf],'FaceColor','r',FaceAlpha=0.1)
Inf / -Inf 指定


-text オブジェクト(2023/09/25 追記)

オートスケーリングに含める指定が可能になりました。

x = 0:0.1:10;
y = sin(x);
plot(x,y)
text(1.1,1.1,"Peak")
デフォルト
text(1.1,1.1,"Peak",AffectAutoLimits="on")
AffectAutoLimits

他のプロパティ同様、描画後でも変更できます。

t = text(1.1,1.1,"Peak");
t.AffectAutoLimits = "on";


App Building

-範囲選択スライダー

範囲指定スライダー が追加されました

f = uifigure;
sld = uislider(f,"range",Value=[20 50]);
範囲指定スライダー


AppDesigner でも使用できます。


コード生成

-コード生成対応追加

毎度のことですが、MATLAB Function 等で使える、コード生成対応関数が増えています。

関数一覧にクエリ付けると検索はできるのですが、Toolbox 毎にサイトが分かれていたり更新されていなかったりするので、リリースノートか、各関数ドキュメントの英語版を見て確認するのが良いでしょう。

例えば Image Processing Toolbox では、dct2 / idct2 等が新たにコード生成対応になっています。


Audio Toolbox

- SOFA ファイル対応

SOFA ファイルとは、HRTF 等空間音響用の共通フォーマットです。
今までは外部 API が必要でしたが、sofaread / sofawrite で直接読み書きできるようになりました。

それに伴い、Audio Toolbox に付属する ARI のサンプル HRTF データも、従来の "ReferenceHRTF.mat" に加え、SOFA形式の "ReferenceHRTF.sofa" が追加されています。

ただし外部 API とは返り値の構造が異なるので注意してください。
以下に一例を示します。

API との返り値構造比較

また、sofaread() で読み込んだ SOFA オブジェクトから interpolateHRTF() で直接 HRTF 補間もできるようになり、簡便化が図られています。

SOFA の詳細に付いては以前の記事をご参照ください。

MATLABでHRTF~頭部伝達関数とは?~聴覚の仕組みは解明されていない~

HRTF を聴き比べ ~ MATLAB の VST 生成機能を利用してスタンドアローンアプリを作る ~ Home ライセンスでもOK


-レベルメーター UI

レベルメーター UI が追加されました

lvlMeter = audioLevelMeter;
visualize(lvlMeter)

reader = dsp.AudioFileReader("FunkyDrums-44p1-stereo-25secs.mp3");
player = audioDeviceWriter(SampleRate=reader.SampleRate);

while ~isDone(reader)
    audioIn = reader();
    lvlMeter(audioIn);
    player(audioIn);
end
レベルメーター UI

まあ、見た目はもうちょっと頑張って欲しいですね。 (¬_¬)

ちなみにこちらは、私が JUCE で作ったレベルメーターです。( ̄ー ̄)

JUCE 版自作レベルメーター


-オーディオ用高精度サンプリング・レート・コンバーター

今まで MATLAB では、HiFi オーディオで使えるような変換前後の聴感上の差がほぼない高精度サンプリングレートコンバート関数は(自分でフィルターを設計しないと)用意されていなかったと思うのですが、やっと audioresample() として実装されたようです。

quality 指定で簡単に使えますし、audioresample() 用カスタム設定関数 designAudioResampler() も新たに用意されています。

演算量削減のマルチステージ化(多分ポリフェーズ化も?)も自動で行われるようです。

性能は未確認ですが、説明を読む限りは使えそうな感じです。

Quality — Resampling quality
"high" (default) | "medium" | "ultra"

Resampling quality, specified as "medium", "high", or "ultra". Higher quality resampling requires more computation.

"medium" — The resampler attenuates spectral aliases and spectral images by 96 dB and preserves about 90% of the bandwidth of interest.

"high" — The resampler attenuates spectral aliases and spectral images by 120 dB and preserves about 94% of the bandwidth of interest.

"ultra" — The resampler attenuates spectral aliases and spectral images by 144 dB and preserves about 98% of the bandwidth of interest.

audioresample


audioTestBench, etc.

-ファイル上書きのオプション化
今まで出力ファイルは上書きだったのがそれがオプションになり、デフォルトで別名保存となったようです。

ファイル出力設定


-MP3 書き込み対応

特許の関係ですかね? 以下の Audio Test Bench、各ファンクションで MP3 ファイル書き込みがサポートされました。

  • dsp.AudioFileWriter System object

  • To Multimedia File Simulink block

  • Audio Test Bench app


-Create an App to Play and Visualize Audio Files

オーディオファイルを読み込んで、波形・レベルメーター表示・再生を行うApp Designer サンプルが追加されました。

>> openExample('audio/AudioPlayerWithMeterAppExample')
オーディオ再生サンプルアプリ


パフォーマンスはあまりよろしくないようですが、こういったアプリ作りの参考にはなるかと思います。


DSP System Toolbox

dsp.BiquadFilter が削除予定になりました。
代替はより高機能な dsp.SOSFilter です。
フィルター係数は sos 形式ではなく(num,den) 形式になります。


インストーラー削除

インストールが終わり正常に立ち上がるのを確認したら、インストーラーと作業用ファイルはもう不要ですので削除しても構いません。

Windows の場合、以下のファイルとディレクトリです。
・matlab_R2023b_win64.exe
・_temp_matlab_R2023b_win64\

ロックされて削除できないようであれば、PC を再起動後に削除してみてください。


あとがき

いつものことながら、ここに書いたのはほんの一部で、アップグレード/パフォーマンス改善点等は膨大な数にのぼります。一度 リリースノート をざっとでも眺めて、自分に関係ありそうなところを掘ってみるとよろしいかと思います。

便利機能を知らずにいるともったいないですからね!
(ちょくちょくある・・)

秋の夜長の読み物としてもオススメです。(u_u)


タイトル画像モデル:結貴
The title image was created using Adobe Generative Fill based on this picture.

Original Image


この記事が気に入ったらサポートをしてみませんか?