FFT—音频频谱设计

本文介绍了使用FPGA进行音频信号处理,通过快速傅里叶变换(FFT)算法获取信号的频域特征。利用Altera FFT IP核对音频信号进行FFT变换,并将结果显示在4.3寸RGB TFT-LCD上。系统包括锁相环模块、音频接口控制、FFT计算以及LCD显示等关键部分。
摘要由CSDN通过智能技术生成

1. 频谱简介

频谱:信号的一种新的表示方法

1.1 FFT简介

在数字信号处理中常常需要用到离散傅里叶变换(DFT),以获取信号的频域特征。传统的DFT算法计算量大,耗时长,不利于计算机实时对信号进行处理。
FFT是一种DFT的高效算法,称为快速傅里叶变换(Fast Fourier Transform),它是根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅里叶变换的算法进行改进获得的。
假设信号频率为F,采样频率为Fs,采样点数为N:
那么FFT之后结果就是N个复数;
每一个复数对应着一个频率点,频率间隔(分辨率)为Fs/N
第一个点表示直流分量(频率为0Hz),第n个点频率为Fn=(n-1)*Fs/N
各频率点下复数的模值,就是该频率下正弦信号的幅度特性;
FFT结果具有对称性,通常我们只使用前半部分的结果。
在这里插入图片描述

2. 程序设计

使用FPGA开发板采集音频信号,然后使用Altera FFT IP核对输入的音频信号进行傅里叶变换,并将其频谱显示到4.3寸RGB TFT-LCD上。

2.1 系统框图

在这里插入图片描述

2.2 源码

module FFT_audio_lcd(
    input           sys_clk,
    input           rst_n,
                    
    // WM8978接口
    output          aud_mclk,
    input           aud_bclk,               
    input           aud_lrc,               
    input           aud_adcdat,               
    output          aud_dacdat,               
    output          aud_scl,               
    inout           aud_sda,
    
    //LCD接口
    output          lcd_hs,
    output          lcd_vs,
    output          lcd_de,
    output [15:0]   lcd_rgb,
    output          lcd_bl,
    output          lcd_rst,
    output          lcd_pclk
    );

//wire define
wire        clk50M;
wire        clk10M;

wire        audio_valid;      
wire [15:0] audio_data;

wire        fft_sop;
wire        fft_eop;
wire        fft_valid;
wire [15:0] fft_data;

//*****************************************************
//**                    main code
//***************************************************** 

//锁相环模块
pll pll_inst (
    .inclk0             (sys_clk),
    
    .c0                 (aud_mclk),
    .c1                 (clk50M),
    .c2                 (clk10M)
    );
 
//例化WM8978控制模块
wm8978_ctrl u_wm8978_ctrl(
    .clk                (clk50M),
    .rst_n              (rst_n),

    .aud_bclk           (aud_bclk),     // WM8978位时钟
    .aud_lrc            (aud_lrc),      // 对齐信号
    .aud_adcdat         (aud_adcdat),   // 音频输入
    .aud_dacdat         (aud_dacdat),   // 音频输出

    .aud_scl            (aud_scl),      // WM8978的SCL信号
    .aud_sda            (aud_sda),      // WM8978的SDA信号

    .dac_data           (audio_data),   // 输出的音频数据
    .adc_data           (audio_data),   // 输入的音频数据
    .rx_done            (audio_valid),  // 一次接收完成
    .tx_done            ()              // 一次发送完成
    );
                   
//对输入的音频数据进行傅里叶变换
FFT_top FFT_u(
    .clk_50m            (clk50M),
    .rst_n              (rst_n),
        
    .audio_clk          (aud_bclk),
    .audio_data         (audio_data),
    .audio_valid        (audio_valid),
        
    .data_modulus       (fft_data),
    .data_sop           (fft_sop),
    .data_eop           (fft_eop),
    .data_valid         (fft_valid)
    );

//RGB_LCD 显示模块
LCD_top LCD_u(
    .clk50M             (clk50M),
    .clk10M             (clk10M),
    .rst_n              (rst_n),
        
    .lcd_hs             (lcd_hs),
    .lcd_vs             (lcd_vs),
    .lcd_de             (lcd_de),
    .lcd_rgb            (lcd_rgb),
    .lcd_bl             (lcd_bl),
    .lcd_rst            (lcd_rst),
    .lcd_pclk           (lcd_pclk),
                            
    .fft_data           (fft_data),
    .fft_sop            (fft_sop),
    .fft_eop            (fft_eop),
    .fft_valid          (fft_valid)
    );
    
endmodule 

子模块详见FFT—音频频谱设计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值