3

私はこのコードを持っています

for (k=0; k<BUFFER_LEN; k++){                

           buffer[k] = sin(2*pi*f/fs*k);          //sine generation

私のループは毎回1ずつインクリメントします-したがって、kは計算ごとに1、2、3、4、5 ....などになります

たとえば、毎回 0.1 ずつループをインクリメントしたいので、正弦計算はより正確になりますか? これを達成する最も簡単な方法は何ですか?そのforループで0.1ずつインクリメントしようとしましたが、プログラムがタイムアウトするため、これが許可されているとは思いません

編集:ここに解決策があります

int i, k;
float z=0.1;

for(i = 0; i < BUFFER_LEN; i++){                         // fill the buffer
       buffer[k] = sin(2*pi*f/fs*z);                     // sine wave value generation
       z = z + 0.1;
       }
4

3 に答える 3

0

素朴な解決策は次のとおりです。

for (double k=0; k<BUFFER_LEN/10; k+=0.1){                

           buffer[10*k] = sin(2*pi*f/fs*k);

しかし、丸め誤差は間違った結果につながる可能性があります。そのため、ループ内で整数演算を使用し、ループ内で 0.1 を乗算する必要があります。

やってはいけないことをメモとして残します。

于 2013-08-11T18:56:44.340 に答える