资讯详情

fft(matlab)3

clc clear all fs=1*10^6; f=50*10^3; N=260;

L=1000; t=0:L-1; t=t/fs;

s=sin(2*pi*f*t);

a=abs((fft(s,N))); subplot(211); plot(t(1:100)*1000,s(1:100)); xlabel('时间(ms)'); ylabel('幅度(v)');

subplot(212) n=0:N-1; stem(n,a); xlabel('FFT位置; ylabel('FFT变换模块;

clc clear all fs=1*10^6; f1=50*10^3; f2=39.0625*10^3; N=260;

L=1000; t=0:L-1; t=t/fs;

s=sin(2*pi*f1*t) sin(2*pi*f2*t);

a=abs(fft(s,N));

subplot(211) plot(t(1:100)*1000,s(1:100)); xlabel('时间(ms)');ylabel('幅度(v)'); legend时域波形(频率叠加信号);

subplot(212) n=0:N-1; stem(n,a); xlabel('fft位置');ylabel('fft变换模块; legend频域波形(频率叠加信号);

f1=2; f2=2.05; fs=10;

N=128; n=0:N-1; xn1=sin(2*pi*f1*n/fs) sin(2*pi*f2*n/fs);

a=fft(xn1); a1=abs(a(1:N/2));

M=512; xn2=[xn1 zeros(1,M-N)]; b=fft(xn2); b1=abs(b(1:M/2));

n=0:M-1; xn3=sin(2*pi*f1*n/fs) sin(2*pi*f2*n/fs); c=fft(xn3); c1=abs(c(1:M/2));

subplot(321); x1=0:N-1; plot(x1,xn1);xlabel('n','fontsize',8);title('128点x(n)','fontsize',8); subplot(322); k1=(0:N/2-1)*fs/N; plot(k1,a1);xlabel('f(Hz)','fontsize',8);title('128点x(n)的fft','fontsize',8); subplot(323); x2=0:M-1; plot(x2,xn2);xlabel('n','fontsize',8);title(512点补零x(n)','fontsize',8); subplot(324); k2=(0:M/2-1)*fs/M; plot(k2,b1);xlabel('f(Hz)','fontsize',8);title(512点补零x(n)fft','fontsize',8); subplot(325); plot(x2,xn3);xlabel('n','fontsize',8);title('512点的x(n)','fontsize',8); subplot(326); plot(k2,c1);xlabel('f(Hz)','fontsize',8);title('512点的x(n)fft','fontsize',8);

fs=50*10^6; f1=1*10^6; f2=2*10^6; f3=3*10^6;

N=512; t=0:1/fs:511/fs; s1=sin(2*pi*f1*t); s2=sin(2*pi*f2*t); s3=sin(2*pi*f3*t); s=s1 s2 s3; a=abs(fft(s1,N)); a1=abs(fft(s2,N)); a2=abs(fft(s3,N)); a3=abs(fft(s,N)); subplot(411) plot(a); title('1mHz信号频谱'); subplot(412) plot(a1); title('2mHz信号频谱'); subplot(413) plot(a2); title('3mHz信号频谱');

subplot(414) plot(a3); title(合成信号频谱); s=s/max(abs(s)); da=round(s*127); L=8; fid=fopen('d:\data.txt','w'); for i=1:length(da) da1=dec2bin(da(i) (da(i)<0)*2^L,L) for j=1:L if da1(j)=='1' tb=1; else tb=0; end fprintf(fid,'%d',tb); end fprintf(fid,'\r\n'); end fprintf(fid,':'); fclose(fid);

dn=[100,zeros(1,511)];

plot(abs(fft(dn))); N=8; fid=fopen('d:\data.txt','w'); for i=1:length(dn) da1=dec2bin(dn(i) (dn(i)<0)*2^N,N) for j=1:N if da1(j)=='1' tb=1; else tb=0; end fprintf(fid,'%d',tb); end fprintf(fid,'\r\n'); end fprintf(fid,':'); fclose(fid);

4.

`timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 08:53:12 05/10/2021 // Design Name: // Module Name: fftm // Project Name: // Target Devices: // Tool versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // // module fftm( input clk, input start, output div, //dv成功 output [7:0]xk ///输出谱线位置 ); wire dv,rfd,done,busy,edone; wire [8:0]xk_index; wire [8:0] xn_index; wire [17:0] xk_im ; wire [7:0] sine; wire signed [17:0] dout; &nsp;   ddsm u0 (               .clk(clk), // input clk               .we(1'b1), // input we               .data(16'd1311), // input [15 : 0] data               .sine(sine) // output [7 : 0] sine             );

            mfft u1(               .clk(clk), // input clk               .start(start), // input start               .unload(1'b1), // input unload               .xn_re(sine), // input [7 : 0] xn_re               .xn_im(8'd0), // input [7 : 0] xn_im               .fwd_inv(1'b1), // input fwd_inv               .fwd_inv_we(1'b1), // input fwd_inv_we               .rfd(rfd), // output rfd               .xn_index(xn_index), // output [8 : 0] xn_index               .busy(busy), // output busy               .edone(edone), // output edone               .done(done), // output done               .dv(dv), // output dv               .xk_index(xk_index), // output [8 : 0] xk_index               .xk_re(dout), // output [17 : 0] xk_re               .xk_im(xk_im) // output [17 : 0] xk_im             );

            reg ce=0;

            always@(posedge clk)                  if(xk_index==256)                  ce<=1;                                   assign div=ce;

             reg signed [21:0] data_max=0;              reg [8:0] n=0;              reg  [8:0] p=0;              always@(posedge clk)               if((dv==1)&&(xk_index<256))   begin               if(dout>data_max) begin                   data_max<=dout;                   n<=xk_index;                   end                   end                   else begin                   p<=n;                   end            assign xk=p;  

6.

`timescale 1ns / 1ps // // Company:  // Engineer:  //  // Create Date:    18:55:32 05/11/2021  // Design Name:  // Module Name:    signed_detect  // Project Name:  // Target Devices:  // Tool versions:  // Description:  // // Dependencies:  // // Revision:  // Revision 0.01 - File Created // Additional Comments:  // // module signed_detect(     input clk,      input [7:0]rx_data,      output ce,      output reg [7:0] tx_data                 );                reg [30:0] cnt3=0;     reg clk9600hz=0;            always@(posedge clk )            if(cnt3==2603/*50*/)                 begin                 clk9600hz<=~clk9600hz;                 cnt3<=0;                 end             else               cnt3<=cnt3+1;         reg ce=0;          always@(posedge clk9600hz)           if((rx_data==8'haa)&&(div))              ce<=1;           else             ce<=0;

            reg [15:0]cn4=0;   reg  [4:0]s=0;     always@(posedge clk9600hz)          begin        if (cn4<9599)          cn4<=cn4+1;        else if (cn4==9599)         begin              cn4<=0;               s<=s+1;       end      end                                            always@(*)         case(s)         1:tx_data<=f1;         2:tx_data<=f2;         3:tx_data<=f3;        4:tx_data<=pow1[7:0];        5:tx_data<=pow1[15:8];        6:tx_data<=pow1[23:16];         7:tx_data<=pow1[31:24];         8:tx_data<=pow1[35:32];         9:tx_data<=pow2[7:0];        10:tx_data<=pow2[15:8];        11:tx_data<=pow2[23:16];         12:tx_data<=pow2[31:24];         13:tx_data<=pow2[35:32];         14:tx_data<=pow3[7:0];        15:tx_data<=pow3[15:8];        16:tx_data<=pow3[23:16];         17:tx_data<=pow3[31:24];         18:tx_data<=pow3[35:32];         default:tx_data<=8'hbb;         endcase                                               reg [7:0] f1;     reg [7:0]f2;    reg  [7:0] f3;         reg [35:0] pow1;     reg [35:0] pow2;    reg [35:0] pow3;               reg div; wire [8:0]xk_index;     wire signed [17:0]xk_re,xk_im;     wire[35:0]xk_rsq,xk_isq,power2;     reg[35:0]power3,power4;     reg dv1,dv2;     reg[8:0]xk_index1;     wire signed [7:0] xn;      wire signed [5:0]sine,sine1,sine2;           dds1 ua (   .clk(clk), // input clk   .we(1'b1), // input we   .data(16'd1311), // input [15 : 0] data   .sine(sine) // output [5 : 0] sine );               dds1 ub (   .clk(clk), // input clk   .we(1'b1), // input we   .data(16'd2323), // input [15 : 0] data   .sine(sine1) // output [5 : 0] sine );          dds1 uc (   .clk(clk), // input clk   .we(1'b1), // input we   .data(16'd3933), // input [15 : 0] data   .sine(sine2) // output [5 : 0] sine );                    assign xn=sine-sine1-sine2;               //例化512点FFT核     fft512 u1 (   .clk(clk), // input clk   .start(1'b1), // input start   .unload(1'b1), // input unload   .xn_re(xn), // input [7 : 0] xn_re   .xn_im(8'd0), // input [7 : 0] xn_im   .fwd_inv(1'b1), // input fwd_inv   .fwd_inv_we(1'b1), // input fwd_inv_we   .rfd(rfd), // output rfd   .xn_index(xn_index), // output [8 : 0] xn_index   .busy(busy), // output busy   .edone(edone), // output edone   .done(done), // output done   .dv(dv), // output dv   .xk_index(xk_index), // output [8 : 0] xk_index   .xk_re(xk_re), // output [17 : 0] xk_re   .xk_im(xk_im) // output [17 : 0] xk_im ); //计算谱线的功率,乘法运算二级流水     mult18 u2 (     .clk(clk), // input clk     .a(xk_re), // input [17 : 0] a     .b(xk_re), // input [17 : 0] b     .p(xk_rsq) // output [35 : 0] p     );     mult18 u3 (     .clk(clk), // input clk     .a(xk_im), // input [17 : 0] a     .b(xk_im), // input [17 : 0] b     .p(xk_isq) // output [35 : 0] p     );     assign power2=xk_rsq+xk_isq;          reg [8:0]xk_0;     reg dv_0;     always@(posedge clk)     begin      xk_0<=xk_index;      dv_0<=dv;      end            always@(posedge clk)         begin             dv1<=dv_0; //            dv2<=dv1;             power3<=power2;             power4<=power3;             xk_index1<=xk_0; //            xk_index2<=xk_index1;             end                reg [7:0] ft1;       reg [7:0] ft2;       reg [7:0] ft3;       reg [35:0]powt1;      reg  [35:0] powt2;      reg  [35:0] powt3;           

        reg [1:0] cnt=0;     always@(posedge clk)         //FFT变换完成,只判断正频率部分谱线         if((dv1)&(xk_index1<9'd256))begin         //判断是否出现波峰,且幅度大于0.03v的谱线         if((power3>power2)&(power3>power4)&(power3>36'd951327))        begin          if(cnt==0)           begin           ft1<=xk_index1;           powt1<=power3;           cnt<=cnt+1;           end           if(cnt==1)           begin           ft2<=xk_index1;           powt2<=power3;           cnt<=cnt+1;           end          if(cnt==2)           begin           ft3<=xk_index1;           powt3<=power3;           cnt<=3;           end          end          end         else         begin         cnt<=0;         ft1<=0;         ft2<=0;         ft3<=0;         powt1<=0;         powt2<=0;         powt3<=0;         end              always@(posedge clk)      if(xk_index1==256)         begin         f1<=ft1;           f2<=ft2;           f3<=ft3;           pow1<=powt1;           pow2<=powt2;           pow3<=powt3;           end                              always@(posedge clk)          if(cnt>0)             div<=1'b1;            else             div<=0;                                                          endmodule  

标签: isq电容笔原理

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台