<canvas id="ZtrCanvas2" width="300" height="200"></canvas> <textarea id="ZfrqResponse" value="1" cols=30 rows=1></textarea> <form name="Zdata"> <textarea name="ZtextArea" value="1" cols=30 rows="5"> f:10:fs/2=600; a:0.1:10=1.4; w =tan(PI*f/fs); w2 = w*w; w2 = (w^2); k0 = 1 + a * w + w * w; k1 = 2 * (1 - w * w); k2 = 1 - a * w + w * w; b1 = k1 / k0; b2 = -k2 / k0; a0 = w * w / k0; a1 = +2 * a0; a2 = a0; (a0+a1Z+a2*Z2)/(1-b1z^-1 -b2*Z^2) </textarea> <input name='Zbtn' type="button" value="2次LPF" /> </form> <form name="Zdata"> <textarea name="ZtextArea" value="1" cols=30 rows="5"> f:10:fs/2=600; a:0.1:10=1.4; w =tan(PI*f/fs); w2 = w*w; w2 = (w^2); k0 = 1 + a * w + w * w; k1 = 2 * (1 - w * w); k2 = 1 - a * w + w * w; b1 = k1 / k0; b2 = -k2 / k0; 1/k0*(1-2Z+Z2)/(1-b1z^-1 -b2*Z^2) </textarea> <input name='Zbtn' type="button" value="2次HPF" /> </form> <script type="text/javascript" src="./20230319/PaintLogLev.js"></script> <script type="text/javascript" src="./20230319/Zfunc.js"></script> <script type="text/javascript"> /* 原作:裏目小僧 (日本語以外に翻訳禁止 以外は自由にご利用下さい)*/ TFFTViewF.viewXnum=true; //X軸の数字を描く TFFTViewF.viewXline=true; //X軸の線を描く TFFTViewF.viewYnum=true; //Y軸の数字を描く //TFFTViewF.viewYline=true; //Y軸の線を描く TFFTViewF.viewYmark=true; var z; var za=[]; var zav=[]; var fs=44100; var cvs = document.getElementById("ZtrCanvas2"); var cv = cvs.getContext("2d"); var xs =cvs.width; var ys =cvs.height; var f=1000; var offc=10; var upDn=false; var fmax=fs/2; var fmin=5; const GraphDRAW = function(){ cv.fillStyle="#ffffff"; cv.fillRect(0, 0, cvs.width,cvs.height); PaintLogLev(cv, xs, ys, 15, -50, fmax, fmin, zav, clGreen,TFFTViewF , [f], 0); if(offc>0) {--offc;return;} if(f>fmax)upDn = false; if(f<fmin)upDn = true; if(upDn)f*=1.1; else f*=0.8; }; function onMouseMove(e) { let x=e.offsetX; f=PaintLogLev_XtoFrq(cv,x); offc=30; }; var zInterval; function ZmakeFunc(){ z.Zformula1(z.form.ZtextArea.value , fs); if(!zInterval) zInterval= setInterval(GraphDRAW , 300); cvs.addEventListener('mousemove', onMouseMove); document.getElementById("ZfrqResponse").value =z.ZJavascCode; let n=zav.indexOf(z); if(n>=0) zav.splice(n,1); zav.unshift(z) GraphDRAW(); }; function reMake (e){e.target.Z.ZReMakeFormula(); GraphDRAW(); } function ZrangeSet(Z,n,nm,dmin,dmax,d){ let i=Z.sliders.findIndex((e)=> e.nm==nm); if(i<0){ let s= document.createElement("input"); s.name = nm; s.type = 'range'; s.step="any"; if( dmin>0 && dmax>0){ dmin=Math.log(dmin); dmax=Math.log(dmax); s.value=Math.log(d); } else s.value=d; s.min=dmin; s.max=dmax; let L= document.createElement("label"); L.appendChild( document.createTextNode(nm) ); L.appendChild(s); Z.form.appendChild(L); s.Z=Z; Z.sliders.unshift({nm:nm,s:s}); Z.sliders[0].s=s; s.addEventListener(`input`,reMake); } else { let x= Z.sliders[i].s.value; if( dmin>0 && dmax>0) d=Math.exp(x) ;else d=x; d = Math.round(d*100)/100; const T=Z.form.ZtextArea;/*文字を書き換える*/ const reg = new RegExp('('+nm+'\\s*:.+=\\s*)(\\d+\\.\\d+|\\d+);'); T.value = T.value.replace(reg,'$1'+d+';'); }; return d; }; for(var form of document.forms) if(form.Zbtn){ form.Zbtn.onclick = function (e){ z=e.target.Z; ZmakeFunc(); }; z=new TZformula(); z.rangeSet=ZrangeSet; z.sliders=[]; form.Zbtn.Z=z; z.form=form; za.push(z); } ZmakeFunc(); </script>
プライバシーポリシー本文は日本語以外に翻訳禁止