91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 3KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2021-06-14
  • 語言: 其他
  • 標簽: FFT??STM32??AD采集DMA??

資源簡介

1.使用ADC采集音頻信號 2.使用官方提供的FFT函數對采集到的信號進行處理 3.量化顯示 4,在人耳能聽到的頻率范圍(20-20KHz)中,故我們設置采樣頻率為44100Hz(根據采樣定理,采樣頻率要大于信號最大頻率的兩倍,才能保證不失真)來采集這0-20KHz的音頻信號。我們把采樣點數設置為1024個點,那么在進行1024點FFT時,將得到44100Hz / 1024 = 43Hz的頻率分辨率

資源截圖

代碼片段和文件信息

/******************************************************************************

??????????????????版權所有?(C)?2015-2050?廈門優勝衛廚有限公司

?******************************************************************************
??文?件?名???:?myfft.c
??版?本?號???:?初稿
??作????者???:?zgj
??生成日期???:?2020年4月24日
??最近修改???:
??功能描述???:?快速傅里葉變換算法——STM32F1+DSP庫實現
??函數列表???:
??修改歷史???:
??1.日????期???:?2020年4月24日
????作????者???:?zgj
????修改內容???:?創建文件

******************************************************************************/
#include?“myfft.h“
#include?“math.h“
#include?“mycfg.h“
#include?“stm32_dsp.h“
#include?“table_fft.h“
#include?“dbg.h“
#include?“osif.h“
#include?“com.h“


void?InitBufInArray(void);
void?GetPowerMag(void);
void?FFT_Stop(void);
void?FFT_Start(void);

/*
由于FFT計算出來的數據是對稱的,因此通常而言輸出數組取一半的數據,為lBufOutArray[NPT/2]。
*/
#define? SPECTRUM_WND_SIZE?? 32?//窗口數
#define? THRESHOLD_WINDOW_SIZE??16???//均值窗口數
#define? MULTIPLIER 1.0f????//增益系數

u16?wndNum?=?0;

u16??ADC_Value[NPT];
u32?lBufInArray[NPT];???????//
u32?lBufOutArray[NPT];

u32?lBufMagArray[NPT/2];???//當前幅值
u32?lastSpectrum[NPT/2];???//上一次幅值???差值處理使用

u8?ucmagarry[37];

u16?spectralFlux[SPECTRUM_WND_SIZE];?//前后差值
u16?threshold[SPECTRUM_WND_SIZE];???//均值閾值
u16?peakSpectrum[SPECTRUM_WND_SIZE];?//節拍值


uint8?adc_dma_ok?=0;????//標記ADC_DMA傳輸完成


void?myfft_init(void)
{
????/*?Enable?ADC1?and?GPIOC?TIM1?DMA1?clock?*/
????RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC?ENABLE);
????RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1ENABLE);??????//使能DMA1時鐘
????RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1??ENABLE);
????RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1??ENABLE);
????gpio_config(GPIOCGPIO_Pin_0GPIO_Mode_AIN);?//pc0
????dma_config(DMA1_Channel1?(u32)&ADC1->DR(u32)&ADC_ValueNPT);
????nvic_config(DMA1_Channel1_IRQn?0?0);
????adc_config(ADC1RCC_PCLK2_Div8);//adc1?-an10????64mhz/8=?8mhz???最大14M
????TIM_PWM_Config(TIM1?22?63?60?TIM_Channel_1);?//samplingRate:44100hz??64M/(63+1)(22+1)
????FFT_Start();

????//InitBufInArray();
}


void?DMA1_Channel1_IRQHandler(void)
{
????FFT_Stop();
adc_dma_ok?=?1; //標記ADC_DMA傳輸完成
}


/*?函數名稱:void?FFT_Start(void)
?*?功能描述:FFT數據采集的啟動
?*?參數:無
?*?返回值:無
?*/
void?FFT_Start(void)
{
/*啟動ADC的DMA傳輸,配合定時器觸發ADC轉換*/
DMA_Cmd(DMA1_Channel1?ENABLE);
/*開啟定時器,用溢出時間來觸發ADC*/
TIM_Cmd(TIM1?ENABLE);
}

/*?函數名稱:void?FFT_Stop(void)
?*?功能描述:FFT數據采集的停止
?*?參數:無
?*?返回值:無
?*/
void?FFT_Stop(void)
{
/*停止ADC的DMA傳輸*/
DMA_Cmd(DMA1_Channel1?DISABLE);
????DMA_ClearITPendingBit(DMA_IT_HT);
????DMA_ClearITPendingBit(DMA1_IT_TC1);????????//清除中斷標志位
/*停止定時器*/
TIM_Cmd(TIM1?DISABLE);
}


/*****************************************************************************
?函?數?名??:?InitBufInArray
?功能描述??:?模擬采樣數據,采樣數據中包含3種頻率正弦波(350Hz,8400Hz和18725Hz)

?輸入參數??:?無
?輸出參數??:?long?*lBufInArray
?返?回?值??:
?調用函數??:
?被調函數??:

?修改歷史??????:
??1.日????期???:?2020年4月24日
????作????者???:?zgj
????修改內容???:?新生成函數

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????????288??2020-05-06?15:17??myfft.h
?????文件????????8144??2020-05-13?15:14??myfft.c

評論

共有 條評論