teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

5

追加

2021/08/09 14:02

投稿

kaeruuuun
kaeruuuun

スコア19

title CHANGED
File without changes
body CHANGED
@@ -14,14 +14,13 @@
14
14
  b_length=length(b);
15
15
  a_length=length(a);
16
16
  k1=length(x)+length(b)-1;
17
- y1=zeros(1,k1);
17
+ y1=zeros(1,N);
18
- y2=zeros(1,k1);
18
+ y2=zeros(1,N);
19
- %y1=0;
19
+
20
- %y2=0;
21
20
  x1=length(x);
22
- y=zeros(1,length(b)+length(a)+length(x)-1);
21
+ y=zeros(1,N);
23
22
 
24
- %for k=1:b_length
23
+
25
24
  for n=1:k1
26
25
  for k=max(1,n+1-x1):min(n,b_length)
27
26
 

4

追加

2021/08/09 14:02

投稿

kaeruuuun
kaeruuuun

スコア19

title CHANGED
@@ -1,1 +1,1 @@
1
- convを使わない畳み込み
1
+ 関数filterと自作のプログラムの不一致
body CHANGED
@@ -1,4 +1,5 @@
1
1
  MATLABの関数にあるconvを使わないで以下の式を実現したくてプログラムを作成しているのですが出力結果がうまくいかず解決方法に悩んでいます。教えていただけないでしょうか。1つ前にも同様の質問をしていますが、プログラムを修正しています。
2
+ 具体的にはフィルタ係数a,bを指定する際にa,bともに1より大きな値で指定するとfilter(b,a,x)でプロットした結果と一致するのですが、フィルタ係数を1より小さい値にしたときに一致しません。
2
3
  ```matlab
3
4
  prompt = 'What is the value of "a" ? ';
4
5
  a = input(prompt);
@@ -22,7 +23,7 @@
22
23
 
23
24
  %for k=1:b_length
24
25
  for n=1:k1
25
- for k=max(1,n+1-x1):min(n,b_length)
26
+ for k=max(1,n+1-x1):min(n,b_length)
26
27
 
27
28
  y1(n)=y1(n)+x(n-k+1)*b(k);
28
29
  end
@@ -37,9 +38,11 @@
37
38
  y(n)=y1(n)+y2(n);
38
39
  end
39
40
  plot(y)
41
+ xlim([0 50])
40
42
 
43
+ ```
41
44
 
45
+ ![イメージ説明](bb3718e5bf174e9f084639300117a384.png)
42
46
 
43
- ```
47
+ 左が自作のプログラムの結果で右がfilter関数を使った場合です。
44
-
45
- ![イメージ説明](bb3718e5bf174e9f084639300117a384.png)
48
+ ![イメージ説明](e4f6ff6ffa890cc4c16dbf31763d77bf.png)

3

追加

2021/08/09 02:49

投稿

kaeruuuun
kaeruuuun

スコア19

title CHANGED
File without changes
body CHANGED
@@ -14,30 +14,32 @@
14
14
  a_length=length(a);
15
15
  k1=length(x)+length(b)-1;
16
16
  y1=zeros(1,k1);
17
- y2=zeros(1,length(x)+length(a)-1);
17
+ y2=zeros(1,k1);
18
18
  %y1=0;
19
19
  %y2=0;
20
20
  x1=length(x);
21
21
  y=zeros(1,length(b)+length(a)+length(x)-1);
22
22
 
23
-
23
+ %for k=1:b_length
24
24
  for n=1:k1
25
25
  for k=max(1,n+1-x1):min(n,b_length)
26
26
 
27
- y1=y1+x(n-k+1)*b(k);
27
+ y1(n)=y1(n)+x(n-k+1)*b(k);
28
28
  end
29
29
 
30
30
 
31
31
  %for m=1:a_length
32
- for m=max(1,n+1-x1):1:min(n,a_length)
32
+ for m=max(1,n+1-x1):min(n,a_length)
33
- y2=y2+y(n-m+1)*(-a(m));
33
+ y2(n)=y2(n)+y(n-m+1)*(-a(m));
34
34
 
35
35
 
36
36
  end
37
- y=y1+y2;
37
+ y(n)=y1(n)+y2(n);
38
38
  end
39
39
  plot(y)
40
40
 
41
+
42
+
41
43
  ```
42
44
 
43
45
  ![イメージ説明](bb3718e5bf174e9f084639300117a384.png)

2

追加

2021/08/09 02:37

投稿

kaeruuuun
kaeruuuun

スコア19

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- MATLABの関数にあるconvを使わないで畳み込みをしたいのですが,プログラムを作成していてエラーが出解決方法に悩んでいます。教えていただけないでしょうか。
1
+ MATLABの関数にあるconvを使わないで以下の式実現したくてプログラムを作成しているのですが出力結果がうまくいかず解決方法に悩んでいます。教えていただけないでしょうか。1つ前にも同様の質問をしていますが、プログラムを修正しています。
2
2
  ```matlab
3
3
  prompt = 'What is the value of "a" ? ';
4
4
  a = input(prompt);
@@ -15,24 +15,29 @@
15
15
  k1=length(x)+length(b)-1;
16
16
  y1=zeros(1,k1);
17
17
  y2=zeros(1,length(x)+length(a)-1);
18
-
18
+ %y1=0;
19
+ %y2=0;
19
20
  x1=length(x);
20
21
  y=zeros(1,length(b)+length(a)+length(x)-1);
21
- for n=1:k1
22
22
 
23
+
24
+ for n=1:k1
23
- for k=max(1,k1+1-x1):min(k1,b_length)
25
+ for k=max(1,n+1-x1):min(n,b_length)
26
+
24
27
  y1=y1+x(n-k+1)*b(k);
25
28
  end
26
29
 
27
30
 
31
+ %for m=1:a_length
32
+ for m=max(1,n+1-x1):1:min(n,a_length)
33
+ y2=y2+y(n-m+1)*(-a(m));
34
+
35
+
28
36
  end
37
+ y=y1+y2;
38
+ end
39
+ plot(y)
29
40
 
30
41
  ```
31
42
 
32
- エラーの内容
33
- ```matlab
34
- 配列ンデックスは正の整数または logical 値でなければなりません。
43
+ ![メージ説明](bb3718e5bf174e9f084639300117a384.png)
35
-
36
- エラー: report2_b (行 25)
37
- y1=y1+x(n-k+1)*b(k);
38
- ```

1

追加

2021/08/09 02:17

投稿

kaeruuuun
kaeruuuun

スコア19

title CHANGED
File without changes
body CHANGED
@@ -25,7 +25,6 @@
25
25
  end
26
26
 
27
27
 
28
-
29
28
  end
30
29
 
31
30
  ```