電子工学出2つ以上の周波数成分を含む入力信号からディジタルフィルタを用いて、特定の周波数成分のみを強調する数値シュミレー

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
せんしょ

電子工学出2つ以上の周波数成分を含む入力信号からディジタルフィルタを用いて、特定の周波数成分のみを強調する数値シュミレー

#1

投稿記事 by せんしょ » 12年前

解ける方至急教えて下さい。お願いします。
2つ以上の周波数成分を含む入力信号から、ディジタルフィルタを用いて特定の周波数成分のみを強調する数値シュミレーションを行う。
samples.cpp:このままでは動かないので、関数(iir_bilinear,gen_input,simulate,output)によって隠蔽されているコードを各自で作成しシュミレーションパラメータなどを適宣変更する。
#include<stdio.h>
#include<stdlib.h>
//#include"sample.h"
int main()
{
シュミレーションパラメータ
count double fs=8000.0: //サンプリング周波数
const unsigned int n=300; //データポイント数
const double f[3]={50.0,500.0,3000.0}; //入力信号に含まれる周波数
const double fc[2]={200.0,800.0}: //遮断周波数(BPF用)
const unsigned int m2; //フィルタ次数
double b[m+1],a[m]; //フィルタ係数
double x[n],y[n]; //入出力信号
double t[n]; // 時間
FILE*fp //結果出力用ファイルポインタ
フィルタ設計
//fc,fs,mから、双一次変換法によりディジタルフィルタの係数を定めそれをb,aに代入するコードを書く
//余白や改行の取り方にもよるが、大体~20行程度で可能
iir_bilinear1(b,a,fc,fs,m); //双一次変換法、手計算でも可
シュミレーション
//パラメータf,fs,nと繰り返し処理などにより
//入力信号と時間情報を生成し、それらをx,tにそれぞれ代入するコードを書く
//余白や改行の取り方にも夜が、大体~20行程度で可能
gen_input(t,x,f,fs,n); //入力信号生成
//係数b,a,nと繰り返しりょリなどにより、入力x,出力yとしてc/c++の文法にそって差分方程式そのものを書けばよい
//余白や改行の取り方にもよるが,大体~20行程度で可能
simulate(y,x,b,a,n); //フィルタシュミレーション
結果出力
fp=fopen("rersult.csv","w"); //出力用ファイルオープン
//繰り返し処理とfprintfなどを使用して、t,x,yを書き出すコードを書く
//余白や改行の取り方にもよるが、大体~10行程度で可能
output(fs,x,y,t,n); //入出力信号をファイルへ書き出し
fclose(fp); //ファイルクローズ
return 0;
}

tlnlniri
記事: 17
登録日時: 12年前

Re: 電子工学出2つ以上の周波数成分を含む入力信号からディジタルフィルタを用いて、特定の周波数成分のみを強調する数値シ

#2

投稿記事 by tlnlniri » 12年前

私なんかがしゃしゃり出てきて申し訳ありません。

2つほど確認したいことがあります。
・締め切り(あれば)はいつでしょうか?
・アナログフィルタ(BPF)の伝達関数を双一次変換すればよいのでしょうか?(私の読解力不足のため、何がわからないのかわかりません。)


BPFフィルタ係数さえ算出できれば双一次変換の過程は無くてもいいなら
→ http://floor13.sakura.ne.jp/book03/book03.html

せんしょ

Re: 電子工学出2つ以上の周波数成分を含む入力信号からディジタルフィルタを用いて、特定の周波数成分のみを強調する数値シ

#3

投稿記事 by せんしょ » 12年前

今週金曜です。
双一次の過程はほしいです。
すいませんがお願いします

tlnlniri
記事: 17
登録日時: 12年前

Re: 電子工学出2つ以上の周波数成分を含む入力信号からディジタルフィルタを用いて、特定の周波数成分のみを強調する数値シ

#4

投稿記事 by tlnlniri » 12年前

解きました。
文字が見づらかったらごめんなさい。

BPFアナログ伝達関数は、
http://sim.okawa-denshi.jp/RLCbpkeisan.htm
の「通過中心周波数からRLC定数の選定と伝達関数」と同じものです。

fc/Q は fc2-fc1 に変換してください。
fc^2 は fc1*fc2 に変換してください。
fc1またはfc2は、tan(π*対象周波数/標本化周波数)/2π で求めます。


【追記】
ファイルの順番はバラバラです。
画像ファイルにGPS情報が入っていたため一度削除しました。

再アップ

tlnlniri
記事: 17
登録日時: 12年前

Re: 電子工学出2つ以上の周波数成分を含む入力信号からディジタルフィルタを用いて、特定の周波数成分のみを強調する数値シ

#5

投稿記事 by tlnlniri » 12年前

係数導出をまとめたzipはアップロードできなかったので分割で置いておきます。

フィルタ係数の使い方(IIRの式の使い方)はわかりますよね?
添付ファイル
image_3.zip
(3.34 MiB) ダウンロード数: 178 回
image_2.zip
(3.35 MiB) ダウンロード数: 177 回
image_1.zip
(3.37 MiB) ダウンロード数: 167 回

ゲス

Re: 電子工学出2つ以上の周波数成分を含む入力信号からディジタルフィルタを用いて、特定の周波数成分のみを強調する数値シ

#6

投稿記事 by ゲス » 12年前

プログラムに直した書き方はわかりますか?
パソコンに打たないといけないので、、、、、、

ゲス

Re: 電子工学出2つ以上の周波数成分を含む入力信号からディジタルフィルタを用いて、特定の周波数成分のみを強調する数値シ

#7

投稿記事 by ゲス » 12年前

プログラムに直した書き方はわかりますか?
パソコンに打たないといけないので、、、、、、

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: 電子工学出2つ以上の周波数成分を含む入力信号からディジタルフィルタを用いて、特定の周波数成分のみを強調する数値シ

#8

投稿記事 by softya(ソフト屋) » 12年前

申し訳ありません、名前の統一をお願いします。
ゲス=せんしょさんで間違いないでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

tlnlniri
記事: 17
登録日時: 12年前

Re: 電子工学出2つ以上の周波数成分を含む入力信号からディジタルフィルタを用いて、特定の周波数成分のみを強調する数値シ

#9

投稿記事 by tlnlniri » 12年前

遅れて申し訳ありません。昼間は返信できないです。

コード:

/*******************************************************************
fc1, fc2:fc1[Hz] ~ fc2[Hz]を通過
fs:標本化周波数
a, b:フィルタ係数
※a[0]は必要ないが、1.0とすることが多い。
*******************************************************************/
void BPF(double fc1, double fc2, double fs, double a[], double b[])
{
	fc1 = tan(M_PI * fc1 / fs) / (2.0 * M_PI);
	fc2 = tan(M_PI * fc2 / fs) / (2.0 * M_PI);
  
	a[0] = 1.0;
	a[1] = (8.0 * M_PI * M_PI * fc1 * fc2 - 2.0) / (1.0 + 2.0 * M_PI * (fc2 - fc1) + 4.0 * M_PI * M_PI * fc1 * fc2);
	a[2] = (1.0 - 2.0 * M_PI * (fc2 - fc1) + 4.0 * M_PI * M_PI * fc1 * fc2) / (1.0 + 2.0 * M_PI * (fc2 - fc1) + 4.0 * M_PI * M_PI * fc1 * fc2);
	b[0] = 2.0 * M_PI * (fc2 - fc1) / (1.0 + 2.0 * M_PI * (fc2 - fc1) + 4.0 * M_PI * M_PI * fc1 * fc2);
	b[1] = 0.0;
	b[2] = -2.0 * M_PI * (fc2 - fc1) / (1.0 + 2.0 * M_PI * (fc2 - fc1) + 4.0 * M_PI * M_PI * fc1 * fc2);
}
双一次変換は手計算でよいと書いてあったので手計算で。(上の関数内では双一次変換は行っていない)
あとはIIRの式に適用してください。

box
記事: 2002
登録日時: 14年前

Re: 電子工学出2つ以上の周波数成分を含む入力信号からディジタルフィルタを用いて、特定の周波数成分のみを強調する数値シ

#10

投稿記事 by box » 12年前

>シュミレーション

そもそも、こんな誤った用語を使っている時点でアウトだと思います。
simulationという単語をむりやりカタカナで表記したとき、
シミュレーションにはなるかもしれませんがシュミレーションには絶対ならないことでありましょう。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。



アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: 電子工学出2つ以上の周波数成分を含む入力信号からディジタルフィルタを用いて、特定の周波数成分のみを強調する数値シ

#13

投稿記事 by softya(ソフト屋) » 12年前

申し訳ありません。
荒れる気配がしてきているので、挑発するような書き込みはご遠慮ください。

それと課題の丸投げも例外事項は設けられています。詳しくはフォーラムルールをお読みください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る