音声データからsignal duration,bandwidth,peak frequencyを抽出する方法

9 次查看(过去 30 天)
表題の件について,解決策をご存じの方がいらっしゃいましたら,ご回答いただけましたら幸いでございます.
以下,質問の詳細について述べさせていただきます.
現在,ある一つのパルス音のsignal duration,bandwidth,peak frequencyを抽出するために,以下のようなコードを書いています.
----------------------------------------------------------------------------------------------
wavファイルを読み込む
[wf, fs] = audioread(wavfile);
signal duration
n = length(wf);
sd = n./fs
帯域幅(‐3db)
bw = bandwidth(wf);
freq = [1:fs];
ピーク周波数
N=length(wf);
[freq_response,freq_index] = freqz(wf,1,N,fs); %N is the number of samples
pM = max(abs(freq_response)); %magnitude
pF = freq_index(abs(freq_response)==pM); %frequency
----------------------------------------------------------------------------------------------
おそらくpeak frequencyについては正しく出力できているのですが,signal durationとbandwidthのどちらか,あるいは両方が正しく出力されていないように思います.
理由は,出力された結果が「signal duration (ms) - bandwidth (kHz) × 2 = 0.002」という,一定の値になるからです.
例えば, bw=9554, sd=0.01911のようになり,「19.11 (ms) - 9.554 (kHz) × 2 = 0.002」といった具合です.
もし,コードのどこかに誤りがあるようでしたら,ご指摘いただければ幸いでございます.
また,そもそもsignal durationとbandwidthはこのような関係になるのか,あるいは,コードに誤りはなく,音声データに不具合があるのか,
といった点についても,ご教示いただけると幸いでございます.
お手数をおかけしますが,何卒よろしくお願いいたします.

采纳的回答

Atsushi Ueno
Atsushi Ueno 2022-6-21
nSamp = 50000; Fs = 8192;
x = chirp((0:nSamp-1)'/Fs,200,nSamp/Fs,2000); % 200Hz⇒2000Hz迄スイープした正弦波のサンプル音声データ
audiowrite('sample.wav',x,Fs); % サンプル音声ファイルの作成
[wf, fs] = audioread('sample.wav'); % サンプル音声ファイルの読込
>もし,コードのどこかに誤りがあるようでしたら,ご指摘いただければ幸いでございます.
MATLABのbandwidth関数の出力は「行列のバンド幅」で、「3 dB帯域幅」とは違います。
他のToolboxにもbandwidth関数がありますが (bandwidth / bandwidth) 必要な入力はモデル等の型でベクトルではありません。
bandwidth(wf)
ans = 49999
powerbw関数にベクトル(1ch)/行列(複数ch)を入力すると「3 dB帯域幅」が得られます。(要Signal Processing Toolbox)
powerbw(wf, fs)
ans = 1.7870e+03
signal duration [s] (音声データの長さ) は間違いないです。
sd = length(wf)./fs % signal duration
sd = 6.1035
audioinfo('sample.wav') % sdの値がDurationと一致している
ans = struct with fields:
Filename: '/users/mss.system.YODQA7/sample.wav' CompressionMethod: 'Uncompressed' NumChannels: 1 SampleRate: 8192 TotalSamples: 50000 Duration: 6.1035 Title: [] Comment: [] Artist: [] BitsPerSample: 16
>そもそもsignal durationとbandwidthはこのような関係になるのか
「音声データの長さ」と「3 dB帯域幅」には直接的な関連はありません。
「音声データの長さ」と「行列のバンド幅」は、サンプル数が増える程長くなりバンド幅も増える相関関係があります。
  1 个评论
Tomo
Tomo 2022-6-22
ご丁寧に回答いただきまして,誠にありがとうございます.
解決いたしました.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Measurements and Spatial Audio 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!