2012-01-26 11 views
1

だから私はMATLABで迅速なスクリプトを書いたが、私が思っていた何ME-specgramが振幅フィルタリング - MATLAB R2008aの

function spectro(filename,maxFreq) 

wavchunksizefix(filename); 

[y,fs] = wavread(filename); 

subplot(2,1,1); 
plot(y); 
ylim([0 1]); 
title('Signal Amplitude'); 

subplot(2,1,2); 
specgram(y,1024,fs); 
ylim([0 maxFreq]); 
cb = colorbar; 
set(get(cb,'title'),'string','dB'); 
title('Original Signal Spectrogram'); 

のためにいくつかの可視化を行う(specgramがを変更しない方法this-である)だけを出力するには、show特定のdB範囲?今では、0〜40 dBの範囲で不必要なノイズがたくさん表示され、0〜-50 dBしか表示されません(残念ながら、私は新しいので、サンプル画像を投稿できません)。

+0

yimはylimを使っていますが、zlimコマンドを試してみてください。それがあなたの望むことをしないなら、specgram(data = specgram(。。))からデータを抽出し、プロットする前に手動で閾値を設定してください。 – learnvst

+0

Specgram()の出力データは一連の複素数です。彼らがなぜ複雑な数字なのか完全に理解していないので、まずそれを理解しなければならないでしょう。 – user1172075

+0

スペクトログラムは各エポックの周波数ビンごとに振幅成分と位相成分を与えるので、値は複雑です。 spectrogramコマンドを使用してプロットすると、surf(20 * log10(abs(spectrogram_output)))を実行するのと同じことになります。 absコマンドは実数/複素数の値の対を大きさに変換し、対数項はそれをdbスケールに変換します。 – learnvst

答えて

0

非常にクール、ありがとうございます。私は40デシベルの上に信号をフィルタリングするためにこれを書いて、私がこれにspecgramが()を実行すると、動作しているようです

[y,fs] = wavread('matrecord.wav'); 
centerval = mean(y); 
gdb = 20*log10(y/centerval); 
ogv = (gdb > 40); 
x = y; 
x(ogv) = 0; 

をワーク・ようです。

関連する問題