任意采样率变化的简单处理

由于没有什么时间编写解释部分,详细查看源代码:

function [Out] = SampChang(In,OldSamp,NewSamp)
    len = length(In);
    oldInterval = 1/OldSamp;
    newInterval = 1/NewSamp;
    data = zeros(1,len*NewSamp/OldSamp);
    if(OldSamp > NewSamp)
        Fp=NewSamp/2; % 通带
        Fs=OldSamp; % 采样频率
        Rs=60; % 阻带衰减为60dB  
        Wn=Fp*2/Fs;
        % 切比雪夫II型滤波器  
        [C2b C2a]=cheby2(10,Rs,Wn,'low'); % 调用MATLAB cheby2函数快速设计低通滤波器   
        tmp=filter(C2b,C2a,In); % 进行低通滤波

        temp = 0;
        for(i=0:1:length(data)-1)
            for(k=temp:1:len-2)
                if(k*oldInterval <= i*newInterval && (k+1)*oldInterval >= i*newInterval)
                    k2 = (tmp(k+2) - tmp(k+1))/oldInterval;
                    d2 = tmp(k+2) - k2*(k+1)*oldInterval;
                    data(i+1) =  k2*i*newInterval + d2;
                    temp = k;
                end
            end
        end
    elseif(OldSamp < NewSamp)
        temp = 0;
        for(i=0:1:length(data)-1)
            for(k=temp:1:len-2)
                if(k*oldInterval <= i*newInterval && (k+1)*oldInterval >= i*newInterval)
                    k2 = (In(k+2) - In(k+1))/oldInterval;
                    d2 = In(k+2) - k2*(k+1)*oldInterval;
                    data(i+1) =  k2*i*newInterval + d2;
                    temp = k;
                end
            end
        end
        Fp=OldSamp/2; % 通带
        Fs=NewSamp; % 采样频率
        Rs=60; % 阻带衰减为60dB  
        Wn=Fp*2/Fs;
        % 切比雪夫II型滤波器  
        [C2b C2a]=cheby2(10,Rs,Wn,'low'); % 调用MATLAB cheby2函数快速设计低通滤波器   
        data=filter(C2b,C2a,data); % 进行低通滤波
    end
    Out = data;
end

  

原文地址:https://www.cnblogs.com/karl-wu/p/4765534.html