こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

移動平均とローパスフィルタについて(matlab)

入力信号10Hz(サンプリング周波数1000Hz)に対して、
1周期分(100点)のデータを取り出して平均値を算出し、1サンプル移動して同様に100点のデータの平均値を算出する、というような移動平均のプログラムを書きました(下に載せました)。
この移動平均プログラムと同様の結果が得られるようなローパスフィルタを設計したいのですが、方法がよくわかりません。

ご存じの方、教えて頂けると幸いです。
宜しくお願いします。

以下、移動平均プログラムになります。

clear all

fs = 1000; % サンプリング周波数
t = 1/fs:1/fs:3;
f = 10; % 入力信号の周波数
y = sin(2*pi*f*t); % 入力信号の生成

M = round(fs/f); % 一周期分のサンプル数(10Hzの場合、100点)

for i = 1:1:length(y)-M+1
y2(i) = mean(y(i:1:i-1+M)); % 移動平均
end

plot(t(M:end),y2);

投稿日時 - 2016-05-21 10:26:15

QNo.9175677

すぐに回答ほしいです

質問者が選んだベストアンサー

ハードで実現する場合は,FPGAで行う場合シフトレジスタにためて,加算して,係数を掛ける格好になると思います.
100個の和になるので,そのまま加算する場合は桁上がりに注意が必要です.係数を掛けてから加算した方が良いかもしれません.添付のURLに4段の場合のVDHLが書かれていました.参考までに.
前の方もおっしゃっていましたが,100個の移動平均であれば,100個分の時間を待つ必要がありますので,その処理を入れておく必要があると思います.ご注意ください.

参考URL:http://www.ie.u-ryukyu.ac.jp/~wada/cad05/avg/avg4.vhd

投稿日時 - 2016-05-24 14:53:19

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

 まず100個で移動平均を取ると、100個の平均が0の周波数成分は全部消える訳ですよね?。100個で余りが出るものについては、少々端数が出ますが、そんなに大きくないでしょう。

 そうすると概ね10Hzのハイカット(ローパス)と、そんなに変わらないのでは?。#2さんが妥当と思います。

投稿日時 - 2016-05-23 18:19:58

補足

現在はプログラム上で行っていますが、今後ハードウェアで設計したいと考えています。そのため、常に過去100点分保持しておくような方法ではなく、フィルタのようにpoint by point でできる方法で実装したいと考えています。
簡単に変換することは可能でしょうか?

投稿日時 - 2016-05-23 19:52:05

ANo.2

デジタルフィルタ(FIR)でしたら、そのまま、過去100点分のデータの平均を取る、で良いかと思います。
他の手法で、ですと、別途設計が必要になるかと思います。

投稿日時 - 2016-05-23 16:47:39

補足

現在はプログラム上で行っていますが、今後ハードウェアで設計したいと考えています。そのため、常に過去100点分保持しておくような方法ではなく、フィルタのようにpoint by point でできる方法で実装したいと考えています。
簡単に変換することは可能でしょうか?

投稿日時 - 2016-05-23 19:51:59

ANo.1

ひとまず、参照 URL …
  

参考URL:http://www.heg.co.jp/dspnyuumon/dsp1-3.htm

投稿日時 - 2016-05-22 07:37:59

補足

ありがとうございます!

投稿日時 - 2016-05-23 19:52:21

あなたにオススメの質問