Skip to content

Instantly share code, notes, and snippets.

@yoggy
Created August 30, 2018 08:07
Show Gist options
  • Save yoggy/527c4015aad2031522cb4c75f2e63959 to your computer and use it in GitHub Desktop.
Save yoggy/527c4015aad2031522cb4c75f2e63959 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f9386ad20f0>]"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f9386f34e10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# v_in:入力値\n",
"v_in = [0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,0,0,0]\n",
"v_out1 = [] # v_out1: 立ち上がり・立ち下がりを緩やかにするフィルタ\n",
"v_out2 = [] # v_out2: v_out2にLPFをかけた値\n",
"\n",
"attack_count = 10\n",
"gain1 = 0.7\n",
"gain2 = 0.2\n",
"\n",
"v_old = 0; d_old = 0; count = 0\n",
"for v in v_in:\n",
" # 変化量を求める\n",
" d_now = v - v_old\n",
" if d_now == 0.0 or (d_now * d_old < 0):\n",
" # 変化量0もしくは方向が変わったらカウンタを0クリア\n",
" count = 0\n",
" else:\n",
" # attack_countまでcountをインクリメントする\n",
" count = count+1 if count<attack_count else attack_count\n",
" \n",
" # カウントがattack_countに達するまでは、徐々に加速するようにする\n",
" p = (count/attack_count)\n",
" v_now1 = v_old + d_now * p * gain1\n",
" v_out1.append(v_now1)\n",
"\n",
" # v_out1に対してLPFをかける\n",
" v_now2 = v_old *(1 - gain2) + v_now1 * gain2\n",
" v_out2.append(v_now2)\n",
" \n",
" v_old = v_now1; d_old = d_now\n",
"\n",
"plt.plot(range(len(v_in)), v_in)\n",
"plt.plot(range(len(v_out1)), v_out1)\n",
"plt.plot(range(len(v_out2)), v_out2)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment