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

12 visualizzazioni (ultimi 30 giorni)
Tsuduri
Tsuduri il 28 Nov 2022
Commentato: Tsuduri il 29 Nov 2022
以下のコードでローパスフィルタをかけた際、両対数グラフにおいてのパワースペクトルが殆ど減衰されていない状態です。
通過周波数を変更してもあまり変化が見られませんでした。
[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)に変えた際はしっかりと範囲外の部分が減衰しカットされているのが確認されました。
どこを改善すればローパスフィルタの場合にもしっかりと減衰及びカットされるでしょうか。

Risposta accettata

Atsushi Ueno
Atsushi Ueno il 28 Nov 2022
Modificato: Atsushi Ueno il 28 Nov 2022
>どこを改善すればローパスフィルタの場合にもしっかりと減衰及びカットされるでしょうか
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 Commento
Tsuduri
Tsuduri il 29 Nov 2022
明確な減衰が見られました。ありがとうございます。

Accedi per commentare.

Più risposte (0)

Prodotti


Release

R2022a

Community Treasure Hunt

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

Start Hunting!