質問編集履歴

3

修正

2021/04/21 23:47

投稿

kaeruuuun
kaeruuuun

スコア19

test CHANGED
@@ -1 +1 @@
1
- プログラムの処理速度
1
+ プログラムの処理速度を早くする
test CHANGED
File without changes

2

更新

2021/04/21 23:47

投稿

kaeruuuun
kaeruuuun

スコア19

test CHANGED
@@ -1 +1 @@
1
- ー表示:配列インデックスは正整数または logical 値でなければなりません。
1
+ プログ処理速度
test CHANGED
@@ -1,30 +1,90 @@
1
1
  ```MATLAB
2
2
 
3
- [x fs]=audioread(-------.wav) ;
3
+ [x fs]=audioread('-------.wav');
4
4
 
5
- n_length=length(x) ;
5
+ n_length=length(x);
6
6
 
7
- [g fs]=audioread(-------.wav) ;
7
+ [g fs]=audioread('-------.wav');
8
+
9
+
10
+
11
+
8
12
 
9
13
  g_length=length(g);
10
14
 
11
15
  y=zeros(1,n_length+g_length-1);
12
16
 
13
- for n=1:n_length
17
+ if n_length>g_length
14
18
 
19
+ for n = 1:n_length+g_length-1
15
20
 
21
+ if n > n_length
16
22
 
17
- for k=1:g_length
23
+ left = n - n_length + 1;
18
24
 
25
+ else
19
26
 
27
+ left = 1;
20
28
 
21
- y(n)=y(n)+g(k)*x(n-k);
29
+ end
22
30
 
31
+ if n < g_length
23
32
 
33
+ right = n;
34
+
35
+ else
36
+
37
+ right = g_length;
38
+
39
+ end
40
+
41
+ for k = left:right
42
+
43
+ y(n) = y(n) + g(k) * x(n-k+1);
44
+
45
+ end
46
+
47
+
24
48
 
25
49
  end
26
50
 
51
+ if n_length<g_length
52
+
53
+ for n = 1:n_length+g_length-1
54
+
55
+ if n < n_length
56
+
57
+ left = n;
58
+
59
+ else
60
+
61
+ left = g_length;
62
+
27
- ```
63
+ end
64
+
65
+
66
+
67
+ if n < g_length
68
+
69
+ right = n - n_length + 1;
70
+
71
+ else
72
+
73
+ right = 1;
74
+
75
+ end
76
+
77
+ for k = right:left
78
+
79
+ y(n) = y(n) + g(k) * x(n-k+1);
80
+
81
+ end
82
+
83
+ end
84
+
85
+ end
86
+
87
+ end
28
88
 
29
89
 
30
90
 
@@ -32,48 +92,6 @@
32
92
 
33
93
  convを使わずに畳み込み積分をしたいです.
34
94
 
35
- このプログラムにおいて実行すると
36
-
37
- y(n)=y(n)+g(k)*x(n-k);
38
-
39
- 配列インデックスは正の整数または logical 値でなければなりません。のようなエラーがでます.
40
-
41
- x(n-k)がx(0)になってしまっているのでここをx(n-k+1)にしても同じエラーが出ます.
42
-
43
- ```MATLAB
44
-
45
- for n=1:n_length+g_length -1
46
-
47
-
48
-
49
- if n>n_length
50
-
51
- left = n-n_length+1;
52
-
53
- else
54
-
55
- left=1;
56
-
57
- end
58
-
59
- if n < g_length
60
-
61
- right = n;
62
-
63
- else
64
-
65
- right = g_length;
66
-
67
- for k=left:right
68
-
69
- y(n)=y(n)+g(k)*x(n-k+1);
70
95
 
71
96
 
72
-
73
- end
74
-
75
- end
76
-
77
- ```
78
-
79
- 前回の質問でこのような回答をいただいたのですが,このプログラムはn_length>g_lengthの時しかうまく動作できません.一度for文の後にif文でn_lengthとg_lengthの大小関係を比べてn_length>g_lengthの時と分岐させることもできるのですがすごく複雑になってしまいます.短くこのエラーを解決できないでしょうか.初心者なので詳しくこのエラーの原因を説明していだだけると幸いです.
97
+ 前回の質問でこのような回答をいただいたのですが,このプログラムはn_length>g_lengthの時しかうまく動作できません.if文で最初にn_lengthとg_lengthの大小関係を比べてn_length>g_lengthの時と分岐させることもできるのですがすごく複雑になってしまい,処理にすごく時間がかかってしまいます.短く同じ処理をできるプログラムに修正できないでしょうか.初心者なので詳しく説明していだだけると幸いです.

1

追加

2021/04/21 14:23

投稿

kaeruuuun
kaeruuuun

スコア19

test CHANGED
File without changes
test CHANGED
@@ -76,4 +76,4 @@
76
76
 
77
77
  ```
78
78
 
79
- 前回の質問でこのような回答をいただいたのですが,このプログラムはn_length>g_lengthの時しかうまく動作できません.一度for文の後にif文でn_lengthとg_lengthの大小関係を比べてn_length>g_lengthの時と分岐させることもできるのですがすごく複雑になってしまいます.短くこのエラーを解決できないでしょうか.
79
+ 前回の質問でこのような回答をいただいたのですが,このプログラムはn_length>g_lengthの時しかうまく動作できません.一度for文の後にif文でn_lengthとg_lengthの大小関係を比べてn_length>g_lengthの時と分岐させることもできるのですがすごく複雑になってしまいます.短くこのエラーを解決できないでしょうか.初心者なので詳しくこのエラーの原因を説明していだだけると幸いです.