Untitled

mail@pastecode.io avatar
unknown
plain_text
17 days ago
1.8 kB
2
Indexable
Never
function create_filters()
    fs = input('Enter the sampling frequency fs (Hz): ');
    N = input('Enter the number of samples N: ');
    filter_type = input('Enter filter type (LPF, HPF, BPF, BSF): ', 's');

    switch filter_type
        case 'LPF'
            cutoff_freq = input('Enter cutoff frequency (Hz): ');
        case 'HPF'
            cutoff_freq = input('Enter cutoff frequency (Hz): ');
        case 'BPF'
            cutoff_freq1 = input('Enter lower cutoff frequency (Hz): ');
            cutoff_freq2 = input('Enter upper cutoff frequency (Hz): ');
        case 'BSF'
            cutoff_freq1 = input('Enter lower cutoff frequency (Hz): ');
            cutoff_freq2 = input('Enter upper cutoff frequency (Hz): ');
        otherwise
            error('Invalid filter type entered.');
    end


    DF = (0:N-1) / N;
    DF = DF - 0.5;


    CF = DF * fs;


    H = zeros(1, N);
    switch filter_type
        case 'LPF'
            H(abs(DF) < cutoff_freq/fs) = 1;
        case 'HPF'
            H(abs(DF) > cutoff_freq/fs) = 1;
        case 'BPF'
            H((abs(DF) > cutoff_freq1/fs) & (abs(DF) < cutoff_freq2/fs)) = 1;
        case 'BSF'
            H((abs(DF) < cutoff_freq1/fs) | (abs(DF) > cutoff_freq2/fs)) = 1;
    end


    figure;
    subplot(2,1,1);
    stem(DF, H);
    title(['Filter Profile in DF Domain (' filter_type ')']);
    xlabel('Normalized Discrete Frequency');
    ylabel('Magnitude');
    xlim([-0.5 0.5]);

    subplot(2,1,2);
    plot(CF, H, 'LineWidth', 2);
    title(['Filter Profile in CF Domain (' filter_type ')']);
    xlabel('Continuous Frequency (Hz)');
    ylabel('Magnitude');
    xlim([-fs/2 fs/2]);

    saveas(gcf, [filter_type '_Filter_N' num2str(N) '_fs' num2str(fs) '.png']);
end
Leave a Comment