音を消す方法

8 ビュー (過去 30 日間)
Kaede
Kaede 2020 年 8 月 27 日
コメント済み: Kaede 2020 年 9 月 1 日
このようなグラフの場合青のグラフの1k,2k辺りの音というか周波数帯域を消す方法はありますか。
  2 件のコメント
Kaede
Kaede 2020 年 8 月 27 日
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 2020 年 8 月 28 日
バンドストップフィルターを使うのが良いと思うのですが,1k,2k辺りであればフィルター仕様はどのように設定するのが良いですか?
帯域を広くしてやってみたのですが1,2kを削減するのにこれぐらいでもありでしょうか?
個人差があるような質問で申し訳ございません.

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

採用された回答

Naoya
Naoya 2020 年 8 月 31 日
シンプルな方法としては、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 件のコメント
Mikio Muramatsu
Mikio Muramatsu 2020 年 9 月 1 日
> 周波数上では1,2kHzの音が消えているように見えるのですが,オレンジのロードノイズが大きいため,あまり元の音との違いがありません.
> 私がやりたいこととしては元の音との差をつけたいのですがなかなか難しいと感じております.
具体的にどのような差をつけたいか教えていただけますでしょうか?
例:聴感上、音声を聞こえやすくしたい / ロードノイズに埋もれている○○の音が聞こえるようにしたい、など。
1-2kHzを消す理由なども合わせてお聞かせいただけると幸いです。
Kaede
Kaede 2020 年 9 月 1 日
私がやりたいこととしては青のグラフの1,2kだけを大きくするためにBPFをかけることを検討していました.しかしあまりBPFでは持ち上げれなさそうなのでまず1,2kHz以外に阻止域10dB減衰のバンドパスを通して,全体をそのあと10dBあげれば1,2kHzが持ち上がるのではないかと検討しています.
質問としてはBPFで1,2kHzだけ10、20dB上げることは可能か.
1,2kHz以外を10dBさげるBPFをかけることは可能か
です.
画像は1,2kHz以外を10dBさげるBPFのつもりですがフィルターデザイナーの使い方が良くわかってないので自信がないです.

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

その他の回答 (0 件)

カテゴリ

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

製品

Community Treasure Hunt

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

Start Hunting!