質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • Python

    7930questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Python 3.x

    6342questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Pythonで信号処理

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 169

iwhr

score 8

閲覧いただきありがとうございます.
PythonでFIRフィルタを設計しようとしています.

# coding: utf-8
import csv
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
import pandas as pd

#csvファイルの読み込み

data = pd.read_csv('out3.csv') #csvファイルの読み込み 

# サンプルデータ
n  = len(data)                       # データ数
dt = 0.05                       # サンプリング間隔
fn = 1/(2*dt)                   # ナイキスト周波数
t = data.iloc[:,0]  
t1 = np.array(t)
y = data.iloc[:,2]
z = np.array(y)

# パラメータ設定
fp = 2                          # 通過域端周波数[Hz]
fs = 3                          # 阻止域端周波数[Hz]
gpass = 1                       # 通過域最大損失量[dB]
gstop = 40                      # 阻止域最小減衰量[dB]

# 正規化
Wp = fp/fn
Ws = fs/fn

# ローパスフィルタで波形整形
# バターワースフィルタ
N, Wn = signal.buttord(Wp, Ws, gpass, gstop)
b1, a1 = signal.butter(N, Wn, "low")
y1 = signal.filtfilt(b1, a1, z)

# FIR フィルタ
a2 = 1
numtaps = n
b2 = signal.firwin(numtaps, Wp, window="hann")
y2 = signal.lfilter(b2, a2, z)
delay = (numtaps-1)/2*dt

# プロット
plt.figure()
plt.plot(t1, z, "b")
plt.plot(t1, y1, "r", linewidth=2, label="butter")
plt.plot(t1-delay, y2, "g", linewidth=2, label="fir")
plt.xlim(0, 25)
plt.legend(loc="upper right")
plt.xlabel("Time [s]")
t.ylabel("Amplitude")
# plt.show()


イメージ説明

このプログラムを実行すると図のようにFIRフィルタの時間がずれてしまいます.これを修正するにはどうしたらよいでしょうか?
よろしくお願いします.

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • namnium1125

    2018/06/10 18:17 編集

    (私はFIRフィルタの原理等は一切わかりません。ので、的外れでしたらすみません。) 直感ですが、plt.plot(t1-delay, y2, "g", linewidth=2, label="fir")の中の-delayによって範囲が変更されているのが原因だと考えられます。そもそもこれは意図した結果という可能性はないのでしょうか?(つまり、本来ずれるべきところを、「ずれている」と認識しているのではないか?という意味です。) そのあたり(ほしい結果はどういうものかなど)を明記していただけると幸いです。 近似曲線等があるならば話は別ですが、読み込んだデータならばそれ以上どうしようもない気がします。

    キャンセル

  • iwhr

    2018/06/10 18:54 編集

    ご指摘ありがとうございます.緑のfirも赤色のbutterの曲線になるような結果がほしいです.(曲線がほぼ重なり合う)恐らくフィルタの原理をあまり理解していないかもしれません.自分でも,もう少し考えてみたいと思います.

    キャンセル

  • ozwk

    2018/06/12 19:21

    そもそもなぜdelay入れているんですか?

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python

    7930questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Python 3.x

    6342questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。