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

조회 수: 6 (최근 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 CenterFile Exchange에서 フィルターの設計에 대해 자세히 알아보기

제품


릴리스

R2022a

Community Treasure Hunt

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

Start Hunting!