音を消す方法

7 views (last 30 days)
Kaede
Kaede on 27 Aug 2020
Commented: Kaede on 1 Sep 2020
このようなグラフの場合青のグラフの1k,2k辺りの音というか周波数帯域を消す方法はありますか。
  2 Comments
Kaede
Kaede on 27 Aug 2020
clear;
[p1,fs]=audioread('40kph_RN.wav');
[p2,fs]=audioread('2000rpm_Knock.wav');
fs=44100;
p2(448512,[1 2]) = [0,0];
%smix=10*p1+p2/10;
%soundsc(smix,fs)
%filename='mix.wav';
%audiowrite(filename,smix,fs);
Lch_p1=p1(:,1);
Rch_p1=p1(:,2);
Lch_p2=p2(:,1);
Rch_p2=p2(:,2);
smix_Lch=10*Lch_p1+Lch_p2/10;
%soundsc(smix_Lch,fs)
filename='mix_Lch.wav';
audiowrite(filename,smix_Lch,fs);
smix_Rch=10*Rch_p1+Rch_p2/10;
%soundsc(smix_Rch,fs)
filename='mix_Rch.wav';
audiowrite(filename,smix_Rch,fs);
fft_p1L=fft(10*Lch_p1);
dB_p1L=mag2db(abs(fft_p1L));
fft_p1R=fft(10*Rch_p1);
dB_p1R=mag2db(abs(fft_p1R));
fft_p2L=fft(Lch_p2/10);
dB_p2L=mag2db(abs(fft_p2L));
fft_p2R=fft(Rch_p2/10);
dB_p2R=mag2db(abs(fft_p2R));
f = (0:length(fft_p1L)-1)*fs/length(fft_p1L);
figure(1)
semilogx(f,dB_p2L)
xlim([0 fs/2])
ylim([-100,100])
xlabel('frequency[Hz]')
ylabel('Magnitude[dB]')
hold on
semilogx(f,dB_p1L)
grid on, hold off
legend('2000rpm.knock','roadnoise');
figure(2)
semilogx(f,dB_p2R)
xlim([0 fs/2])
ylim([-100,100])
xlabel('frequency[Hz]')
ylabel('Magnitude[dB]')
hold on
semilogx(f,dB_p1R)
grid on, hold off
legend('2000rpm.knock','roadnoise');
使用しているプログラムはこちらです。
Kaede
Kaede on 28 Aug 2020
バンドストップフィルターを使うのが良いと思うのですが,1k,2k辺りであればフィルター仕様はどのように設定するのが良いですか?
帯域を広くしてやってみたのですが1,2kを削減するのにこれぐらいでもありでしょうか?
個人差があるような質問で申し訳ございません.

Sign in to comment.

Accepted Answer

Naoya
Naoya on 31 Aug 2020
シンプルな方法としては、Signal Processing Toolbox で提供される bandstop関数を利用できると思います。
サンプリング周波数 44.1KHz の信号において 1KHz ~ 2KHz の区間をカットするとう点では、下記の様な書式でフィルタ出力信号 y を得ることができます。
% バンドストップフィルタリング
[y,Hd] = bandstop(x, [1000, 2000], 44100);
% フィルタの周波数応答確認
freqz(aa, 8192, 44100)
周波数応答を確認しますと 設定した 1000, 2000Hz は 通過帯域端の周波数扱い (ほぼ0dB) となりますので、 1000Hz, 2000Hz もある程度減衰させる場合は、bandstop 関数で指定する幅をもう少し広げるのがよいかもしれません。
  3 Comments
Mikio Muramatsu
Mikio Muramatsu on 1 Sep 2020
> 周波数上では1,2kHzの音が消えているように見えるのですが,オレンジのロードノイズが大きいため,あまり元の音との違いがありません.
> 私がやりたいこととしては元の音との差をつけたいのですがなかなか難しいと感じております.
具体的にどのような差をつけたいか教えていただけますでしょうか?
例:聴感上、音声を聞こえやすくしたい / ロードノイズに埋もれている○○の音が聞こえるようにしたい、など。
1-2kHzを消す理由なども合わせてお聞かせいただけると幸いです。
Kaede
Kaede on 1 Sep 2020
私がやりたいこととしては青のグラフの1,2kだけを大きくするためにBPFをかけることを検討していました.しかしあまりBPFでは持ち上げれなさそうなのでまず1,2kHz以外に阻止域10dB減衰のバンドパスを通して,全体をそのあと10dBあげれば1,2kHzが持ち上がるのではないかと検討しています.
質問としてはBPFで1,2kHzだけ10、20dB上げることは可能か.
1,2kHz以外を10dBさげるBPFをかけることは可能か
です.
画像は1,2kHz以外を10dBさげるBPFのつもりですがフィルターデザイナーの使い方が良くわかってないので自信がないです.

Sign in to comment.

More Answers (0)

Products

Community Treasure Hunt

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

Start Hunting!