Different results using poctave and octaveFilter while obtaining a 1/3-octave rms pressure over frequency
    7 次查看(过去 30 天)
  
       显示 更早的评论
    
I'm aiming at obtaining a 1/3 octave band frequency signal for specific centre frequencies. I want to use Matlab's octaveFilter functionality but my results differ from using poctave with the same signals. How to get the same results?
        Fs = 48000;                         % Sampling rate
        t = 0:1/Fs:1-1/Fs;                  % Time vector of 1 second
        f = 1000;                           % Frequency of signal
        dpres = 1.415*sin(2*pi*f*t);        % Signal in [Pa]
        figure()
        [p,cf] = poctave(dpres,Fs,'FrequencyLimits',[3 5000],'BandsPerOctave',3);
        semilogx(cf,p,'ro-' )
        frCen = cf;
        [Spl,frCen] = CompOctSplFreq(dpres,frCen)
        figure()
        semilogx(frCen,Spl,'ro-')
        title('1/3-Octave Filtered SPL over Frequency')
        xlabel('Center Frequency of Octave Band Filter [Hz]')
        ylabel('SPL [dB]')
        % Plot delta
        figure();
        plot(p-Spl')
    function [Spl,frCen] = CompOctSplFreq(dpres,frCen)
                    % Reads singal in pressure over time
                    freqNum = length(frCen);
                    Fs = length(dpres);
                    % Setting up the 1/3-octave filters for all center frequencies
                    for f = 1:freqNum
                        octaveFilterBank{f} = octaveFilter(frCen(f),'1/3 octave','SampleRate',Fs,'FilterOrder',12);
                        % Filtering the signal with the corresponding filters
                        dpresFiltered(:,f) = octaveFilterBank{f}(dpres');
                        % Getting the average for each filter frequency band
                        drms(f) = sqrt(sum(dpresFiltered(:,f).^2)/length(dpresFiltered(:,f)));
                    end
                    % Converting the root mean square pressure to SPL            
                    pRef = 20e-06;                      % Reference pressure            
        %             Spl = 20*log10(drms/pRef); 
                    % For testing
                    Spl = drms;
                end
0 个评论
回答(1 个)
  Mark Thompson
      
 2024-1-8
        By default, poctave() utilises a filter order of 6. Your use of octaveFilter() specifies a filter order of 12. I think what you are seeing is slight differences in the BPFs used by each different octave filter function. Have you been able to resolve this issue, I'm also quite interested...
0 个评论
另请参阅
类别
				在 Help Center 和 File Exchange 中查找有关 Measurements and Spatial Audio 的更多信息
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

