• 締切済み

信号処理についてです。

1次元内挿処理プログラムを作って、ノイズを時系列として処理波形を確認せよ。という課題が出ています。 参考プログラムを利用しつつ取り組むのですが、今の状況では全然理解できていません。 そもそも”1次元内挿処理”とはなにか?ここからです。 簡単でいいので説明お願いします。 また、 ・時間軸上の内挿処理(ノイズ系列をM倍に延ばし間を滑かに埋める) ・周波数軸上の内挿処理 を説明しなければなりません。 参考プログラムはこちらです↓ #include <stdio.h> #include <stdlib.h> #include <math.h> #define N 1024 main(){ int i; long ns; float x[N],y[N],z[N]; double normrd(); while(1){ printf("\nSeed_Num = "); scanf("%ld",&ns); if(ns==0)break; for(i=0; i<N; i++){ x[i]=normrd(&ns); y[N-1-i]=x[i]; z[i]=x[i]*exp(-i/300.); } setgr2(); pltgr("Normal Randam Number",x,N); pltgr("Normal Randam Number",y,N); pltgr("Normal Randam Number",z,N); } } よろしくお願いします。

noname#157412
noname#157412

みんなの回答

  • ninoue
  • ベストアンサー率52% (1288/2437)
回答No.1

"1次元内挿処理" でサーチしてもこの質問以外は何も見つかりません。 "1次元内挿" としてサーチすると色々見つかります。 結局折れ線近似、テーブルルックアップ等と同じではないでしょうか。 複数の入力値に対して対応する関数値が与えられている。 この入力値の範囲内の任意の値を指定されて、対応する関数値を求めるだけです。

関連するQ&A

  • プログラムについてですが・・・

    今、画像処理の最小二乗法のプログラムを作成しているのですが、どうも上手く出力されません。以下のプログラムが、メインのプログラムでして、余分な #include は気にしないでください。画像の表示自体のプログラムは特に問題はありませんでしたので省きました。このプログラムにどんな問題があるか、わかりません。どなたか教えてください。 お願いします。 #include <math.h> #include <windows.h> #include <commdlg.h> #include <memory.h> #include <dos.h> #include <time.h> #include <wchar.h> #include <stdio.h> #include <iostream.h> #include "../DibFile.h" #include "ImageSDK.h" int n,n4,n5,n6,n7,n8,n9 ; double n10,n11 ; int n0[1000],n1[1000],n2[1000],n3[1000] ; n = 0 ; for(y = 0 ; y < h ; y++){   for(x = 0 ; x < w ; x++){ i = x+y*w ; if( *(buff1+i) == 0x00 ){                n0[n] = x ;                n1[n] = y ;                n2[n] = x*x ;                n3[n] = x*y ;                ++n ; } } } n5 = 0 ; n6 = 0 ; n7 = 0 ; n8 = 0 ; n9 = 0 ; for(n4 = 0 ; n4 < n ; n4++){ n5 += n2[n4] ; n6 += n0[n4] ; ++n7 ; n8 += n3[n4] ; n9 += n1[n4] ; } if((n6*n6-n7*n5) != 0){  n10 = ((n9*n6)-(n7*n8)) / ((n6*n6)-(n7*n5)) ;  n11 = (n8-(n5*n10)) / n6 ; for(x = 0 ; x < w ; x++){   y = (int) (n10*x+n11) ;    if(y < h && y > 0){  *(buff1+(x+y*w)) = 0x80 ;    } }

  • 三次元を二次元に・・・

    ヘッダーファイルの中にXeasyGraphic.hと言うのがあり、立方体を表示させ回転たいのです。 そして、三次元で回転させ、二次元に落とすという方法をしたかったのですが、どうしても、ゆがんでしまいます。どうしたらいいでしょうか? -------ソース------- #include<stdio.h> #include<XeasyGraphics.h> #include<math.h> int main(){ /*立方体の宣言*/ float box_x[8]={10,10,10,-10,10,-10,-10,-10};/*X軸*/ float box_y[8]={10,10,-10,10,-10,10,-10,-10};/*Y軸*/ float box_z[8]={10,-10,10,-10,-10,10,10,-10};/*Z軸*/ /*立方体のキャッシュ*/ float box_x2[360][8],box_y2[360][8],box_z2[360][8]; /*平面に落とした時のキャッシュ*/ float flat_x[360][8],flat_y[360][8]; /*回転用*/ int j,i; float th,x,y,x2,y2; /*回転プログラム*/ for(j=1;j<=360;j++){ for(i=0;i<8;i++){ x=box_x[i]; y=box_y[i]; th=(PAI/180)*j; box_x2[j-1][i]=x*cos(th)-y*sin(th); box_y2[j-1][i]=x*sin(th)+y*cos(th); box_z2[j-1][i]=box_z[i]; } } /*三次元から二次元へ*//*ここが間違えていると思われる*/ for(j=0;j<360;j++){ for(i=0;i<8;i++){ flat_x[j][i]=box_x2[j][i]-box_z2[j][i]; flat_y[j][i]=box_y2[j][i]-box_z2[j][i]; } } /*この後に表示が入る予定*/ getchar(); exit(0); }

  • 関数宣言

    3次元で領域を確保するプログラムをmalloc関数を用いて書きました。しかし、プログラムが長いので関数宣言をしなさいといわれたために、以下のプログラムを書きました。しかし、途中でつまづいてしまい、どのように関数を用いたり、関数を定義すれば良いのか混乱しています。初心者ですが、どうかお願いします。 /*ソース*/ #include<stdio.h> #include<stdlib.h> int main(){ double ***C; f3Malloc(C,.,.); //数値を代入(関数の使い方?) f3Free(C,.,.); } /*3次元配列(返し方?)*/ double*** f3Malloc(C,,){ int i,j,x,y,z; x = 2; y = 3; z = 4; C=(double***)malloc(sizeof(double**)*x*y*z); for(i=0;i<y;i++){ C[i]=(double**)malloc(sizeof(double*)*y*z); for(j=0;j<z;j++){ C[i][j]=(double*)malloc(sizeof(double)*z); } } } /*メモリの解放(返し方?)*/ void f3Free(C,.,.){ int i,j,x,y; x = 2; y = 3; for(i=0;i<x;i++){ for(j=0;j<y;j++){ free(C[i][j]); } free(C[i]); } free(C); }

  • プログラム ファイル処理について

    プログラムの問題が解けなくて困っています。 visual C++ 2010 Express を使用しています。 (1)X,Yの範囲がそれぞれ-200から200の範囲で空間内に立体が書かれる ようにエクセルファイルにデータを入れたいのですが、その処理がうまくいきません。 (2)degreeの意味がわかりません。degree*PI(円周率)/180でradianなのですか? よろしくお願いします。 今、2次元平面上の座標値(x,y)に対し、(x2+y2)0.5を角度(degree) とした場合に、 下記の式によって定義されるポテンシャル値zの分布を考える z=30×(cos(√(x2+y2))+cos((3×√(x2+y2))) xとyの範囲を(-200<X<200)、(-200<Y<200)と設定してXとYの値を10ごとに増加させた場合のZの値を 以下のようなfor文を用いて計算し、 for(y=200.0;y>=-200.0;y=y-10.0){  for(x=-200.0;x<=200.0;x=x+10.0){  } } 同一のY座標値におけるZの値がカンマで区切られて並ぶテキストファイルを出力するプログラムを作成しなさい。 そのファイルをエクセルで開き(カンマ区切りで) 3次元グラフを表示させる. ヒント1: #include <math.h> を宣言することにより、数学関数 cos sin pow が使用可能となる。 ヒント2: sin cos の引数はラジアン単位で指定する必要があるため、円周率を用いて degree から radian を求めること

  • 漸化式のプログラム

    n=100としてn+1個の点(Xj,Yj) (j=1,2,3・・n)はどのようなグラフになるか?ただし、h=1/n, Xj=jh, Y(j+1)=Yj+hYj, Y(0)=1である。 このプログラムを教えてください。 #include <stdio.h> #include <math.h> main() { double pi, x, y; int i; pi=4*atan(1); x=1/100; y=1; for(i = 1; i<=100; ++i){ x=i*1/100; y[n+1]=y[n]+1/100*y[n]; printf("%lf %lf\n", i, x, y,); } } ではだめなんでしょうか?

  • 綺麗なローレンツ・アトラクタの描き方?

    ローレンツ方程式 dx/dt = p*(-x + y) dy/dt = r*x - y - x*z dz/dt = -b*z + x*y をEuler法を利用して、プログラムを作成して、gnuplotでplotしているのですがこのローレンツ・アトラクターの2つの円の中心が均一に(私の場合は左円の中心が小さく、右円の中心が大きい)なるようにして、 綺麗なアトラクターを描くには刻み幅と計算回数をどれくらいの値にすればいいのでしょうか? 私は刻み幅h = 0.001、計算回数n = 100000としてます。 *Euler法に変換したプログラムと図は下の通りです。 図 http://www26.tok2.com/home/parshem//image/lorenz-O.jpg #include <stdio.h> #include <math.h> int main(void) { /*---Parameter---*/ int p = 10; int r = 28; double b = 8.0/3.0; double x, y, z, xn, yn, zn, h, i, n; x = 1.0; y = 1.0; z = 1.0; h = 0.001;//ステップの刻み n = 400000; /*---Lorenz Equation & Euler---*/ for(i = 0.0 ; i < n ; i++){ xn =x + h * p*(-x + y) ; yn =y + h * ( r*x - y - x*z ); zn =z + h * ( -b*z + x*y ); printf("%lf\t%lf\t%lf \n", xn, yn, zn); x = xn; y = yn; z = zn; } return 0; }

  • デジタル信号処理の問題がわかりません!

    次の信号のインパルス応答を求めよ. 1.y(n)=(1/2)^nx(n) 2.y(n)=x(n)-x(n-1) 3.y(n)=x(n)+y(n-1)  ∞ 4.Σh(p)x(n-p) p=-∞ 解き方がさっぱりわかりません…何をどうすればいいのでしょうか?

  • 4つの異なる色の点を、それぞれことなる方向に動かす

    4つの異なる色の点をそれぞれ異なる方向に動かすには、下記のプログラムをどのようにかえたらいいでしょうか?授業の課題なのですが、これ以上全くわかりません!わかる方はぜひ力を貸していただければと思います。 #include "/pub/sfc/ipl/com-pro/sfcLib.cpp" #include <unistd.h> using namespace std; main(){ int x[4];int y[4];int z[4]; x[0]=0;x[1]=4;x[2]=7;x[3]=2; y[0]=3;y[1]=1;y[2]=2;y[3]=5; z[0]=1;z[1]=4;z[2]=6;z[3]=2; sfcInit(); while(true){ for(int i=0;i<4;i++){ sfcPoint(x[i],y[i],z[i]); } usleep(500000); for(int i=0;i<4;i++){ sfcPoint(x[i],y[i],7); } for(int i=0;i<4;i++){ x[i]++; y[i]++; if(x[i]>9,y[i]>9){ x[i]=0,y[i]=0; } } } }

  • C++の関数で

    Visual C++で6の4乗を求めるプログラムを作ろうとしたのですがうまくいきません。どこが間違っているか教えていただけないでしょうか? #include "stdafx.h" int get; bekijyo(int,int); void main(void) { int number1,number2; int kekka; number1=6; number2=4; kekka=get; bekijyo(number1,number2); printf("%dの%dは%dです。); } int getbekijo(int x,int y) { int z; if(y==1) return(x); z=x; getbekijyo(x,y-1); return(z); }

  • 並列処理プログラム

    並列処理について。 画像imageの値が0より大きい場合に、managerを実行しますが、managerの計算時間が長いです。 そこで、4つのコアでpthreadにより、並列処理をさせたいんですが、 どのようにプログラムを書けばいいかすみませんが教えてください。 あるボクセルを計算中に、次のボクセルを計算するようなプログラム。。。 for (int z=0; z<32; z++){  for (int y=0; y<32; y++){   for (int x=0; x<32; x++){    if(image(x,y,z) > 0){     total += manager(x,y,z);    }   }  } }