⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.m

📁 冲激序列 阶跃序列 快速傅立叶变换 一个选择的MATLAB程序
💻 M
字号:
%实验1:信号、系统及系统响应
s = -1;
while(s<0)
    clc;
    s = input('选择实验步骤(默认1):\n[1]:时域采样序列分析\n[2]:系统和响应分析\n[3]:卷积定理验证\n[0]:退出\n选择:','s');
    switch(s)
        case{'1','2','3','0'}
            s = str2num(s);
        case {''}
            s = 1;
        otherwise
            s = -1;
    end
end
close all;

Xb = impseq(0, 0, 1);
Ha = stepseq(1, 1, 10);
Hb = impseq(0, 0, 3) + 2.5 * impseq(1, 0, 3) + 2.5 * impseq(2, 0, 3) + impseq(3, 0, 3);
i = 0;

while(s)
    %时域采样序列分析
    if(s==1)
        l = 1;
        k = 0;
        while(l)
            if(k==0)
                A = input('A=','s');
                A = str2num(A);
                if isempty(A)
                    A = 444.128;
                    disp(['输入错误,使用默认值A=', num2str(A)]);
                end
                a = input('a=','s');
                a = str2num(a);
                if isempty(a)
                    a = 50 * sqrt(2) * pi;
                    disp(['输入错误,使用默认值a=50*sqrt(2)*pi=', num2str(a)]);
                end
                w = input('w=','s');
                w = str2num(w);
                if isempty(w)
                    w = 50 * sqrt(2) * pi;
                    disp(['输入错误,使用默认值w=50*sqrt(2)*pi', num2str(w)]);
                end
            end
            k = k+1;
            fs = input('输入采样频率\nfs=','s');
            %fs=1000,300,200
            fs = str2num(fs);
            if isempty(fs)
                fs = 1000;
                disp('输入数据格式错误,使用默认值1000');
            else
                if(fs<1)
                    fs = 1000;
                    disp('输入无效数据,使用默认值1000');
                end
            end
            Xa = mainseq(A,a,w,fs);
            i = i + 1;
            string = ['fs=', num2str(fs), 'Hz'];
            figure(i)
            DFT(Xa, 50, string);
            
            l =input('是否继续(默认1)?\n[1]:继续实验1\n[0]:进行其它实验内容\n选择:','s');
            switch(l)
                case {'0','1'}
                    l = str2num(l);
                otherwise
                    l = 1;
            end
        end
    else
        %系统和响应分析
        if(s==2)
            l = input('系统和响应分析,请选择时域信号类型(默认1):\n[1]:内容②a\n[2]:内容②b\n[3]:内容②b中xc(n)的长度改为5\n[0]:退出\n选择:','s');
            switch(l)
                case {'1','2','3','0'}
                    l = str2num(l);
                otherwise
                    l = 1;
            end
            while(l)
                if(l==1)
                    m = conv(Xb, Hb);
                    N = 5;
                    i = i + 1;
                    figure(i)
                    string = 'h_b(n)';
                    Hs = DFT(Hb, 4, string);
                    i = i + 1;
                    figure(i)
                    string = 'x_b(n)';
                    DFT(Xb, 2, string);
                    string = 'y(n)=x_b(n)*h_b(n)';
                else
                    if(l==2)
                        m = conv(Ha, Ha);
                        N = 19;
                        string = 'y(n)=h_a(n)*h_a(n)';
                    else
                        if(l==3)
                            Xc = stepseq(1, 1, 5);
                            m = conv(Xc, Ha);
                            N = 14;
                            string = 'y(n)=x_c(n)*h_a(n)';
                        end
                    end
                end
                i = i + 1;
                figure(i)
                DFT(m, N, string);
                
                l = input('请再选择信号类型(默认1):\n[1]:内容②a\n[2]:内容②b\n[3]:内容②b中xc(n)的长度改为5\n[0]:退出\n选择:','s');
                switch(l)
                    case {'1','2','3','0'}
                        l = str2num(l);
                    otherwise
                        l = 1;
                end
            end
        %卷积定理验证
        else 
            if(s==3)
                A = 1;
                a = 0.4;
                w = 2.0734;
                fs = 1;
                Xa1 = mainseq(A, a, 2, fs);
                i = i + 1;
                figure(i)
                string = 'x_a_1(n)(A=1,a=0.4,T=1)';
                [Xs, w] = DFT(Xa1, 50, string);
                i = i + 1;
                figure(i)
                string = 'h_b(n)';
                Hs = DFT(Hb, 4, string);
                Ys = Xs .* Hs;
                y = conv(Xa1, Hb);
                N = 53;
                i = i + 1;
                figure(i)
                string = 'y(n)=x_a(n)*h_b(n)';
                [yy, w] = DFT(y, N, string);
                i = i + 1;
                figure(i)
                
                subplot(2, 2, 1)
                plot(w/pi, abs(yy));
                axis([-2 2 0 2.5]);
                xlabel('ω/π');
                ylabel('|Y(jw)|');
                title('FT[x_a(n)*h_b(n)]');
                
                subplot(2, 2, 3)
                plot(w/pi, abs(Ys));
                axis([-2 2 0 2.5]);
                xlabel('ω/π');
                ylabel('|Y_s(jw)|');
                title('FT[x_a(n)]·FT[h_b(n)]');
            end
        end
    end
    clc;
    s = input('选择实验步骤(默认1):\n[1]:时域采样序列分析\n[2]:系统和响应分析\n[3]:卷积定理验证\n[0]:退出\n选择:','s');
    switch(s)
        case{'1','2','3','0'}
            s = str2num(s);
        otherwise
            s = 1;
    end
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -