窓関数のハニング(hannning)を使用せずにハニング窓を掛けたいのですが上手く行きません
-----------------------------------------------------
Fs = 48000;
FqA = 440;
FqB= 880;
time = Fs / 10;
n = 1:time;
tone(n) = 1 * sin (2 * pi * FqA * (n-1) / Fs);
n = time:Fs;
tone(n) = 0;
tone = repmat(tone, 1, 3)
n = 3 * Fs + 1:6 * Fs;
A = [ones(1, Fs) linspace(1, 0, Fs * 2)];
tone(n) = A .* sin (2 * pi * FqB * (n-1) / Fs);
soundsc(tone, Fs);
liner(n) = (n-1)/ time;
tone_win(n) = 0.5 * (1 - cos (2 * pi * tone(n)/ (n-1)) ) .* liner ;
soundsc(tone_win, Fs)
figure(1)
plot(tone)
figure(2)
plot(tone_win)
----------------------------------------------------------
tone_win(n) = 0.5 * (1 - cos (2 * pi * tone(n)/ (n-1)) ) .* liner ;
の部分でエラーが出てしまいます。上記のハニング窓の式は
http://en.wikipedia.org/wiki/Hann_function
を参考にしました。どうすればtone(n)をハニング窓に掛けることが出来ますか?
失礼だとは重々承知ですが、急を要しているのでアドバイスの回答でしたら結構です。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
三度Kulesです。
>失礼だとは重々承知ですが、急を要しているのでアドバイスの回答でしたら結構です。
私のことですか?(笑)
○○袋の人は親切にこたえてくれてよかったですね☆
とイヤミを書いていたら本当に消されてしまいそうなので、
本題に入ります。
tone_win(n) = 0.5 * (1 - cos (2 * pi * tone(n)/ (n-1)) ) .* liner ;
ですが、おそらく「行列のサイズが異なる」とか言われているんじゃないですか?
この式には少なくとも1か所致命的な間違いと、1か所のイヤな部分(表記的には怪しいけどエラーは出ないかもしれない)があります。
致命的な部分としてはlinerの要素数です。
>liner(n) = (n-1)/ time;
と書いているのでlinerはnと同じサイズと思いがちですが、違います。
その前に
>n = 3 * Fs + 1:6 * Fs;
としているので、nは144001~288000という整数値を取っています。
すると、
>liner(n) = (n-1)/ time;
というのは「linerというのはベクトルで、その144001番目から288000番目までは(n-1)/ timeにしますよ」という意味になります。
ところで、linerの1番目から144000番目はどうなっているでしょうか?まさか空行列ではありませんよね。配列のインデックスで指定する時、インデックスの最小値が1でない場合1からそこまでは0で埋められます。
したがって、linerは144000個のベクトルではなく288000個のベクトルになっているはずです。
このエラーを回避したければ、
>liner(n) = (n-1)/ time;
ではなく単に
>liner= (n-1)/ time;
とすればよいです。これでlinerとnのサイズはそろいますので。
もう一か所
tone(n)/ (n-1)も個人的には怪しいと思う
(基本的にベクトルを分母に持ってくる時は、行列の割り算つまり逆行列の掛け算になることが多いため、具体的に何が出てくるのかイメージしがたいです)けど、エラーなしで通ることもある(サイズとか他のものとの関係性次第)のでコメントは避けておきます(あなたの思っている通りの動作になっているかはわかりません。)
参考になれば幸いです。
No.1
- 回答日時:
Wikipediaにあるその式中の「N」がプログラム上で何にあたるか、よく考えてみましょう。
n ではありません。
あと、単に「エラーが出てしまいます」では何の解決にもなりません。
エラーが出たら、そのエラーメッセージを読めば、原因に近づけます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 in which or which...in? 2 2022/12/07 21:19
- 楽器・演奏 エフェクターについて質問です。 1つのボードの中にfree the toneのRJ-2とmad pr 1 2023/02/23 18:26
- 英語 GLOCK 19 Gen5 は、いつぐらいから FS(front serrations)が標準で装備 1 2023/03/13 13:05
- 洋画 GLOCK19Gen5にFS(front serrations)が標準で装備されるようになったのは? 1 2023/03/11 12:16
- 戦争・テロ・デモ GLOCK 19 Gen5 は、いつぐらいから FS(front serrations)が標準で装備 1 2023/03/14 22:12
- その他(ホビー) GLOCK19Gen5 と GLOCK19Gen5 MOS とで、マガジンの重さが10gも違うのは? 1 2022/05/08 16:20
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- 英語 下記の英文を日本語に訳してください。 1 2023/03/10 13:04
- 英語 『GLOCK 19 Gen5』と『GLOCK 19 Gen5 MOS』は、どこがどの様に違うのか? 2 2023/02/09 09:41
- 北アメリカ GLOCK 19 Gen5 と GLOCK 19 Gen5 MOS は、何がどう違うのでしょうか? 1 2023/02/23 19:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マクロで"#N/A"のエラー行を削...
-
UserForm1.Showでエラーになり...
-
VBA エクセル で FIND でのエラ...
-
VBAでfunctionを利用しようとし...
-
ACCESSで値を代入できないとは?
-
IE操作アプリでの終了理時のエ...
-
UWSCでエラー発生時の対処法に...
-
ExcelVBAのDoEventsによるエラー?
-
-2147418107 (&H80010005)
-
マクロの「SaveAs」でエラーが...
-
String""から型'Double'への変...
-
VBAとpythonの連携 xlwings エ...
-
ウェブマスターツールのエラー...
-
paizaで下記コードを提出すると...
-
エクセルVBAで今まで使えていた...
-
実行時エラー9:インデックス...
-
VB.NETでMessageBoxが表示され...
-
exitとreturnの使い分け
-
Python openpyxlを使用したセル...
-
LaTeXのエラーについて(コンパ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
VBAでfunctionを利用しようとし...
-
お助けください!VBAのファイル...
-
文字列内で括弧を使うには
-
実行時エラー 438 の解決策をお...
-
マクロで"#N/A"のエラー行を削...
-
On ErrorでエラーNoが0
-
エクセルVBA 「On Error GoTo...
-
VBA データ(特定値)のある最...
-
実行時エラー'-2147467259(8000...
-
【VBA】ワークブックを開く時に...
-
VBでSQL文のUPDATE構文を使った...
-
ACCESSで値を代入できないとは?
-
マクロの「SaveAs」でエラーが...
-
Excel vbaについての質問
-
インポート時のエラー「データ...
-
Filter関数を用いた結果、何も...
-
「実行時エラー '3167' レコー...
-
バッチファイルで、あるスクリ...
おすすめ情報