1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

1.5 MATLABプログラムからのレポート自動生成機能

Last updated at Posted at 2020-04-05

目次へのリンク

MATLABによる画像処理・コンピュータービジョン入門目次

概要

MATLABで記述したプログラムから実行結果のレポートを生成(パブリッシュ)することができます。コードを共有する際に便利です。
レポートには実行プログラムやコメント、数式、実行結果の出力やfigureなどを含めることができます。

より直感的にレポートタイプのプログラムを記述する場合はライブスクリプトがおすすめです。

(この投稿もライブスクリプトを使って記述しています)

対応ファイル:I1_05_publish_butter.m

パブリッシュする対象を確認

パブリッシュする対象のMATLABプログラムを確認します。

code
type I1_05_publish_butter.m
output
%% バタワースフィルタの設計とフィルタリング
% 本デモは、雑音を加えた2トーン正弦波に対して、バタワースローパスフィルタを
% かける手順と、グラフの可視化の手順を示します。一般的なデジタルフィルタの
% 伝達関数は以下の表現で表わされます。
% 
% $$ H(z) = \frac{\sum^{N}_{k = 0}b_kZ^{-k}}{1 + \sum^{N}_{k = 1}a_kZ^{-k}} $$  
%% 初期化
clear all, close all, clc

%% フィルタリング対象の信号生成
Fs = 1000;
t = 0:1/Fs:1;                   % 時間ベクトルの定義
sig1 = sin(2*pi*15*t + pi/3);   % 正弦波信号1の生成
sig2 = sin(2*pi*42*t + pi/5);   % 正弦波信号2の生成
noise = randn(size(t));         % 雑音信号の生成
sig = sig1 + sig2 + noise;      % フィルタリング対象信号

%% フィルタ設計と特性の可視化
% フィルタの次数を7次、ナイキスト周波数で正規化されたカットオフ
% 周波数を0.1としたフィルタを設計します。Fs = 1000[Hz]の場合、
% カットオフ周波数は、1000/2 * 0.1 = 50[Hz]となります。
[b,a] = butter(7,0.1); % バタワースフィルタ設計
fvtool(b, a) % フィルタ特性の可視化

%% フィルタリング
out = filter(b,a,sig); % フィルタリング
% 入力信号と出力信号の時間軸波形可視化
subplot(2,1,1), plot(t,sig), grid
title('時間軸波形(フィルタリング前)')
subplot(2,1,2), plot(t,out), grid
title('時間軸波形(フィルタリング後)')

%% スペクトル推定
% ローパスフィルタにより、50[Hz]以下の成分が除去されている様子が
% 確認できます。
figure, periodogram(sig,[],[],Fs)    % 入力信号のスペクトル
title('パワースペクトル密度推定(フィルタリング前)')
figure,periodogram(out,[],[],Fs)    % 出力信号のスペクトル
title('パワースペクトル密度推定(フィルタリング後)')

% Copyright 2014 The MathWorks, Inc.

パブリッシュを実行

MATLABコードを実行し、HTML形式のレポートを生成します。

ワード形式(.doc)、LaTeX形式(.tex)、パワーポイント形式(.ppt)、XML形式(.xml)、PDF形式(.pdf)でも出力することができます。

code
publish("I1_05_publish_butter.m");

生成したHTMLのレポートを確認

MATLAB内蔵のブラウザで生成されたHTMLレポートを確認します。

code
web(fullfile('html','I1_05_publish_butter.html'));

image_0.png

MATLABエディターによるパブリッシュ

MATLABエディター上からパブリッシュを実行することもできます。

code
edit I1_05_publish_butter.m

image_1.png

パブリッシュされたHTMLからコードを取り出し

生成したHTMLコードからコードを取り出すことも可能です。

code
code = grabcode(fullfile('html','I1_05_publish_butter.html'))
output
code = 
    '%% バタワースフィルタの設計とフィルタリング
     % 本デモは、雑音を加えた2トーン正弦波に対して、バタワースローパスフィルタを
     % かける手順と、グラフの可視化の手順を示します。一般的なデジタルフィルタの
     % 伝達関数は以下の表現で表わされます。
     % 
     % $$ H(z) = \frac{\sum^{N}_{k = 0}b_kZ^{-k}}{1 + \sum^{N}_{k = 1}a_kZ^{-k}} $$  
     %% 初期化
     clear all, close all, clc
     
     %% フィルタリング対象の信号生成
     Fs = 1000;
     t = 0:1/Fs:1;                   % 時間ベクトルの定義
     sig1 = sin(2*pi*15*t + pi/3);   % 正弦波信号1の生成
     sig2 = sin(2*pi*42*t + pi/5);   % 正弦波信号2の生成
     noise = randn(size(t));         % 雑音信号の生成
     sig = sig1 + sig2 + noise;      % フィルタリング対象信号
     
     %% フィルタ設計と特性の可視化
     % フィルタの次数を7次、ナイキスト周波数で正規化されたカットオフ
     % 周波数を0.1としたフィルタを設計します。Fs = 1000[Hz]の場合、
     % カットオフ周波数は、1000/2 * 0.1 = 50[Hz]となります。
     [b,a] = butter(7,0.1); % バタワースフィルタ設計
     fvtool(b, a) % フィルタ特性の可視化
     
     %% フィルタリング
     out = filter(b,a,sig); % フィルタリング
     % 入力信号と出力信号の時間軸波形可視化
     subplot(2,1,1), plot(t,sig), grid
     title('時間軸波形(フィルタリング前)')
     subplot(2,1,2), plot(t,out), grid
     title('時間軸波形(フィルタリング後)')
     
     %% スペクトル推定
     % ローパスフィルタにより、50[Hz]以下の成分が除去されている様子が
     % 確認できます。
     figure, periodogram(sig,[],[],Fs)    % 入力信号のスペクトル
     title('パワースペクトル密度推定(フィルタリング前)')
     figure,periodogram(out,[],[],Fs)    % 出力信号のスペクトル
     title('パワースペクトル密度推定(フィルタリング後)')
     
     
     % Copyright 2014 The MathWorks, Inc.
     '

まとめ

MATLABプログラムの自動レポート生成(パブリッシュ)について紹介しました。

コードや実行結果の共有に大変便利な機能です。

参考

謝辞

本記事は @eigs さんのlivescript2markdownを使わせていただいてます。

目次へのリンク

MATLABによる画像処理・コンピュータービジョン入門目次

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?