質問編集履歴

5

追加

2021/08/09 14:02

投稿

kaeruuuun
kaeruuuun

スコア19

test CHANGED
File without changes
test CHANGED
@@ -30,21 +30,19 @@
30
30
 
31
31
  k1=length(x)+length(b)-1;
32
32
 
33
- y1=zeros(1,k1);
33
+ y1=zeros(1,N);
34
34
 
35
- y2=zeros(1,k1);
35
+ y2=zeros(1,N);
36
36
 
37
- %y1=0;
38
37
 
39
- %y2=0;
40
38
 
41
39
  x1=length(x);
42
40
 
43
- y=zeros(1,length(b)+length(a)+length(x)-1);
41
+ y=zeros(1,N);
44
42
 
45
43
 
46
44
 
47
- %for k=1:b_length
45
+
48
46
 
49
47
  for n=1:k1
50
48
 

4

追加

2021/08/09 14:02

投稿

kaeruuuun
kaeruuuun

スコア19

test CHANGED
@@ -1 +1 @@
1
- convを使わない畳み込み
1
+ 関数filterと自作のプログラムの不一致
test CHANGED
@@ -1,4 +1,6 @@
1
1
  MATLABの関数にあるconvを使わないで以下の式を実現したくてプログラムを作成しているのですが出力結果がうまくいかず解決方法に悩んでいます。教えていただけないでしょうか。1つ前にも同様の質問をしていますが、プログラムを修正しています。
2
+
3
+ 具体的にはフィルタ係数a,bを指定する際にa,bともに1より大きな値で指定するとfilter(b,a,x)でプロットした結果と一致するのですが、フィルタ係数を1より小さい値にしたときに一致しません。
2
4
 
3
5
  ```matlab
4
6
 
@@ -46,7 +48,7 @@
46
48
 
47
49
  for n=1:k1
48
50
 
49
- for k=max(1,n+1-x1):min(n,b_length)
51
+ for k=max(1,n+1-x1):min(n,b_length)
50
52
 
51
53
 
52
54
 
@@ -76,9 +78,7 @@
76
78
 
77
79
  plot(y)
78
80
 
79
-
81
+ xlim([0 50])
80
-
81
-
82
82
 
83
83
 
84
84
 
@@ -87,3 +87,9 @@
87
87
 
88
88
 
89
89
  ![イメージ説明](bb3718e5bf174e9f084639300117a384.png)
90
+
91
+
92
+
93
+ 左が自作のプログラムの結果で右がfilter関数を使った場合です。
94
+
95
+ ![イメージ説明](e4f6ff6ffa890cc4c16dbf31763d77bf.png)

3

追加

2021/08/09 02:49

投稿

kaeruuuun
kaeruuuun

スコア19

test CHANGED
File without changes
test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  y1=zeros(1,k1);
32
32
 
33
- y2=zeros(1,length(x)+length(a)-1);
33
+ y2=zeros(1,k1);
34
34
 
35
35
  %y1=0;
36
36
 
@@ -42,7 +42,7 @@
42
42
 
43
43
 
44
44
 
45
-
45
+ %for k=1:b_length
46
46
 
47
47
  for n=1:k1
48
48
 
@@ -50,7 +50,7 @@
50
50
 
51
51
 
52
52
 
53
- y1=y1+x(n-k+1)*b(k);
53
+ y1(n)=y1(n)+x(n-k+1)*b(k);
54
54
 
55
55
  end
56
56
 
@@ -60,9 +60,9 @@
60
60
 
61
61
  %for m=1:a_length
62
62
 
63
- for m=max(1,n+1-x1):1:min(n,a_length)
63
+ for m=max(1,n+1-x1):min(n,a_length)
64
64
 
65
- y2=y2+y(n-m+1)*(-a(m));
65
+ y2(n)=y2(n)+y(n-m+1)*(-a(m));
66
66
 
67
67
 
68
68
 
@@ -70,11 +70,15 @@
70
70
 
71
71
  end
72
72
 
73
- y=y1+y2;
73
+ y(n)=y1(n)+y2(n);
74
74
 
75
75
  end
76
76
 
77
77
  plot(y)
78
+
79
+
80
+
81
+
78
82
 
79
83
 
80
84
 

2

追加

2021/08/09 02:37

投稿

kaeruuuun
kaeruuuun

スコア19

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- MATLABの関数にあるconvを使わないで畳み込みをしたいのですが,プログラムを作成していてエラーが出解決方法に悩んでいます。教えていただけないでしょうか。
1
+ MATLABの関数にあるconvを使わないで以下の式実現したくてプログラムを作成しているのですが出力結果がうまくいかず解決方法に悩んでいます。教えていただけないでしょうか。1つ前にも同様の質問をしていますが、プログラムを修正しています。
2
2
 
3
3
  ```matlab
4
4
 
@@ -32,17 +32,23 @@
32
32
 
33
33
  y2=zeros(1,length(x)+length(a)-1);
34
34
 
35
+ %y1=0;
35
36
 
37
+ %y2=0;
36
38
 
37
39
  x1=length(x);
38
40
 
39
41
  y=zeros(1,length(b)+length(a)+length(x)-1);
40
42
 
41
- for n=1:k1
42
43
 
43
44
 
44
45
 
46
+
47
+ for n=1:k1
48
+
45
- for k=max(1,k1+1-x1):min(k1,b_length)
49
+ for k=max(1,n+1-x1):min(n,b_length)
50
+
51
+
46
52
 
47
53
  y1=y1+x(n-k+1)*b(k);
48
54
 
@@ -52,7 +58,23 @@
52
58
 
53
59
 
54
60
 
61
+ %for m=1:a_length
62
+
63
+ for m=max(1,n+1-x1):1:min(n,a_length)
64
+
65
+ y2=y2+y(n-m+1)*(-a(m));
66
+
67
+
68
+
69
+
70
+
55
71
  end
72
+
73
+ y=y1+y2;
74
+
75
+ end
76
+
77
+ plot(y)
56
78
 
57
79
 
58
80
 
@@ -60,16 +82,4 @@
60
82
 
61
83
 
62
84
 
63
- エラーの内容
64
-
65
- ```matlab
66
-
67
- 配列ンデックスは正の整数または logical 値でなければなりません。
85
+ ![メージ説明](bb3718e5bf174e9f084639300117a384.png)
68
-
69
-
70
-
71
- エラー: report2_b (行 25)
72
-
73
- y1=y1+x(n-k+1)*b(k);
74
-
75
- ```

1

追加

2021/08/09 02:17

投稿

kaeruuuun
kaeruuuun

スコア19

test CHANGED
File without changes
test CHANGED
@@ -52,8 +52,6 @@
52
52
 
53
53
 
54
54
 
55
-
56
-
57
55
  end
58
56
 
59
57