アプリ版:「スタンプのみでお礼する」機能のリリースについて

ある信号のサンプル遅れ時間の信号を作成する遅延器を作りたいです。
例えば以下のコードがあるとします。
tは時間、dtは刻み幅、tmaxは最大時間です。

int main(void){
double dt,t,tmax
      dt=0.001,tmax=1
for(t=0.0;t<=tmax;t+=dt) {

v=2*cos(2*3.14*60*t);

という正弦波を作成する際、これより1サンプル遅れた信号を作成したいです
v2=2*cos(2*3.14*60*(t-dt))
という新たな関数を定義すればよいとは思いますが、そうではなくてvを遅延器に入力することで1サンプル遅れた信号を作成したいです。つまり遅延器をこのfor文内でどう定義すればいいのかを考えています。
ブロック線図で表すと以下の1/zが欲しいです。
v(k)→| 1/z |→v(k-1)
これ以外にもたとえば微分方程式で得た解を遅延器に入力して解の1サンプル遅れた信号を作成したいので、上のように(t-dt)という設定はできません。詳しい方に少しだけ聞く時間があったので聞いてみたところ、「時間を保持すればいいやん」というアドバイスを頂きましたがどういう風に記述すればいいのかわかりません。
分かる方がいらっしゃったらどうぞご教授お願いいたします。

A 回答 (4件)

ひとつ前の値を保持しておけばいいのなら:



#include <stdlib.h>
#include <stdio.h>
#include <math.h>

int main(void){
double dt = 0.001;
double t;
const double tmax = 1.0;

double cur = 0.0; /* 現在値 */
double old; /* ひとつ前 */

for ( t = 0.0; t <= tmax; t += dt ) {
old = cur; /* 直前の値をoldに */
cur = 2*cos(2*3.14*60*t);
printf("%lf : %lf %lf\n", t, old, cur);
}
return 0;
}
    • good
    • 0

なぜ一足飛びに「配列」が出てきたのは知らんけど, まあいいか. どうせ一般的な話をしようとすると配列のお世話になることだし.



で「配列を使う」と思ったのなら, 実際にそれに基づいてプログラムを作ってみてはいかがでしょうか. もちろん, 例えば
「1サンプル前の値」は配列のどの要素が保持するのか
などを意識する必要はありますが, そこさえきちんとできていればさほど難しくないはずですよ.
    • good
    • 0

「値を覚える」ためには, 何を使えばいいと思いますか?

この回答への補足

配列ですか。。

補足日時:2014/10/24 11:44
    • good
    • 0

「1サンプル前の値」も覚えておけばいい.

この回答への補足

実際に記憶させるにはどのようなコードを使えばよいのでしょうか。。
C初心者なので全く思いつきません。。。
すいません

補足日時:2014/10/23 18:32
    • good
    • 0

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