低域通過フィルタについて

15 views (last 30 days)
N/A
N/A on 29 Oct 2019
Commented: N/A on 31 Oct 2019
Trace_1.mat ( 横軸:時間(s)、縦軸:電圧値(V)のデータ ) に
理想的な低域通貨フィルタ (周波数が10MHz以下なら利得あり、10MHzより大きければ利得0) をかけたいです。
そこで、 matlabのコマンドウィンドウにて、「y = lowpass(Trace_1,10e+6)」とプログラムを入力しましたが、「関数 'lowpass' (タイプ'double' の入力引数) が未定義です。」というエラーが出てきました。どのようにコマンドを入力すれば低域通過フィルタがかけられますか?ご回答頂けたら幸いです。

Accepted Answer

Shoumei
Shoumei on 30 Oct 2019
なんでimbinarizeなどが必要なのかわかりませんが、フィルタの使い方が間違っているのが原因です。
まず、理想的なフィルタは存在しません。LPFであれば通過帯域から遮断帯域までの肩特性は斜めに下がっていきますし、遮断帯域の信号の振幅は0にはなりません。
Junyaさんのデータは、1列目が時間軸データ、2列目が振幅データとなっているようですが、lowpassコマンドの1つ目の引数に時間軸データは必要ありませんので、振幅データのみを入力する必要があります。
信号は10MHzの信号と高調波ノイズで構成されているようですが、この高調波ノイズを除去したいのでしょうか?このように書くと良いのでは?
% 入力信号を表示
subplot(2,1,1),plot(Trace_1(:,1), Trace_1(:,2))
% フィルタリング
y = lowpass(Trace_1(:,2),10^6,10^7);
% フィルタリングされた信号を表示
subplot(2,1,2),plot(Trace_1(:,1), y)
フィルタの特性を理想に近づけたく、肩特性を急峻にしたい場合はSteepnessパラメータを1に近い値にします。
y = lowpass(Trace_1(:,2),10^6,10^7, 'ImpulseResponse','iir','Steepness',0.96);
subplot(2,1,2),plot(Trace_1(:,1), y)
使い方はドキュメントに載っているのでドキュメントをよく読みましょう。
doc lowpass
  1 Comment
N/A
N/A on 31 Oct 2019
ご回答頂きありがとうございます。
R2018aでプログラムを実行したところ、「関数 'lowpass' (タイプ'double' の入力引数) が未定義です。」というエラーが消え、LPFにかけることが出来ました。

Sign in to comment.

More Answers (1)

Yoshio
Yoshio on 29 Oct 2019
lowpass のドキュメントを参考に、Trace_1.mat の中から電圧波形データを取り出して、lowpassの関数に入力しましょう。今の場合
y = lowpass(x,fpass,fs) は、xfs Hz のレートでサンプリングするよう指定します。fpass は Hz 単位でのフィルターの通過帯域周波数です。
を使うのが便利そうです。
  5 Comments
Yoshio
Yoshio on 30 Oct 2019
Edited: Yoshio on 30 Oct 2019
コマンドウィンドウに
which lowpass
と入れて、何が帰ってきますか?
なお y = lowpass(x,fpass,fs) のfsは、信号xのサンプル周波数ですでに決まっていますから、
t = Trace_1(:,1);
x = Trace_1(:,2);
fs = 1/(t(2)-t(1))
fs =
2.0000e+09
すなわち、2GHzを設定すべきだと思います。
plot(t,x)
でプロットして、正しく信号が10Mzの正弦波であることを確認してみてください。
N/A
N/A on 31 Oct 2019
ご回答頂きありがとうございます。
% 入力信号を表示
subplot(2,1,1),plot(Trace_1(:,1), Trace_1(:,2))
% フィルタリング
y = lowpass(Trace_1(:,2),10^6,2e+9, 'ImpulseResponse','iir','Steepness',0.999);
% フィルタリングされた信号を表示
subplot(2,1,2),plot(Trace_1(:,1), y)
というプログラムをR2018aで実行したところエラーが出ませんでしたが,R2017aとR2016bで実行したところ、「関数 'lowpass' (タイプ'double' の入力引数) が未定義です。」というエラーがでました。R2018aにてコマンドウィンドウにwhich lowpassで検索したところ、「C:\Program Files\MATLAB\R2018a\toolbox\signal\signal\lowpass.m」と帰ってきたので、R2017aとR2016bにはlowpass関数自体が入ってないと思われます。
また、plot(t,x)でプロットしたところ、1周期あたりの時間が0.1μsだったので10MHzの正弦波であると思います。

Sign in to comment.

Products


Release

R2017a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!