Introduction
There are a few types of auditory filter, such as A-weighting(dB(A)), B-weighting, C-weighting, and D-weighting. These filters are commonly known by mechanical engineer.
However, do you know these filters can be modeled by the formula?
If you want to see all my lessons in English, please see below.
TopPage 振動騒音 研究所
MATLABとNVH(Noise, Vibration and Harshness)をこよなく愛する人生の先輩、それが私(MATLABパイセン)です。NVHを極めるにあたり、周辺の知識も網羅的に勉強することになり、その知識を共有すべく、本HPを運営しています。日本の製造業を応援すべく、機械エンジニアの「車輪の再開発」の防止と業務効率化の手助けをモットーに活動。専門である振動騒音工学や音響工学について、プログラムを示しながら解説。大学の授業よりもわかりやすく説明することを目指す。質問頂ければ、回答したいと思います。
Auditory filter
The formula is introduced in Wikipedia.
A-weighting - Wikipedia
A-weighting
B-weighting
C-weighting
D-weighting
Comparison of each filter
MATLAB code
Executable code
clear all;close all freq=10:10*10^3; filter_A=Audio_weighting_filter(freq,'A'); filter_B=Audio_weighting_filter(freq,'B'); filter_C=Audio_weighting_filter(freq,'C'); filter_D=Audio_weighting_filter(freq,'D'); figure semilogx(freq,20*log10(filter_A),'b','linewidth',4) grid on hold on semilogx(freq,20*log10(filter_B),'y','linewidth',4) semilogx(freq,20*log10(filter_C),'r','linewidth',4) semilogx(freq,20*log10(filter_D),'k','linewidth',4) legend('A-weighting','B-weighting','C-weighting','D-weighting') xlabel('Freq. Hz') ylabel('Gain dB')
function file
Personally, I wrote the code cleaner than usual because of the possibility of using auditory correction filters, which may be helpful for MATLAB beginners.
function filter=Audio_weighting_filter(freq,option) switch option case 'A' filter=A_filter(freq); case 'B' filter=B_filter(freq); case 'C' filter=C_filter(freq); case 'D' filter=D_filter(freq); end end function filter=A_filter(freq) RA=12194^2*freq.^4./................. ( (freq.^2+20.6^2).*( (freq.^2 + 107.7^2).*(freq.^2 + 737.9^2) ).^(1/2).*(freq.^2 + 12194^2) ); RA_1000=12194^2*1000.^4./................. ( (1000.^2+20.6^2).*( (1000.^2 + 107.7^2).*(1000.^2 + 737.9^2) ).^(1/2).*(1000.^2 + 12194^2) ); filter=RA./RA_1000; end function filter=B_filter(freq) RB=12194^2*freq.^3./................. ( (freq.^2+20.6^2).*( (freq.^2 + 158.5^2) ).^(1/2).*(freq.^2 + 12194^2) ); RB_1000=12194^2*1000.^3./................. ( (1000.^2+20.6^2).*( (1000.^2 + 158.5^2) ).^(1/2).*(1000.^2 + 12194^2) ); filter=RB./RB_1000; end function filter=C_filter(freq) RC=12194^2*freq.^2./................. ( (freq.^2+20.6^2).*(freq.^2 + 12194^2) ); RC_1000=12194^2*1000.^2./................. ( (1000.^2+20.6^2).*(1000.^2 + 12194^2) ); filter=RC./RC_1000; end function filter=D_filter(freq) h=( (1037918.48 -freq.^2).^2 + 1080768.16*freq.^2 )./.................. ( (9837328 - freq.^2).^2 + 11723776*freq.^2 ); filter=freq./(6.8966888496476*10^-5).*...................... sqrt( h./( (freq.^2+79919.29).*(freq.^2+1345600) ) ); end
コメント