3

for ループを使用して音符の配列またはベクトルを作成したいと考えています。すべての音符、A、A#、B、C... などは、前/次の 2^(1/12) の比率です。例えば、ノート A は 440Hz で、A# は 440 * 2^(1/12) Hz = 446.16Hz です。

27.5Hz (A0) から開始して、4186Hz までの各ノート周波数の配列を作成するために 88 回反復するループが必要なので、次のようになります。

f= [27.5 29.14 30.87 ... 4186.01]

これまでのところ、私はこれをよく理解しています:

   f  = [];
for i=1:87,
   %what goes here
   %  f = [27.5 * 2^(i/12)]; ?

end

return;
4

2 に答える 2

4

matlab でこれをループする必要はありません。次のように簡単に実行できます。

f = 27.5 * 2.^((0:87)/12)

答え:

f =

  Columns 1 through 13

         27.5       29.135       30.868       32.703       34.648       36.708       38.891       41.203       43.654       46.249       48.999       51.913           55

  Columns 14 through 26

        58.27       61.735       65.406       69.296       73.416       77.782       82.407       87.307       92.499       97.999       103.83          110       116.54

  Columns 27 through 39

       123.47       130.81       138.59       146.83       155.56       164.81       174.61          185          196       207.65          220       233.08       246.94

  Columns 40 through 52

       261.63       277.18       293.66       311.13       329.63       349.23       369.99          392        415.3          440       466.16       493.88       523.25

  Columns 53 through 65

       554.37       587.33       622.25       659.26       698.46       739.99       783.99       830.61          880       932.33       987.77       1046.5       1108.7

  Columns 66 through 78

       1174.7       1244.5       1318.5       1396.9         1480         1568       1661.2         1760       1864.7       1975.5         2093       2217.5       2349.3

  Columns 79 through 88

         2489         2637       2793.8         2960         3136       3322.4         3520       3729.3       3951.1         4186
于 2013-09-11T23:26:49.433 に答える
2
maxind = 87;
f = zeros(1, maxind); % preallocate, better performance and avoids mlint warnings
for ii=1:maxind
  f(ii) = 27.5 * 2^(ii/12);
end

ループ変数に名前を付けた理由は、組み込み関数の名前iiだからです。iしたがって、それを変数名として使用することは悪い習慣と見なされます。

また、あなたの説明では、88回反復したいと言いましたが、上記のループは1から87までしか反復しません(両方を含みます)。88 回繰り返したい場合は、88 に変更maxindします。

于 2013-09-11T23:25:21.280 に答える