WAVファイル音源に​ローパスフィルタをか​けた場合に、ハイパス​フィルタ等に比べパワ​ースペクトルがあまり​減衰されないことを改​善したいです

5 ビュー (過去 30 日間)
Tsuduri
Tsuduri 2022 年 11 月 28 日
コメント済み: Tsuduri 2022 年 11 月 29 日
以下のコードでローパスフィルタをかけた際、両対数グラフにおいてのパワースペクトルが殆ど減衰されていない状態です。
通過周波数を変更してもあまり変化が見られませんでした。
[y,Fs] = audioread(['densya.wav'])
info = audioinfo('densya.wav')
size(y)
t = 0:seconds(1/Fs):seconds(info.Duration)
t = t(1:end-1)
yy=y(:,2)
z=lowpass(yy,100,Fs)
ft_y=fft(z)
df=1/info.Duration
f=0:df:df*(length(ft_y)-1)/2
FFs=length(ft_y)/2
ax=abs(ft_y(1:FFs))
loglog(f,ax),grid on
xlim([0 22.05*10^3])
xlabel('周波数[Hz]')
ylabel('パワースペクトル')
このうち
z=lowpass(yy,100,Fs) を z=highpass(yy,100,Fs)に変えた際はしっかりと範囲外の部分が減衰しカットされているのが確認されました。
どこを改善すればローパスフィルタの場合にもしっかりと減衰及びカットされるでしょうか。

採用された回答

Atsushi Ueno
Atsushi Ueno 2022 年 11 月 28 日
編集済み: Atsushi Ueno 2022 年 11 月 28 日
>どこを改善すればローパスフィルタの場合にもしっかりと減衰及びカットされるでしょうか
ImpulseResponse — インパルス応答のタイプを最小次数の無限インパルス応答 (IIR) フィルターにしました。
Steepness — 遷移帯域の急峻さ 引数を限りなく1に近づけてみました
load handel.mat % info.Duration = 8.9249
t = 0:seconds(1/Fs):seconds(8.9249);
t = t(1:end-1);
z=lowpass(y,100,Fs,'ImpulseResponse','iir','Steepness',0.99999);
ft_y=fft(z);
df=1/8.9249;
f=0:df:df*(length(ft_y)-1)/2;
FFs=ceil(length(ft_y)/2);
ax=abs(ft_y(1:FFs));
loglog(f,ax),grid on
xlim([0 22.05*10^3])
xlabel('周波数[Hz]')
ylabel('パワースペクトル')
  1 件のコメント
Tsuduri
Tsuduri 2022 年 11 月 29 日
明確な減衰が見られました。ありがとうございます。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchangeフィルターの設計 についてさらに検索

製品


リリース

R2022a

Community Treasure Hunt

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

Start Hunting!