WAVファイル音源にローパスフィルタをかけた場合に、ハイパスフィルタ等に比べパワースペクトルがあまり減衰されないことを改善したいです
6 views (last 30 days)
Show older comments
以下のコードでローパスフィルタをかけた際、両対数グラフにおいてのパワースペクトルが殆ど減衰されていない状態です。
通過周波数を変更してもあまり変化が見られませんでした。
[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)に変えた際はしっかりと範囲外の部分が減衰しカットされているのが確認されました。
どこを改善すればローパスフィルタの場合にもしっかりと減衰及びカットされるでしょうか。
0 Comments
Accepted Answer
Atsushi Ueno
on 28 Nov 2022
Edited: Atsushi Ueno
on 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('パワースペクトル')
More Answers (0)
See Also
Categories
Find more on フィルターの設計 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!