質問編集履歴
3
修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
プログラムの処理速度
|
1
|
+
プログラムの処理速度を早くする
|
test
CHANGED
File without changes
|
2
更新
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
プログラムの処理速度
|
test
CHANGED
@@ -1,30 +1,90 @@
|
|
1
1
|
```MATLAB
|
2
2
|
|
3
|
-
[x fs]=audioread(
|
3
|
+
[x fs]=audioread('-------.wav');
|
4
4
|
|
5
|
-
n_length=length(x)
|
5
|
+
n_length=length(x);
|
6
6
|
|
7
|
-
[g fs]=audioread(
|
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
|
-
f
|
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
|
-
f
|
23
|
+
left = n - n_length + 1;
|
18
24
|
|
25
|
+
else
|
19
26
|
|
27
|
+
left = 1;
|
20
28
|
|
21
|
-
|
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
追加
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の時と分岐させることもできるのですがすごく複雑になってしまいます.短くこのエラーを解決できないでしょうか.初心者なので詳しくこのエラーの原因を説明していだだけると幸いです.
|