MATLAB
1[x fs]=audioread('-------.wav'); 2n_length=length(x); 3[g fs]=audioread('-------.wav'); 4 5 6g_length=length(g); 7y=zeros(1,n_length+g_length-1); 8if n_length>g_length 9for n = 1:n_length+g_length-1 10 if n > n_length 11 left = n - n_length + 1; 12 else 13 left = 1; 14 end 15 if n < g_length 16 right = n; 17 else 18 right = g_length; 19 end 20 for k = left:right 21 y(n) = y(n) + g(k) * x(n-k+1); 22 end 23 24end 25if n_length<g_length 26 for n = 1:n_length+g_length-1 27 if n < n_length 28 left = n; 29 else 30 left = g_length; 31 end 32 33 if n < g_length 34 right = n - n_length + 1; 35 else 36 right = 1; 37 end 38 for k = right:left 39 y(n) = y(n) + g(k) * x(n-k+1); 40 end 41 end 42end 43end 44 45初心者です. 46convを使わずに畳み込み積分をしたいです. 47 48前回の質問でこのような回答をいただいたのですが,このプログラムはn_length>g_lengthの時しかうまく動作できません.if文で最初にn_lengthとg_lengthの大小関係を比べてn_length>g_lengthの時と分岐させることもできるのですがすごく複雑になってしまい,処理にすごく時間がかかってしまいます.短く同じ処理をできるプログラムに修正できないでしょうか.初心者なので詳しく説明していだだけると幸いです.
その、前の質問で回答された方に聞かれればよろしいのでは?この質問の必要性が分かりません
回答1件
あなたの回答
tips
プレビュー