画像から黒のパワースペクトルを出したいのですが、

c=normxcorr2(X(:,:,1),Y(:,:,1));

これだと赤のパワースペクトルが出てしまいます。

b=[0 0 0]
c=normxcorr2(X(:,:,'b'),Y(:,:,'b'));

とやっても「インデックスが行列の次元を超えています」と、エラーが出てしまいますし・・・

どうやって指定した色のパワースペクトルが出来るか教えてほしいです。
normxcorr2を使う方法でお願いします。

A 回答 (1件)

質問の意味がいまいち解りません。



1.normxcorr2はパワースペクトルを求める関数ではないです。
 相互相関を求める関数です。

2.スペクトルというのは分光スペクトルの意味ですか?
 でもRGBしかないですし、そうだとしたら意味ないですね。

3.スペクトルというのは画像パターン周波数スペクトルの意味ですか?
 normxcorr2では求まりません。

4.「黒」って何?
 真黒はRBG表現で言うとR=0,G=0,B=0なんで、パワーなんか無いよ?
 グレースケールのことかな?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qナイキスト周波数(間隔) 標本化定理

複数の本やサイトを用いてナイキスト周波数や標本化定理,サンプリング周波数について,学んでいるものです.
しかし混乱しました.

ナイキスト間隔とは,元の信号を再現出来る最高の間隔でこれ以上の間隔でサンプリング(標本化)すると折り返し歪が生じるというような間隔,逆に言うと,これより小さなサンプリング間隔でサンプリングすれば良いと本に書いてありました.

また,ナイキスト間隔の逆数はナイキスト周波数であり,
サンプリング間隔の逆数はサンプリング周波数であるので,
サンプリング周波数はナイキスト周波数より大きければ良い,と書いてあるのですが,ここが分けわかりません.

Example

周期T=2の波をサンプリング間隔Ts=0.5でサンプリングした場合
周期の周波数はf=0.5Hz,サンプリング周波数はfs=2Hz この時,

ナイキスト周波数はfn=1Hz,ナイキスト間隔は Tn=1なのでしょうか?
だとすると,ナイキスト周波数以上でサンプリングすればいいという記述はどういった意味なのでしょうか? 

サンプリング定理によると,(ローパスフィルタなどを用いずに)折り返し歪を防ぐには,
常にナイキスト周波数の2倍以上の周波数が求められるのだから,
サンプリング周波数はナイキスト周波数の2倍以上なら良いと書くべきではないでしょうか?
しかし自分でも感じるのですが,この結論もまた謎です^^;

複数の本やサイトを用いてナイキスト周波数や標本化定理,サンプリング周波数について,学んでいるものです.
しかし混乱しました.

ナイキスト間隔とは,元の信号を再現出来る最高の間隔でこれ以上の間隔でサンプリング(標本化)すると折り返し歪が生じるというような間隔,逆に言うと,これより小さなサンプリング間隔でサンプリングすれば良いと本に書いてありました.

また,ナイキスト間隔の逆数はナイキスト周波数であり,
サンプリング間隔の逆数はサンプリング周波数であるので,
サンプリング周波数はナ...続きを読む

Aベストアンサー

「元の信号」はいろんな周波数の成分を含んでいます。「元の信号」が含む周波数成分のうちで最も高い周波数を持つ成分の周波数(略して「最高周波数」と言ったりしますが)をωとするとき、2ωがナイキスト周波数であり、これが、サンプリングによって「元の信号」の情報を失わない(∴「元の信号を再現できる」)ために必要な最低限のサンプリング周波数である、ということです。

 「元の信号」が周期的かどうかは、ナイキスト周波数の話とは関係ありません。
 「元の信号」が周期的でない場合、あらゆる周波数の成分が含まれうる。一方、「元の信号」が周期Tを持つ場合には、「元の信号」が含む成分の周波数は(n/T) (n=0,1,2,…)に限られ、半端な周波数の成分は含まれない。単にそれだけの違いに過ぎません。

 で、おそらくご質問は、「元の信号」の周期がいくらかという話と、「元の信号」の含まれる最高周波数はいくらか、という話を混同なさっているんでしょう。 
 それは「元の信号」に n=2以上の成分が含まれない(だから「元の信号」は周期Tのサインカーブと直流成分の和である)と仮定したことになります。でも、そんな条件はどこにもないはず。

 まとめますと、ナイキスト周波数は「元の信号」の周期とは全く関係なく、ただ、「元の信号」が含む最高周波数によって決まるんです。
 で、「元の信号」が含む最高周波数はいくらか、というのは、その「元の信号」を作り出した信号源の性質に依る。たとえば、「元の信号」が、ある周波数より高い成分が通過できないようなフィルター(ローパスフィルター)を通して得たものであれば、通過できる最高周波数によってナイキスト周波数が決まる。


 なお、

> (ローパスフィルタなどを用いずに)折り返し歪を防ぐには

とお書きですが、もし「元の信号」にローパスフィルタを作用させていくらかでも信号に変化が生じさせてしまったならば、その後では、もはやどんなに細かくサンプリングしても「元の信号」は再現不可能になります。
 そうじゃなくて、「元の信号」が生じるまでの過程で(例えば、観測している物理現象の特性だとか、センサーの応答特性だとか、レンズのピンぼけだとか、アンプのゲイン特性だとかによって)ある周波数より高い周波数の成分が含まれていない(正確には、ノイズに比べて無視できる程度の振幅しかない)という状況が生じる。それに合わせてサンプリング周波数を設計するんです。

「元の信号」はいろんな周波数の成分を含んでいます。「元の信号」が含む周波数成分のうちで最も高い周波数を持つ成分の周波数(略して「最高周波数」と言ったりしますが)をωとするとき、2ωがナイキスト周波数であり、これが、サンプリングによって「元の信号」の情報を失わない(∴「元の信号を再現できる」)ために必要な最低限のサンプリング周波数である、ということです。

 「元の信号」が周期的かどうかは、ナイキスト周波数の話とは関係ありません。
 「元の信号」が周期的でない場合、あらゆる周波数の...続きを読む

QMATLABからCへ

if(n>1),
nrm = sqrt(sum([A.*conj(A)],2));
else
nrm = abs(A);
end
return

MATLABで次のように与えられたときどのようにしてC言語で書けばよいでしょうか??

Aベストアンサー

行列Aのサイズや具体的な値が書いてあると、回答しやすいと思います。
n=1の場合は
行列Aの各行に対して、(複素数の絶対値の二乗)の総和を計算したもの
n=1以外の場合は
行列Aの各値の複素数の絶対値

だと思います。

Qナイキスト周波数に関して

ナイキスト周波数に関する質問です。

本に
「ナイキスト周波数は、最少標本化周波数である。」
ネットに
「ナイキスト周波数は、サンプリング周波数の1/2である。」
と書かれていました。

どちらも、成り立つのであるなら、
ナイキスト周波数が、原信号の帯域幅の2倍の周波数であるので、
標本化をする際、サンプリング周波数は帯域幅の4倍からしか取れなという事になるのですか?

そんなはずは、ないと思うのですがどのように考えたら良いのでしょうか?

よろしくお願いします。

Aベストアンサー

>「ナイキスト周波数は、最少標本化周波数である。」
これはナイキストレート(Nyquist rate)

>「ナイキスト周波数は、サンプリング周波数の1/2である。」
こちらがナイキスト周波数(Nyquist frequency)

しかし、ナイキスト周波数=ナイキストレートと書いているところもあるそうです。
詳しくは参考URL

参考URL:http://ksng.way-nifty.com/blog/2009/09/post-7973.html

Q画像をFFTした際のスペクトル分布について

現在、森北出版から出版されている「画像処理とパターン認識入門 基礎からVC#/VC++.NETによるプロジェクト作成まで」という本の8章を参考にテクスチャーマッチングに用いるスペクトル分布を求めようとしています。
この本のソースコードをダウンロードし、スペクトル分布を計算してグラフ化すると本に掲載されている通りになります。
私は現在FFTを行うためにMIST(Media Integration Standard Toolkit)というライブラリを利用させていただいています。
このライブラリを用いてFFTを行い、パワースペクトルを画像化すると、本のソースを用いて作成したパワースペクトルの画像と見た目は一致します。

しかし、スペクトル分布はまったく違ったものになります。
本に書かれているしているスペクトル分布は2種類あり、本から引用すると「動径方向分布」と「角度方向分布」です。以降「」内は本からの引用です。
「動径方向分布」は、「中心からr=√k^2+l^2の距離に存在する環状領域内のパワースペクトルの和」のことです。
本ではこのグラフがでこぼこしているのに対して、私が作成したプログラムでは右肩上がりのグラフや右下下がりのグラフになってしまいます。

「角度方向分布」は、「水平軸から角度θの線形領域内のパワースペクトルの和」のことです。
本のグラフではピークが出ているの対して、私が作成したプログラムで出力した値を用いたグラフではピークがでません。

グラフ化にはエクセルを使用しています。
スペクトル分布の計算部分は基本的に本のソースを使用し、ライブラリによって違いが出る点を修正して使用しております。
FFTを行うアルゴリズムは異なると思うのですが、スペクトル分布がアルゴリズムによって異なることはあるのでしょうか?
また、これらの違いの原因にはどのようなことが考えられるでしょうか?
何か気づかれた点などありましたら、よろしくお願い致します。

現在、森北出版から出版されている「画像処理とパターン認識入門 基礎からVC#/VC++.NETによるプロジェクト作成まで」という本の8章を参考にテクスチャーマッチングに用いるスペクトル分布を求めようとしています。
この本のソースコードをダウンロードし、スペクトル分布を計算してグラフ化すると本に掲載されている通りになります。
私は現在FFTを行うためにMIST(Media Integration Standard Toolkit)というライブラリを利用させていただいています。
このライブラリを用いてFFTを行い、パワースペクトルを画...続きを読む

Aベストアンサー

FFT に際して,気をつけることは,
周波数 0 (DC 成分)の位置でしょうか?

普通に FFT とれば,
1次元の場合は,FFT の配列と周波数の関係は,

周波数 0 -> 最高周波数 隣に 負の最高周波数 -> 負の一番低周波数

と並びます.周波数軸をきちんと - から + に取りたいとすると,
FFT の配列の後半,前半 という並べ替えが必要です.

2次元の場合も,FFT の添え字と周波数の対応は,
x 方向と y 方向それぞれに同じです.
よって,FFT の添え字 で
x 小 y 小の部分を A
x 大 y 小の部分を B
x 小 y 大の部分を C
x 大 y 大の部分を D
C D
A B
とすると,これを
B A
D C
と並べ替えると,4角形の中心が周波数 0 になって,
ここを中心にして半径 一定の同心円状のパワーをたせば,
「動径方向分布」が求まります.

Qナイキスト周波数

本やネットでナイキスト周波数という言葉を調べると
「サンプリング周波数の半分」と書かれている場合と「元の波形に含まれる最高周波数の2倍」と書かれている場合がありました。両者は等しくないと思うのですが、どちらが正しいのでしょうか?

Aベストアンサー

えーと 書き方がまずかったですかね。
紛らわしいのは確かですが(昔、自分も悩みました。)式で表せばわかっていただけるかと思います。
数式を敢えて避けていましたが、数式を出していただいて助かります。(私自身理系の癖に数式が苦手なもので、人に説明するときには可能ならば使わないことにしています。余計わかりづらい説明になったりしますが。)

サンプリング周波数fs,原信号の最高周波数fm,ナイキスト周波数fnとします。fn=fmが成立すると仮定しますと、
前者ではfn=fm=fs/2 <- これはがその通りです。
後者ではfn=2fm=fs <- こちらですが少し違いまして実は
2fn=2fm=fs というのが正しい式です。日本語の説明がまずかったようですね。すみません。
両者同じではないか、と思われることでしょう。そうです。同じなんです。以下説明します。
-----------------------------------
まず、fs=2fn または fn=fs/2 というのがナイキスト周波数の「定義」です。これから言えば{前者}は定義を記述しています。

ここで、原信号の「取得し得る周波数fu」をナイキスト周波数を使って表しますと、fu≦fn です。
すなわち fu≦fn=fs/2 となります。つまり「fsでサンプリングすることでfn以下の全ての周波数をデジタル化できるということを意味する」訳です。これが「ナイキスト周波数の(存在する)意味」です。

このナイキスト周波数を利用して、実際のデジタル化を行うとします。
まず、原信号のうち、必要な信号の最大周波数をfmとします。(例えば原信号が音楽だったなら、人間の可聴域で最高である20KHz=fm とします。これ以上は取得したとしても再生時に聞くことが出来ませんから意味がないので。)fmは、対象の原信号が決まった時点で定まりますから定数です。
原信号の「取得しうる周波数fuのうち最大のものfm」をナイキスト周波数で表しますと、fm≦fnでなくてはなりません。この条件を崩すと、高い波長域で取りこぼしてしまいます。(音楽の例なら20KHzに近い周波数は取得できなくなる。)これが条件(a)fm≦fnです。

さらに現実には、不必要に高い周波数を取得しても、結局使えませんから無駄になります。一般に、取得周波数域を高くしようとするとコストがかかりますから、なるべくサンプリング周波数は低く抑えるべきです。すなわち、fsは可能な限り低くする、これが条件(b)です。

並べますと
定義  fn=fs/2 または fs=2fn
条件(a) fm≦fn
条件(b) fsは低いほど望ましい。

これら三つを満たしたfsを求めようとすると定義と(a)から、fs=2fn≧2fmとなるのにお気づきでしょうか。fsはもっと大きくても構わないのです。
それに効率を考え条件(b)「fs:低いほど望ましい」を追加すると、fs=2fn=2fm となる訳です。
これが{後者}にあたります。つまり、{後者}とは、定義である{前者}と違って、原信号からサンプリング周波数を求めようとしたときの視点で表現したナイキスト周波数のこと、なのです。実用上のナイキスト周波数の意味はこちらにあります。

[先にサンプリングしたい原信号の最大周波数(これ以上は取得しなくても良い、捨てて良い周波数)が決まっているのなら後者、「サンプリングするのに必要な最低周波数」となるのです]というのはここから来た説明です。

ややこしいですが、お分かりいただけますでしょうか。
{前者}は、定義:まずサンプリング周波数ありき、
である場合であり、
{後者}は、まず対象の信号があり、現実的なサンプリング周波数を求めたい場合
という視点の違い、なのです。
------------------------
余談ですが、現実のデジタル携帯電話/PHSは20KHzまできっちり取得はしていません。これは有線電話のデジタル回線でも同じことです。聞き取れるのは20KHzであっても、電話で伝えるべきは声であり、人間はそんなに高音の発声はできない、また言葉の内容さえ把握できれば良い、という考えからサンプリング周波数はかなり抑えたものになっています。(実は人間の最大発声周波数よりも下げてあります、そんなオペラみたいなものを電話で伝えるようには考えていないということです。ただし、デジタル配信・録音再生される音楽については通話音声とは別ルートと考えてください。)
ですから条件が良いときには、「昔のアナログ携帯及び、デジタル化される直前の昔アナログ有線電話」が、実は一番高音域まで含まれた「いい音」だったのです。

よく知りませんが、CDないしMDやMP3プレーヤーサウンドでも、効率の関係から、20KHzまできっちり取得していなかったと思います。これは確信は持てませんので良かったら調べてみてください。

以上、長文、乱文お許しくださいますよう。

えーと 書き方がまずかったですかね。
紛らわしいのは確かですが(昔、自分も悩みました。)式で表せばわかっていただけるかと思います。
数式を敢えて避けていましたが、数式を出していただいて助かります。(私自身理系の癖に数式が苦手なもので、人に説明するときには可能ならば使わないことにしています。余計わかりづらい説明になったりしますが。)

サンプリング周波数fs,原信号の最高周波数fm,ナイキスト周波数fnとします。fn=fmが成立すると仮定しますと、
前者ではfn=fm=fs/2 <- これはがその通りで...続きを読む

QMATLAB:多数の画像を取り込み、その平均画像を表示させたい。

 現在、顔画像認証についてMatlabで試行錯誤している者です。
 試作として以下に挙げる簡単なものは自作できたのですが、
データをさらに複数取り込みたいので、このような表記法だと、
後々手書きでは追いつかなくなってしまいます。
また、事象ごとに取り込む数が違うので、このままでは
1回の試行につき、ひとつ作っていかなければなりません。

 質問は、こういったコードをどのようにまとめたらよいのか、です。
for文を使うことまでは理解したのですが、
具体的な書き方がまったく解らないので、ご教授願えないでしょうか。

k1 = imread( 'sample01.bmp' );
k2 = imread( 'sample02.bmp' );
k3 = imread( 'sample03.bmp' );
k4 = imread( 'sample04.bmp' );
k5 = imread( 'sample05.bmp' );
k6 = imread( 'sample06.bmp' );
k7 = imread( 'sample07.bmp' );
k8 = imread( 'sample08.bmp' );
k9 = imread( 'sample09.bmp' );
k10 = imread( 'sample10.bmp' );
colormap(gray(256));
k1 = double(k1);
k2 = double(k2);
k3 = double(k3);
k4 = double(k4);
k5 = double(k5);
k6 = double(k6);
k7 = double(k7);
k8 = double(k8);
k9 = double(k9);
k10 = double(k10);
heikin = (k1+k2+k3+k4+k5+k6+k7+k8+k9+k10)/10;
image(heikin);

 現在、顔画像認証についてMatlabで試行錯誤している者です。
 試作として以下に挙げる簡単なものは自作できたのですが、
データをさらに複数取り込みたいので、このような表記法だと、
後々手書きでは追いつかなくなってしまいます。
また、事象ごとに取り込む数が違うので、このままでは
1回の試行につき、ひとつ作っていかなければなりません。

 質問は、こういったコードをどのようにまとめたらよいのか、です。
for文を使うことまでは理解したのですが、
具体的な書き方がまったく解らないので...続きを読む

Aベストアンサー

画像ファイルが sample01.bmp から sample10.cmp だとすると,
どちらかというと sample1.bmp sample2.bmp の方が楽です.
文字列の連結には,['abc',num2str(1),'.bmp'] なら 'abc1.bmp'
になります.

K1 = imread('sample10.bmp');
colomap(gray);
H = double(K1);
for J=1:9
K1 = imread(['sample0', num2str(J),'.bmp']);
colomap(gray);
H = H + double(K1);
end

H = H/10;

QDFTのナイキスト周波数成分について

はじめまして.
現在,デジタル信号処理について勉強している者ですが
サンプリング定理について手持ちの書籍では
あやふやな記述となっており,
理解に苦しむ箇所があるので質問させていただきます.

偶数のデータ点数を持つ実数信号を離散フーリエ変換したとき,
ちょうどナイキスト周波数成分の
複素フーリエ係数は,必ず実数となります.

変換前の信号がこの周波数成分までしか含まないのであれば
エリアシングは起きていないという認識で間違いないと思うのですが,
このナイキスト周波数成分については,正確な振幅と位相の情報が
失われているように思えてなりません.

この辺の分野に詳しい方,よろしくお願い致します.

Aベストアンサー

離散時間のデータでただしく記録/再現できるのは、「ナイキスト周波数『未満』」の周波数成分だったかと。
たとえば、10kHzのサンプリングで5kHzの正弦波をサンプリングしたときに、データが 0,0,0,..だった場合、
・正弦波の振幅が0だった
・サンプリングがちょうど正弦波のゼロクロスを拾った
の二通りが考えられて、両者の区別はつかないですよね。
(振幅と位相が独立した情報としては記録されていない)

理屈としては、
信号の上限周波数fm、ナイキスト周波数fnとすると、サンプリングされたデータから元の信号を再現するためには、1/(fn-fm)の時間に相当する長さのデータが必要(通過帯域fmでfn以上の成分を充分落とすLPFを作るには、これだけの次数のLPFが必要)でfn=fmの場合には無限長のデータが必要になる、
というのに相当するかと。

Qfortranでフーリエ変換→パワースペクトル算出

プログラミング全くの初心者です

タイトル通り、任意のデータ(100個ほど)による波長をフーリエ変換し、
そのパワースペクトル算出をfortranで行いたいのです。
(横軸時間、縦軸大きさのデータです)

フーリエ変換の理論上の原理、およびパワースペクトル(=虚部の二乗+実部の二乗)
という定義は、教科書から理解できたのですが、
実際に任意のデータに対してフーリエ変換を施す、となると、一体全体何からはじめていいかわからないのです。


そもそもフーリエ変換をしてデータを補間し、100個をさらに分割して増やさなければならないと思うのですが、(違うかもしれませんが)
何をしたらいいのかわからず途方にくれています。

フーリエ係数を求めるのに積分が出てきますが、これもプログラムでどう表現していいのかわかりません

無教養で申し訳ありません。
どうにもこうにも調べ方がわかりませんでしたので質問させていただきます
どなたかヒントをお願いします・・・・・

Aベストアンサー

京大数理研の大浦拓哉先生という方がフーリエ変換の解説とプログラムを書いておられるようです。

http://www.kurims.kyoto-u.ac.jp/~ooura/fftman/index.html
http://www.kurims.kyoto-u.ac.jp/~ooura/fft-j.html
http://www.kurims.kyoto-u.ac.jp/~ooura/index-j.html
(上記リンク先が文字化けするようならエンコーディングをEUCにしてみてください)

参考URL:http://www.kurims.kyoto-u.ac.jp/~ooura/index-j.html

Q自己相関関数とパワースペクトル密度関数、フーリエ変換について。

自己相関関数とパワースペクトル密度関数、フーリエ変換について。
パワースペクトル、パワースペクトル密度と自己相関関数についての質問です。

(tは時間、hは次数、fは周波数として)

ある信号x(t)の自己相関関数r(h)をフーリエ変換すると、その信号のパワースペクトル密度関数p(f)になるとネットにあったのですが、パワースペクトル密度関数p(f)と、信号x(t)をそのままフーリエ変換して得たパワースペクトルX(f)はどう違うんでしょうか。


ちなみに数学的な話というよりはコンピュータ上の処理(離散値)で考えています。

もともとパワースペクトルが『自己相関関数の離散フーリエ変換として定義される』と本にはあったのを読みました。

しかし同じ本の中に、『自己相関関数のフーリエ変換は正しくはピリオドグラムと言い、パワースペクトルとはピリオドグラムの平均値で求められる』とも書いてありました。

パワースペクトルとパワースペクトル密度関数はいったいどう違うのか…?とずっと考えているのですが分かりません。

あと(自己、相互)相関関数と(自己、相互)相関係数にはどのような関係があるのですか。回答よろしくお願いします。

前回1つ回答頂いたんですが解決できなかったのですみません、もう一度お願いします。

自己相関関数とパワースペクトル密度関数、フーリエ変換について。
パワースペクトル、パワースペクトル密度と自己相関関数についての質問です。

(tは時間、hは次数、fは周波数として)

ある信号x(t)の自己相関関数r(h)をフーリエ変換すると、その信号のパワースペクトル密度関数p(f)になるとネットにあったのですが、パワースペクトル密度関数p(f)と、信号x(t)をそのままフーリエ変換して得たパワースペクトルX(f)はどう違うんでしょうか。


ちなみに数学的な話というよりはコンピュータ上の処理...続きを読む

Aベストアンサー

http://www.tsunami.civil.tohoku.ac.jp/hokusai2/class/spec/07auto.pdf
の8ページ、9ページに
パワースペクトルG(ω)
自己相関関数R(ω)
信号のフーリエ変換F(ω)
の関係が書いてあります。

パワースペクトルを求めるのに自己相関関数を使うのは
原信号は-無限大から+無限大まで分布してますが、
自己相関関数は普通は0の周りに局在していますから計算が圧倒的に楽ですね。

上記の定義からわかるように、これらの関数はすべてある確定した原信号に対して定義されています。
ピリオドグラムという考え方は、原信号がいくつかあったときにその平均的な見方をした場合に定義される量です。

確率過程と見なされる原信号があったときに、上記自己相関関数などを原信号の母集団のなかで平均操作したものとお考えください。

相関関数と相関係数の違いですが、特定の値についての相関関数が相関係数だと考えればよいと思います。
たとえば同時刻の信号Xと信号Yの積の平均値などが相互相関係数に該当します。
相関関数を扱っているときには相関係数というものを考える意味はないと
思います。

また、自己相関係数というのは常に1で考える意味がないと思います。

http://www.tsunami.civil.tohoku.ac.jp/hokusai2/class/spec/07auto.pdf
の8ページ、9ページに
パワースペクトルG(ω)
自己相関関数R(ω)
信号のフーリエ変換F(ω)
の関係が書いてあります。

パワースペクトルを求めるのに自己相関関数を使うのは
原信号は-無限大から+無限大まで分布してますが、
自己相関関数は普通は0の周りに局在していますから計算が圧倒的に楽ですね。

上記の定義からわかるように、これらの関数はすべてある確定した原信号に対して定義されています。
ピリオドグラムという...続きを読む

QMatlabで作成したmファイルをC言語に自動変換することは可能ですか?

大学の研究室で使っているmatlabの機能にC言語のソースを自動生成
する機能があると先生に伺ったのですが、
常識的に考えてそんな便利なことができるとは思えません。
実際に下記に示すtoolboxで自分が作ったmファイルからC言語のソースを、ある程度自動生成することは可能でしょうか?

Matlab 2008 b windows-x64版
Matlab 7.7
Simulink 7.2
Image processing toolbox
Signal processing toolbox
Real time workshop



SimulinkとReal time workshopを一度も使ったことが無いので
少し調べて良く判らない点がありました。
Realtimeworkshopでは、Simulinkで生成したブロック線図のみC言語で出
力できるものであり、mファイルからの変換はできないのでしょうか?

Aベストアンサー

RealTimeWorkshopはsimulinkをC言語にするものです。

mファイルをC言語に変換するのは、普通はできません。
数年前までは、Matcom というMatlab→C++の変換アプリであったのですが、会社ごとMathworks本体に買収されてMatlab Compilerという存在意義がよくわからないツールボックス(というかアプリ)になってしまいました。Matcomは昔はフリーでも入手できたのですが、今でも入手できるかどうかは不明です。探せばどっかにあるかも。

で、Mathworksの Matlab Compilerは、mファイルを、exeファイルに変換できます。できたexeを起動するのにMatlabは必要ありません。
ただし、いきなりexeになってしまうので、例えば、mファイルをPC上のmatlabで開発して、それをCに変換して、高速なワークステーション等で計算させたい、という一番よくあると思われる状況には対応できません。


人気Q&Aランキング