質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

Q&A

1回答

302閲覧

ある範囲内における、10点の和が閾値を超えたところから音声を切り取りたい

sohuran

総合スコア4

MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

0グッド

0クリップ

投稿2017/10/02 11:29

matlabを使用し音声について研究しているのですが、
音声の出力が出ている部分だけを切り取るために、値を二乗し、その音声データの範囲内で10サンプルの和を取って、その値が閾値を超えたことを基準にして切り取り始めと終わりを設定したいのですが、なかなかうまくプログラムをかけません。
どなたかいいプログラムの例はありませんでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2017/10/03 03:23 編集

10サンプルと切り取りはじめの位置関係はどうなってますか?たとえばnサンプル目に対してn-9~nの和が閾値を超えたらnを切り取り始めにしたい、など
guest

回答1

0

こんな感じでしょうか。

% 仮定
%(1):シグナルaの長さは10の倍数
%(2):始まりと終わりの部分が必ず対。

% シグナルの例
t=linspace(0,10,1000);
a = sin(2pit)+2cos(3pit)+4sin(4pit).cos(12pit);
a=(exp(-10
(t-5).^2)+exp(-20*(t-8).^2)).a + 0.01max(a)*randn(size(a));

%% Main
tol=0.1;% ここを小さくし過ぎるとノイズも拾ってしまいます。お手持ちのデータにあわせて調整してください。

idx=(sum(reshape(a(:).^2,10,length(a)/10),1)>tol);
idx=repmat(idx,10,1);idx=idx(:);% idx は音声部分で1それ以外で0となるように作成した。
b = a; b(~idx)=nan;% b:aの音声部分ではない箇所にnanを代入

%% 結果の表示
plot(t,a,'b')% オリジナルシグナル
hold on
plot(t,b,'r')% 音声部分を抽出したもの
hold off

投稿2017/10/03 02:46

編集2017/10/04 00:58
WathMorks

総合スコア1582

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問