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

📄 3.m

📁 用FFT对连续信号和时域离散信号进行谱分析的方法
💻 M
字号:
b=input('请选择信号:\n1:x1(n),2:x2(n),3:x3(n),4:x4(n),5:x5(n),6:x6(n),7:x4+x5,8:x4+jx5:\n');
i=0;
close all;
while(b)
 if b==6
     N=input('请选择FFT变换区长度N:16 or 32 or 64:\n');
     fs=64;
     n=0:N-1;
     x=cos(8*pi*n/fs)+cos(16*pi*n/fs)+cos(20*pi*n/fs);
 else
     N=input('请选择FFT变换区长度N:8 or 16:\n');
     if b==1
         x=[1 1 1 1 0 0 0 0];
     else if b==2
             x=[1 2 3 4 4 3 2 1 ];
             else if b==3
                x=[4 3 2 1 1 2 3 4];
                else if b==4
                     n=0:N-1;
                     x=cos(0.25*pi*n);
                   else if b==5
                       n=0:N-1;
                       x=sin((pi*n)/8);
                    else if b==7
                        n=0:N-1;
                        x=cos(n*pi/4)+sin(n*pi/8);
                       else if b==8
                        n=0:N-1;
                        x=cos(n*pi/4)+j*sin(n*pi/8);
                        end
                    end
                   end
                end
              end
            end
        end
    end
     
    f=fft(x,N);
    i=i+1;
    figure(i)
    printf(x,abs(f),abs(N),abs(b));
    if N==16
    if b==7
      k=conj(f);
      x4=(f+k)/2;
      figure(i+2)
      subplot(2,2,1);
      stem(abs(x4),'.');
      xlabel('k');
      ylabel('|X4(k)|');
      title('恢复后的X4(k)');
      x5=(f-k)/2;
      subplot(2,2,3);
      Stem(abs(x5),'.');
      xlabel('k');
      ylabel('|X5(k)|');
      title('恢复后的X5(k)');
     end
    if b==8
       k(1)=conj(f(1));
    for m=2:N
       k(m)=conj(f(N-m+2));
    end
    fe=(x+k)/2;
    fo=(x-k)/2;
        xr=ifft(fe,N);
        b=4;
        figure(i+1)
        printf(xr,abs(fe),abs(N),abs(b));
        xi=ifft(fo,N)/j;
        b=5;
        figure(i+2)
        printf(xi,abs(f),abs(N),abs(b));
    end
  end
   b=input('请选择信号 :\n  1:x1(n),2:x2(n),3:x3(n),4:x4(n),5:x5(n),6:x6(n),7:x7=x4+x5,8:x8=x4+jx5,0(退出 ):\n');
 
 end
画图子程序 
function printf(j,k,N,b)
subplot(2,2,1);
if(b~=8)
    if b==1|b==2|b==3
        M=3.2;
        n=0:7;
        stem(n,j,'.');
        n=0:7;
        m=zeros(8);
    else
        M=N*0.4;
        n=0:N-1;
        stem(n,j,'.');
        n=0:N-1;
        m=zeros(N);
    end
        hold on;
        plot(n,m);
        t=max(j);
        xlabel('n');
        string=['x',num2str(b),'(n)的波形'];
        ylabel('x(n)');
        text(M,(t*0.8),string);
     end
       subplot(2,2,3);
         n=0:N-1;
         stem(n,k,'.');
         t=max(k);
         xlabel('K');
         string=['x',num2str(b),'(n)的N=',num2str(N),'点FFT'];
         text((N*0.4),(t*0.8),string);
         ylabel('|X(k)|');

⌨️ 快捷键说明

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