![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
Scilabを使って、FIRフィルタ(移動平均)のグラフを書きたいと思っています。
http://www.heg.co.jp/dspnyuumon/dsp1-3.htm
上記のサイトにある、移動平均のブロック図(図3)のグラフ(つまり図4のグラフ)を作りたいのです。
サイトには
「xに現在サンプルした値が入っており、yにその結果が入る。
x1は現在から1サンプル前の値、x2は現在から2サンプル前の値、同様にx3
y = x;
y = y + x1;
y = y + x2;
y = y + x3; /* 4つの値を足し合わせる */
y = y / 4; /* 4つの平均をとる */
x3 = x2; /* x3に1つ前の値であるx2を代入する */
x2 = x1;
x1 = x;
この処理を1サンプル取り込むごとに実行する。」
という流れが書いてありますが、実際にこれをScilabで作るならどのように作るればよいのでしょうか?
c言語ならfor文で回して作れそうなのですが、Scilabでfor文を入れるとうまくいきませんでした。
上記のサイトの図4のようなグラフをScilabで作りたいという事です。
プログラミングの得意な方、何とかお願いします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
図4のグラフだけ描きたいのであれば、フィルタの計算は必要ありません。
このフィルタの周波数特性の計算行えばよいのです。
このフィルタの伝達関数は
H(z)=a0+a1・z^(-1)+a2・z^(-2)+a3・z^(-3)
で与えられます。
規格化角周波数をωとしたとき、z=e^(jω)とおけば、
周波数特性は
H(e(jω))=a0+a1・e^(-jω)+a2・e^(-2jω)+a3・e^(-3jω)
a0=a1=a2=a3=0.25として、複素数のままScilabで計算して
プロットすればよいのですが、このFIRフィルタは線形位相条件を
満たしますので、
H(e(jω))=0.5・e^(-jω3/2){cos(ω/2)+cos(3ω/2)}
と整理されます。
図4と同様に、標本化周波数を10000Hzとし、周波数を0から5000Hzまで
(基本帯域)の振幅特性を求めましょう。
Freq=0:10:5000;
SamplingFreq=10000;
W = 2*%pi*Freq/SamplingFreq;
H=0.5*(cos(W/2)+cos(W*3/2));
plot2d(Freq,20*log10(abs(H)),rect=[0,-80,5000,0]);
複素数バージョンは、
Freq=0:10:5000;
SamplingFreq=10000;
W = 2*%pi*Freq/SamplingFreq;
Zinv = exp(-%i*W);
H=0.25*(1+Zinv+Zinv^2+Zinv^3);
plot2d(Freq,20*log10(abs(H)),rect=[0,-80,5000,0]);
もうひとつの方法は、インパルス応答を求め、これの離散フーリエ変換
を行っても求められる。
インパルス応答は、
h(n)=0 (n<0のとき)
h(0)=h(1)=h(2)=h(3)=0.25
h(n)=0 (n>4のとき)
です。
離散フーリエ変換はScilabではfftという関数です。
以上 参考まで
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- 数学 線形代数の対称行列についての問題がわからないです。 2 2023/01/08 14:59
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- 数学 「FFTの基本は、DFTはサンプル数Nが偶数なら 2つのDFTに分解できるということ。 分解するとD 3 2022/03/31 21:01
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- 数学 ハイネボレルの被覆定理、内田伏一著 「集合と位相」定理22.1 1 2022/07/07 10:49
- 数学 x1+3x2+2x3=4 2x1+x2-3x3=2 -5x1+5x2+18x3=a 次の連立1次方程 2 2023/07/02 03:15
- 統計学 生物統計学の質問 3 2022/11/11 21:14
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:13
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
VBAで関数をつくる
-
0xf0=256?
-
matlab計算での進捗状況を知りたい
-
Perlで時間の計算
-
PHPで四則演算以外の微分、積分...
-
傾いた四角形内の範囲の条件式
-
文章中の数値を自動で足すサー...
-
変化させるセルが変化しない
-
C# 計算処理中に実行中ウィン...
-
MATLABの利点と欠点
-
バッチファイルでウインドウを...
-
ExcelのVBAで複素数は扱えない...
-
VBでReplace
-
VBAでの勤務時間計算
-
Perlでのルートの計算
-
VBAプログラミングです 現在、...
-
骨折リスク評価のFRAXについて...
-
スレッド処理からダイアログを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
mod でうまく
-
めちゃきれい
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
バッチファイルでウインドウを...
-
モジュラス103の計算とは何でし...
-
EXCELなどで「返す」という表現
-
変化させるセルが変化しない
-
60進数の四則計算
-
プログラムの質問
-
VBでReplace
-
数値計算の高速化 (cos, sin, exp)
-
C言語についてです。 再帰を使...
-
Javaを使った行列計算
-
C言語のプログラミングの問題で...
-
エクセルで特定のセルのみを任...
-
matlab計算での進捗状況を知りたい
-
CとFORTRANの計算速度はどちら...
-
matlabで計算終了
おすすめ情報