MATLAB R2023b (偏った)アップデートメモ
まえがき
そろそろ秋ですかね。
MATLAB アップデートの季節です。
秋が一番好きなのですが、だんだん短くなってきているようで悲しいです。
MATLAB で気晴らしするしかないですね。(-_☆)
メモ的に、自分に関係ありそうなアップデート部分を列挙しておきます。
Live Editor
-タスク
ライブエディター中のコードを選択して タスク への変換ができるようになりました。
変換が成功すると、新規ライブスクリプトが開いて挿入されると同時に「マイ タスク」に登録され、タスクメニューから選択、もしくはライブエディター上でタスク名を打てば挿入されて再利用ができます。(カレントフォルダ、もしくはパスが通っている必要があります)
詳細は
>> openExample('matlab/CreateLiveEditorTaskFromSelectionExample')
でご参照ください。
-テーブル
挿入 → テーブルで、テキストやイメージを入れ込める テーブル が作成できるようになりました。
「"テーブル" をクリック」と「テーブルアイコンをクリック」の二通りの挿入方法があります。
表示したグラフなども、右クリックメニューで "出力をコピー" してからテーブル内へ画像としてペーストできます。
画像を選択して移動やコピー、一旦エディター上にペーストし、それをテーブル内にドロップして挿入することも可能です。
テーブル上で右クリックすることにより編集もできます。
-カラーピッカー
コントロールに カラーピッカー が追加されました。
-フォルダー選択 UI
コントロールのファイルブラウザーで、フォルダー選択が追加されました。
ファイル選択かフォルダー選択かを、右クリック -> コントロールの構成 で設定できます。
-状態ボタン(2023/09/20 追記)
トグルスイッチ UI である状態ボタンが追加されました。
クリックする毎に状態が 0 / 1 に変わります。
-セクション実行の独立化(2023/09/20 追記)
ライブエディターではセクション別に実行が可能ですが、これまではどこかにエラーがあると別のセクションも実行できませんでした。R2023b では、他のセクションにエラーあっても実行可能となりました。
-変数の自動 rename(2023/09/20 追記)
エディター内(Editor / Live Editor)で変数名を変更したとき、Shift+Enter で他の部分も全て変更することが可能でしたが、R2023b では Alt+Shift+Enter(macOS Option+Shift+Enter)でカーソル以降を変更も選べるようになりました。
-Markdown / Jupyter notebook エクスポート
エクスポートメニューにはないようですが、マークダウン、Jupyter notebook への変換がサポートされました。
export("Lmembrane.mlx","Lmembrane.md")
export("Lmembrane.mlx","Lmembrane.ipynb")
などとすれば、変換ファイルが生成されます。
もちろん現時点では、このまま実行したらエラーで消えてしまいます。
こちらの進展を待ちましょう!
-HTML エクスポート MP4 変換(2023/09/20 追記)
export 関数でライブスクリプトを HTML に変換するとき、Figure のアニメーションを MP4 に変換して埋め込むことができるようになりました。
export('file.mlx','file.html',GenerateFigureAnimationVideo=true,FigureAnimationVideoFormat="MPEG-4",Run=true)
その他標準機能
-dictionary 初期化(2023/09/20 追記)
型だけ指定した空の dictionary を作成するには
>> d = dictionary(string([]),[])
d =
エントリのない dictionary (string ⟼ double)。
などとする必要がありましたが、新たに configureDictionary 関数が追加され、指定しやすくなりました。
>> d = configureDictionary("string","double")
d =
エントリのない dictionary (string ⟼ double)。
-軸のリニア/ログ切替え(2023/09/20 追記)
描画後に軸のリニア/ログ切替えをするには
ax = gca;
ax.XScale = "log";
とする必要がありましたが、新たに xscale / yscale / zscale が追加されました。
xscale("linear")
xscale("log")
-第2ラベル(2023/09/20 追記)
第2ラベル用関数 xsecondarylabel / ysecondarylabel / zsecondarylabel が追加されました。
xsecondarylabel("(" + date + ")");
xlabel("Time");
Visible プロパティで表示の ON/OFF ができます
xsecondarylabel(Visible="off")
-string 型ベクター bar ラベル(2023/09/20 追記)
bar のラベルを string 型ベクターで指定できるようになりました。
bar("d" + string(1:10),rand(10,1))
-円・ドーナッツグラフ(2023/09/25 追記)
元々あった pie を高機能にした piechart / donutchart 関数が追加されました。
マウスオーバーで表示が変わるインタラクティブな関数になっています。
カテゴリカル変数も使えます。
例として、単語頻度をグラフにしてみます。
まずは 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)
カテゴリカル変数を作って 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
任意の場所の色を変えたい場合は、以下のようにします。
p.ColorOrder(1,:) = [1 0 0];
ここで指定する色は最初の GIF にあるようにマウスオーバーした直後の色で、通常時は FaceAlpha で指定する透明度(デフォルト 0.6)が掛かっています。
piechart の title に関しては、今のところプロパティ指定ができないようです。
donutchart も同機能です。多分中身は同じでしょう。
donutchart(rank2,ExplodedWedges = "go");
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([-inf 9; 2 inf],'FaceColor','r',FaceAlpha=0.1)
-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")
他のプロパティ同様、描画後でも変更できます。
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 とは返り値の構造が異なるので注意してください。
以下に一例を示します。
また、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
まあ、見た目はもうちょっと頑張って欲しいですね。 (¬_¬)
ちなみにこちらは、私が JUCE で作ったレベルメーターです。( ̄ー ̄)
-オーディオ用高精度サンプリング・レート・コンバーター
今まで MATLAB では、HiFi オーディオで使えるような変換前後の聴感上の差がほぼない高精度サンプリングレートコンバート関数は(自分でフィルターを設計しないと)用意されていなかったと思うのですが、やっと audioresample() として実装されたようです。
quality 指定で簡単に使えますし、audioresample() 用カスタム設定関数 designAudioResampler() も新たに用意されています。
演算量削減のマルチステージ化(多分ポリフェーズ化も?)も自動で行われるようです。
性能は未確認ですが、説明を読む限りは使えそうな感じです。
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.