搜索
bottom↓
回复: 86

LED随着音乐跳动电路(懂FFT的请进)

[复制链接]

出0入8汤圆

发表于 2011-3-6 15:09:36 | 显示全部楼层 |阅读模式
LED随着音乐跳动电路
    今天听了nobody很Hight ,感觉有个LED灯随着闪烁那该多好
但不知道怎么做??有做过的吗,指教一下


后加:
    刚才拿起数字信号课本看看,晕死了。
    想问一下不懂FFT能弄的出来吗??

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入8汤圆

 楼主| 发表于 2011-3-6 15:19:27 | 显示全部楼层
方案1:AD采样 PWM波控制MOS管

出0入0汤圆

发表于 2011-3-6 15:29:27 | 显示全部楼层
推荐压电陶瓷片  很久以前用过那样一个东西 具体电路不记得  那时候对三极管还没概念

出0入8汤圆

 楼主| 发表于 2011-3-6 15:39:18 | 显示全部楼层
找到一个


(原文件名:音乐控制电路.gif)

再得一图

(原文件名:LED闪烁.jpg)

电路主要由捡音器(驻极体电容器话筒),晶体管放大器和发光二极管等构成。
电路原理
静态时,VT1处于临界饱和状态,使VT2截止,LED1和LED2皆不发光,R1给电容话筒MIC提供偏置电流,话筒捡取室内环境中的声波信号后即转为相应的电信号,经电容C1送到VT1的基极进行放大,VT1、VT2组成两级直接耦合放大电路,只要选取合适的R2、R3使无声波信号。VT1处于临界饱和状态,而以使VT处于截止状态,两只LED中无电流流过而不发光,当MIC捡取声波信号后,就有音频信号注入VT1的基极,其信号的负半周使VT1退出饱和状态,VT1的集电极电压上升。VT2导通,LED1和LED2点亮发光,当输入音频信号较弱时,不足以使VT1退出饱和状态,LED1和LED2仍保持熄灭状态,只有较强信号输入时,以光二极管才点亮发光,所以,LED1和LED2能随着环境声音(如音乐、说话)信号的强弱起伏而闪烁发光。
元件清单
VT1、 VT2 9014(BT200) 话筒
R1 4.7K R2 1M
R3 10K C1 1uF/16V
C2 100uF/10V LED1、LED2 发光二极管
组装与调试:
1、按原理图画出装配图,然后按装配图进行装配。
2、注意三极管的极性不能接错,元件排列整齐、美观。
3、通电后先测VT的集电极电压,使其在0.2~0.4之间,如果该电压太低则施加声音信号后,VT1不能退出饱和状态,VT2则不能导通,如果该电压超过VT2的死区电压,则静态时VT2就导通,使LED1和LED2点亮发光,所以。对于灵敏度不同的电容话筒,以及β值不同的三极管,VT1的集电极电阻R3的大小要通过调试来确定。
4、离话筒约0.5米距离,用普通声音(音量适中)讲话时,LED1、LED2应随声音闪烁。如需大声说话时,发光管才闪烁发光,可适当减小R3的阻值,也可更换β值更大的三极管。


(原文件名:led3.jpg)


(原文件名:DIS.MUSIC3.jpg)

出0入0汤圆

发表于 2011-3-6 15:43:05 | 显示全部楼层
简单的用LM3915,我前段时间买了很多彩色灯条,一直没时间做,现在打算闲的时候用单片机做一个,ad转换后做软件三分频控制三色led上下跳跃,我的灯条每种颜色有21个灯,估计效果很好,只可惜工作太忙,不知猴年马月才有时间做

出0入8汤圆

 楼主| 发表于 2011-3-6 15:47:14 | 显示全部楼层
回复【5楼】dxdq  
简单的用lm3915,我前段时间买了很多彩色灯条,一直没时间做,现在打算闲的时候用单片机做一个,ad转换后做软件三分频控制三色led上下跳跃,我的灯条每种颜色有21个灯,估计效果很好,只可惜工作太忙,不知猴年马月才有时间做
-----------------------------------------------------------------------

我对音乐不懂痴痴问“ad转换后做软件三分频”,三分频干什么

出0入0汤圆

发表于 2011-3-6 15:57:01 | 显示全部楼层
三种颜色刚好可以对应高中低频呀,可以从三色灯的跳跃中体会到音乐中高中低频的力度变化,请参考以下网址的类似作品:http://www.doyoung.net/works/DISMUSIC3/index.html

出0入8汤圆

 楼主| 发表于 2011-3-6 16:10:57 | 显示全部楼层
回复【7楼】dxdq  
-----------------------------------------------------------------------
这个作品非常好,以前我以为很难呢;现在认为已经解决一半
但不知怎么把频率给分出来

后加入
原来用FFT来做的,我对数字信号处理一点都不懂。每次上数字信号课我就看其它的书。。。

出0入0汤圆

发表于 2011-3-6 16:30:03 | 显示全部楼层
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4105779&bbs_page_no=1&search_mode=3&search_text=format&bbs_id=9999

这是一个对音频电平的指示电路

如果做频率的

需要FFT

http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4529741&bbs_page_no=1&bbs_id=9999

出0入8汤圆

 楼主| 发表于 2011-3-6 16:38:04 | 显示全部楼层
回复【9楼】format  
-----------------------------------------------------------------------
最讨厌数字信号处理这门课了,整本书都是公式
现在又得重新拿起来 太难了看见那些公式就晕

(原文件名:0306_191631.jpg)


(原文件名:0306_191656.jpg)


(原文件名:0306_191712.jpg)

出0入0汤圆

发表于 2011-3-6 16:43:58 | 显示全部楼层
以前见到有人做过,用的是74HC4011,一个很简单的触发器电路就实现了,前段用的是一个麦克,通过麦克接收到的信号触发的,见到做的实物效果还是不错的,等有时间我找找图纸,不知道还在不在。

出0入8汤圆

发表于 2011-3-6 19:47:36 | 显示全部楼层
最近也在坛子里关注这个频谱显示,以前一直搞不清楚用什么原理
原来是FFT处理的
也跟楼主一样,回过头来看 数字信号处理 和高数:)

出0入96汤圆

发表于 2011-3-6 20:45:52 | 显示全部楼层
搜索一下,以前有个哥们发过频谱的

出0入8汤圆

 楼主| 发表于 2011-3-6 21:10:52 | 显示全部楼层
Your Father 的 "小弟新手-----8051 FFT (128点)音频频谱显示效果(6432点阵)"http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4542340&bbs_id=1006

出0入0汤圆

发表于 2011-3-6 21:44:53 | 显示全部楼层
LED随音乐跳动,有简单也有复杂的。
以前是模拟方式,简单的,就是用音乐输出,放大,整流,电压不同触发不同数量的二极管,实现跳动。
复杂的就是多路跳动,用带通滤波器,实现2、3或者更多路跳动,除了前面的带通外,其余的都一样。
那些音乐喷泉,音乐闪灯,也都是类似的原理,不过执行的器件不同。
现在的跳动,基本都是采用A/D以后,FFT变换,然后取几个特定的频率,读取幅值,去驱动LED点阵了。

出0入0汤圆

发表于 2011-3-6 22:00:26 | 显示全部楼层
学习

出0入0汤圆

发表于 2011-3-6 23:47:44 | 显示全部楼层

出0入0汤圆

发表于 2011-3-6 23:57:29 | 显示全部楼层
一般频点按指数特性增长,幅值驱动LED是对数特性,这样和人的耳朵特性相匹配。

出0入8汤圆

 楼主| 发表于 2011-3-7 00:10:19 | 显示全部楼层
回复【18楼】yuanbangyin 袁邦银
-----------------------------------------------------------------------

那请 袁邦银 给小弟指点指点吧

出0入0汤圆

发表于 2011-3-7 00:51:08 | 显示全部楼层
不懂FFT也可以做出来到,只要你做好A/D采集程序,将声音数据采集到数组(或者MP3里面是不用采集,直接提取WAV波形信号),然后借用现成的FFT程序进行处理(这个网上搜索一下吧,好像正点原子的程序不错),FFT程序要注意设置好采样率和采样点数,这样才能达到要求的频率分辨率和较快的速度(参见http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3944963&bbs_page_no=1&bbs_id=9999),然后按照倍频取几个频点,把幅值读取出来显示就可以了。

出0入0汤圆

发表于 2011-3-7 00:57:42 | 显示全部楼层
如果是模拟电路做,只要用运放搭出来几个带通滤波器,然后每个滤波器输出送几个比较器正端,比较器负端按照指数特性用电阻分压,输出接发光二极管,就可以实现了。当然这只是原理,有更简单的实现办法可以省掉比较器。

出0入0汤圆

发表于 2011-3-7 01:10:31 | 显示全部楼层
论坛里不是有个谐波分析的代码吗?借用一下分析音频就行。

出0入0汤圆

发表于 2011-3-7 02:36:17 | 显示全部楼层
好玩

出0入0汤圆

发表于 2011-3-7 10:22:22 | 显示全部楼层
别看那些骗人的公式。楼主可以找找小日本写的关于数字信号入门的小书。
很多人修过微积分,但真正知道微积分是啥的没有几个人。
对于FFT的变换,若搞不懂其本质,可以先学着优化程序应用。
等你有了感性认识,再慢慢深入研究DFT的意义。
掌握FFT只需有高中数学基础就可以了,那些砖头厚的书是骗人的。
同样对于要真正掌握微积分,只要初中基础就可以了。
当然啦你必需真正掌握并得到数学的精华----数学三板斧
说白了,数学家也只有三板斧。
因为他们掌握的技俩着实是太简单了,因此不得不化简为繁,让很多人学不透,否则又如何对得起领10多万/每年的薪水。

出0入264汤圆

发表于 2011-3-7 11:08:13 | 显示全部楼层
也想做的玩。

出0入0汤圆

发表于 2011-3-7 11:54:21 | 显示全部楼层
回复【24楼】zhousd 银河一号
-----------------------------------------------------------------------

别看那些骗人的公式。楼主可以找找小日本写的关于数字信号入门的小书。
很多人修过微积分,但真正知道微积分是啥的没有几个人。
对于FFT的变换,若搞不懂其本质,可以先学着优化程序应用。
等你有了感性认识,再慢慢深入研究DFT的意义。
掌握FFT只需有高中数学基础就可以了,那些砖头厚的书是骗人的。
同样对于要真正掌握微积分,只要初中基础就可以了。
当然啦你必需真正掌握并得到数学的精华----数学三板斧
说白了,数学家也只有三板斧。
因为他们掌握的技俩着实是太简单了,因此不得不化简为繁,让很多人学不透,否则又如何对得起领10多万/每年的薪水。
-----------------------------------------------------------------------


最后二句完全是奇谈怪论, 数学是一切科学理论的基础, 没有数学家很多问题是没有办法解决的, 看来你懂得太多太多了.

出0入0汤圆

发表于 2011-3-7 12:51:19 | 显示全部楼层
三个RC带通滤波器搞掂,有必有折腾FFT吗?这东西基本上不用MCU。

出0入0汤圆

发表于 2011-3-7 14:00:25 | 显示全部楼层
TO: 【26楼】 bigchn  
呵呵,那数学三板斧是无价之宝。哪位如果有能力让ZF把3000万RMB打入本人的账户中。
本人立马写书公布于世。

出0入8汤圆

 楼主| 发表于 2011-3-7 14:52:06 | 显示全部楼层
这个是Your Father的帖子上的程序
那位帮忙解释一下
#include<STC12C5A60S2.h>
#define uchar unsigned char
#define uint unsigned int
#define  channel  0x01            //设置AD通道为 P1.1
//---------------------------------------------------------------------
#define ADC_POWER   (1<<7)
#define ADC_SPEEDHH (0x03<<5)
#define ADC_START   (1<<3)
#define PADCH       (1<<5)
#define ADC_FLAG    (1<<4)
sbit  SDA_R=P1^2;
sbit  SDA_R_TOP=P1^3;
sbit  SDA_G=P1^4;
sbit  SDA_G_TOP=P1^5;
sbit  STCP=P1^6;
sbit  SHCP=P1^7;
//---------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------------
//放大128倍后的sin整数表(128)
code char SIN_TAB[128] = { 0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 59, 65, 70, 75, 80, 85, 89, 94, 98, 102,
                           105, 108, 112, 114, 117, 119, 121, 123, 124, 125, 126, 126, 126, 126, 126, 125, 124, 123, 121, 119, 117, 114, 112,
                           108, 105, 102, 98, 94, 89, 85, 80, 75, 70, 65, 59, 54, 48, 42, 36, 30, 24, 18, 12, 6, 0, -6, -12, -18, -24, -30,
                           -36, -42, -48, -54, -59, -65, -70, -75, -80, -85, -89, -94, -98, -102, -105, -108, -112, -114, -117, -119, -121,
                           -123, -124, -125, -126, -126, -126, -126, -126, -125, -124, -123, -121, -119, -117, -114, -112, -108, -105, -102,
                           -98, -94, -89, -85, -80, -75, -70, -65, -59, -54, -48, -42, -36, -30, -24, -18, -12, -6
                         };
//放大128倍后的cos整数表(128)
code char COS_TAB[128] = { 127, 126, 126, 125, 124, 123, 121, 119, 117, 114, 112, 108, 105, 102, 98, 94,
                           89, 85, 80, 75, 70, 65, 59, 54, 48, 42, 36, 30, 24, 18, 12, 6, 0, -6, -12, -18, -24, -30, -36, -42, -48, -54, -59,
                           -65, -70, -75, -80, -85, -89, -94, -98, -102, -105, -108, -112, -114, -117, -119, -121, -123, -124, -125, -126, -
                           126, -126, -126, -126, -125, -124, -123, -121, -119, -117, -114, -112, -108, -105, -102, -98, -94, -89, -85, -80,
                           -75, -70, -65, -59, -54, -48, -42, -36, -30, -24, -18, -12, -6, 0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 59, 65, 70,
                           75, 80, 85, 89, 94, 98, 102, 105, 108, 112, 114, 117, 119, 121, 123, 124, 125, 126, 126
                         };
//采样存储序列表
code char LIST_TAB[128] = { 0, 64, 32, 96, 16, 80, 48, 112,
                            8, 72, 40, 104, 24, 88, 56, 120,
                            4, 68, 36, 100, 20, 84, 52, 116,
                            12, 76, 44, 108, 28, 92, 60, 124,
                            2, 66, 34, 98, 18, 82, 50, 114,
                            10, 74, 42, 106, 26, 90, 58, 122,
                            6, 70, 38, 102, 22, 86, 54, 118,
                            14, 78, 46, 110, 30, 94, 62, 126,
                            1, 65, 33, 97, 17, 81, 49, 113,
                            9, 73, 41, 105, 25, 89, 57, 121,
                            5, 69, 37, 101, 21, 85, 53, 117,
                            13, 77, 45, 109, 29, 93, 61, 125,
                            3, 67, 35, 99, 19, 83, 51, 115,
                            11, 75, 43, 107, 27, 91, 59, 123,
                            7, 71, 39, 103, 23, 87, 55, 119,
                            15, 79, 47, 111, 31, 95, 63, 127
                          };
uchar COUNT=0,COUNT1=0,ADC_Count=0,LINE=15,G,T;
uchar i,j,k,b,p;
int Temp_Real,Temp_Imag,temp;                // 中间临时变量
uint TEMP1;
int xdata Fft_Real[128];
int xdata Fft_Image[128];               // fft的虚部
uchar xdata LED_TAB2[64];               //记录 漂浮物 是否需要 停顿一下
uchar xdata LED_TAB[64];                //记录红色柱状
uchar xdata LED_TAB1[64];               //记录 漂浮点
void Delay(uint a)
{
    while(a--)
    {
        ;
    }
}
void FFT()
{
    //uchar X;
    for( i=1; i<=7; i++)                            /* for(1) */
    {
        b=1;
        b <<=(i-1);                                       //碟式运算,用于计算 隔多少行计算 例如 第一极 1和2行计算,,第二级
        for( j=0; j<=b-1; j++)                              /* for (2) */
        {
            p=1;
            p <<= (7-i);
            p = p*j;
            for( k=j; k<128; k=k+2*b)                /* for (3) 基二fft */
            {
                Temp_Real = Fft_Real[k];
                Temp_Imag = Fft_Image[k];
                temp = Fft_Real[k+b];
                Fft_Real[k] = Fft_Real[k] + ((Fft_Real[k+b]*COS_TAB[p])>>7) + ((Fft_Image[k+b]*SIN_TAB[p])>>7);
                Fft_Image[k] = Fft_Image[k] - ((Fft_Real[k+b]*SIN_TAB[p])>>7) + ((Fft_Image[k+b]*COS_TAB[p])>>7);
                Fft_Real[k+b] = Temp_Real - ((Fft_Real[k+b]*COS_TAB[p])>>7) - ((Fft_Image[k+b]*SIN_TAB[p])>>7);
                Fft_Image[k+b] = Temp_Imag + ((temp*SIN_TAB[p])>>7) - ((Fft_Image[k+b]*COS_TAB[p])>>7);
                // 移位.防止溢出. 结果已经是本值的 1/64
                Fft_Real[k] >>= 1;
                Fft_Image[k] >>= 1;
                Fft_Real[k+b]  >>= 1;
                Fft_Image[k+b]  >>= 1;
            }
        }
    }
//  X=((((Fft_Real[1]* Fft_Real[1]))+((Fft_Image[1]*Fft_Image[1])))>>7);
    Fft_Real[0]=Fft_Image[0]=0;          //去掉直流分量
//   Fft_Real[63]=Fft_Image[63]=0;
    for(j=0; j<64; j++)
    {
        TEMP1=((((Fft_Real[j]* Fft_Real[j]))+((Fft_Image[j]*Fft_Image[j])))>>1);//求功率
        if(TEMP1>1)
        {
            TEMP1--;
        }
        else
        {
            TEMP1=0;
        }
        if(TEMP1>31)
        {
            TEMP1=31;
        }
        if(TEMP1>(LED_TAB[j]))
        {
            LED_TAB[j]=TEMP1;
        }
        if(TEMP1>(LED_TAB1[j]))
        {
            LED_TAB1[j]=TEMP1;
            LED_TAB2[j]=18;                     //停顿速度=12
        }
    }
}
void Init()
{
//-----------------------------------------------------------------------------------
    P1ASF = 0x02;                 //0000,0010, 将 P1.1 置成模拟口
    AUXR1 &=0xFB;                 //1111,1011, 令 ADRJ=0 (10位A/D转换结果的高8位放在ADC_RES寄存器, 低2位放在ADC_RESL寄存器)
    EADC=1;                       //AD中断打开
    ADC_CONTR = ADC_POWER | ADC_SPEEDHH | ADC_START | channel;
    //1110 1001   1打开 A/D (ADC_POWER)转换电源;11速度为70周期一次;
    //0中断标志清零;1启动adc(ADC_START);001AD通道打开(这里为P1.1);
//-----------------------------------------------------------------------------------
    P2M0=1;          //p2.0 推挽输出
    P0M0=1;          //p0.0 推挽输出
    TMOD=0X12;     //0001,0010 timer1 16bit mode   timer0 8bit reload
    TH0=0x30;      //大约20K的采样率(要完整频段需40K以上。但音频中10k以下居多,故本人选择20K采样,美观些)
    TL0=0x30;
    TH1=0xEE;
    TL1=0XC0;
    ET0=1;                        //定时器0 打开
    TR0=0;                        //关闭定时器
    ET1=1;
    TR1=1;
    PT1=0;
    PT0=1;         //timer0设置为高优先级
    IPH=PADCH;     //中断优先级高位
    IP=PADC;                         //中断优先级
    EA=1;                          //总中断打开
}
void ADC_Finish() interrupt 5
{
    ADC_CONTR &= !ADC_FLAG;
    Fft_Real[LIST_TAB[ADC_Count]]=(int)((ADC_RES)<<1)+(ADC_RESL>>1)-256;//-512; //按LIST_TAB表里的顺序,进行存储 采样值,,
    //  ADC_CONTR = ADC_POWER | ADC_SPEEDHH| ADC_START | channel;   // 为了采集负电压,采用 偏置采集。电压提高到1/2 vcc,,所以要减去256
    if(ADC_Count<=127)
    {
        ADC_Count++;
    }
    else {EADC=0; TR0=0;}
}
void LED_Display() interrupt 3                  //中断一次 显示一行。。。
{
    TH1=0xF3;
    TL1=0X00;

    for (G=0; G<64; G++)                      //往点阵屏填充 一行的 数据
    {
        if(LED_TAB[G]<=LINE+16)
        {
            SDA_R_TOP=1;
        }
        else
        {
            SDA_R_TOP=0;
        }
        if(LED_TAB[G]<=LINE)
        {
            SDA_R=1;
        }
        else
        {
            SDA_R=0;
        }
        if(LED_TAB1[G]==LINE)
        {
            SDA_G_TOP=1;
            SDA_G=0;
        }
        else if(LED_TAB1[G]==(LINE+16))
        {
            SDA_G_TOP=0;
            SDA_G=1;
        }
        else
        {
            SDA_G=SDA_G_TOP=1;
        }
        SHCP=1;
        SHCP=0;
    }
    STCP=1;
    STCP=0;
    P2=15-LINE;
    if(LINE>0)
    {
        LINE--;
    }
    else { LINE=15; }
    //////////////////////////

    if(LED_TAB[COUNT]>0)
    {
        LED_TAB[COUNT]--;    //柱状递减,
    }
    COUNT++;
    if(LED_TAB[COUNT]>0)
    {
        LED_TAB[COUNT]--;
    }
    COUNT++;
    if(LED_TAB[COUNT]>0)
    {
        LED_TAB[COUNT]--;
    }
    COUNT++;
    if(LED_TAB[COUNT]>0)
    {
        LED_TAB[COUNT]--;
    }
    COUNT++;
    if(LED_TAB[COUNT]>0)
    {
        LED_TAB[COUNT]--;    //柱状递减,
    }
    COUNT++;
    if(LED_TAB[COUNT]>0)
    {
        LED_TAB[COUNT]--;
    }
    COUNT++;
    if(LED_TAB[COUNT]>0)
    {
        LED_TAB[COUNT]--;
    }
    COUNT++;
    if(LED_TAB[COUNT]>0)
    {
        LED_TAB[COUNT]--;
    }
    COUNT++;
    if(COUNT>=64)
    {
        COUNT=0;
    }
    //漂浮物递减
    if(LED_TAB2[COUNT1]==0)                  //判断是否需要停顿
    {
        if(LED_TAB1[COUNT1]>LED_TAB[COUNT1])
        {
            LED_TAB1[COUNT1]--;    //大于柱状则递减(保持漂浮物在柱状之上)
        }
    }
    else { LED_TAB2[COUNT1]--; }
    COUNT1++;
    if(LED_TAB2[COUNT1]==0)
    {
        if(LED_TAB1[COUNT1]>LED_TAB[COUNT1])
        {
            LED_TAB1[COUNT1]--;
        }
    }
    else { LED_TAB2[COUNT1]--; }
    COUNT1++;
    if(LED_TAB2[COUNT1]==0)                  //判断是否需要停顿
    {
        if(LED_TAB1[COUNT1]>LED_TAB[COUNT1])
        {
            LED_TAB1[COUNT1]--;    //大于柱状则递减(保持漂浮物在柱状之上)
        }
    }
    else { LED_TAB2[COUNT1]--; }
    COUNT1++;
    if(LED_TAB2[COUNT1]==0)
    {
        if(LED_TAB1[COUNT1]>LED_TAB[COUNT1])
        {
            LED_TAB1[COUNT1]--;
        }
    }
    else { LED_TAB2[COUNT1]--; }
    COUNT1++;
    if(COUNT1>=64)
    {
        COUNT1=0;
    }
}
void Ad_Control() interrupt 1                    //控制采样率
{
    ADC_CONTR = ADC_POWER | ADC_SPEEDHH| ADC_START | channel;   //开始AD采集
}
//==============================================================================================================
// *******************                         main()                          *********************************
//===============================================================================================================
void main()
{
    Init();
    while(1)
    {
        ADC_Count=0;
        TR0=1;
        EADC=1;                                    //开启定时器中断0,,开启ADC
        while(ADC_Count<128)
        {
            ;
        }
        FFT();
        //FFT运算。并转换为 功率值。。。
        //  TR1=1;
    }
}

出0入0汤圆

发表于 2011-3-7 15:47:26 | 显示全部楼层
mark

出0入8汤圆

 楼主| 发表于 2011-3-7 19:38:02 | 显示全部楼层
这是我修改Your Father程序(改显示部分)
点击此处下载 ourdev_620748EWLER4.rar(文件大小:32K) (原文件名:FFT.rar)

出0入0汤圆

发表于 2011-3-7 20:11:03 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-7 21:10:43 | 显示全部楼层
FFT说高深也挺高深,要说简单那也非常的简单。
学习修练 FFT 必需掌握反变换 IFFT 技术,否则只懂上半部而不会下半部,应用上会受到很大的限制。
只懂上半部,可以作语音压缩和识别,但却做不了语音解压缩。
同样一个FFT算法程序,不同的人优化后的代码,执行的时间速度上会有10倍之差,这就是其中的技术细节。

出0入8汤圆

 楼主| 发表于 2011-3-8 09:00:58 | 显示全部楼层
回复【33楼】zhousd  银河一号
-----------------------------------------------------------------------
高手啊,能给大伙讲通俗一点吗

出0入8汤圆

 楼主| 发表于 2011-3-8 09:17:51 | 显示全部楼层
引用Your Father图片  
-----------------------------------------------------------------------

(原文件名:5.jpg)

这个电路是怎么实现电平平移的

出0入0汤圆

发表于 2011-3-8 09:47:50 | 显示全部楼层
电平指示电路,磁带机的年代有专门的集成电路完成这部分工作。

出0入0汤圆

发表于 2011-3-8 11:02:52 | 显示全部楼层
要想从高等数学书中学习到微积分的精华是不可能,因为写高数包括数学分析书的人也仅是
得到微积分发明者的皮毛。
其写成的书自然就成为了天书。要撑握微积分这种“术数”,没有学术数天赋的人不可能惨透。

现在的写书人,他们若已经接触到集合论,编写技术有关的书,必定会在其中章节晒一晒其集合是啥,
本人见着就恶心。

对于一些数字信号处理书,明明用初高中数学可以禅明的原理,却偏偏要用到微积分。
若非如此,又如何章显作者的高深学识。

要搞明白FFT必需要从DFT入手,也只有从DFT着手,才能完全把其搞透。
其中的关键思考点:
1。为什么要用sin 和cos?
2。 两个一起用有什么好处?若只用一个会产生什么样的结果?

若撑握了以上两个思考点的奥秘(这仅仅需要一些初高中的数学知识去证明),就真正是知其然知其所以然了。
对于理解加速算法FFT也就水到渠成了。呵呵。

出0入14汤圆

发表于 2011-3-8 13:43:24 | 显示全部楼层
回复【37楼】zhousd 银河一号
-----------------------------------------------------------------------

一能否开课讲解,AM一定会置酷的

出0入0汤圆

发表于 2011-3-8 14:14:22 | 显示全部楼层
回复【39楼】 Pjm2008
对于修练FFT未得要领精华者,大方向已点明,能否大彻大悟,就看各人的领悟力和自身努力了。

出0入8汤圆

 楼主| 发表于 2011-3-12 11:27:09 | 显示全部楼层
把FFT移植到STM32里了,但效果不是很好
点击此处下载 ourdev_621912O8EO1Y.rar(文件大小:4.56M) (原文件名:ST32 FFT.rar)

出0入8汤圆

 楼主| 发表于 2011-3-12 18:00:15 | 显示全部楼层

(原文件名:0312_175104.jpg)


(原文件名:0312_175119.jpg)


(原文件名:0312_175134.jpg)
录像
点击此处下载 ourdev_622001WV2DHP.rar(文件大小:3.00M) (原文件名:0312_174719.rar)

出0入0汤圆

发表于 2011-3-15 14:49:31 | 显示全部楼层
必须mark一下,好好看

出0入0汤圆

发表于 2011-3-15 19:28:20 | 显示全部楼层
不错的东东

出0入0汤圆

发表于 2011-3-15 20:55:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-15 22:54:41 | 显示全部楼层
为什么不用模拟的来做啊,三个频段的话一个高通,一个低通加一个带通滤波器就好了啊

出0入0汤圆

发表于 2011-3-16 11:45:11 | 显示全部楼层
哇,论坛怎么没有发现收藏功能呢?

出0入8汤圆

 楼主| 发表于 2011-3-16 11:56:50 | 显示全部楼层
回复【46楼】hevry  
为什么不用模拟的来做啊,三个频段的话一个高通,一个低通加一个带通滤波器就好了啊
-----------------------------------------------------------------------
用模拟来做没有那么灵活,加如我要20khz这个频率时用模拟是不是很难做啊

出0入0汤圆

发表于 2011-4-1 10:49:20 | 显示全部楼层
FFt还是不好明

出0入0汤圆

发表于 2011-7-12 21:07:44 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-12 21:51:53 | 显示全部楼层
ding

出0入0汤圆

发表于 2011-7-12 21:54:52 | 显示全部楼层
这个建议不错啊!呵呵

出0入0汤圆

发表于 2011-7-26 22:55:38 | 显示全部楼层
好像TDA7666A做的不错啊

出0入0汤圆

发表于 2011-8-6 08:42:59 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-6 09:12:45 | 显示全部楼层
http://www.tudou.com/programs/view/zx5DgOUUWys/

做了一个64点的,音频前级没做好,效果还不理想。64点也太少,打算用m0试试,提高FFT点数,可能会好点。

出0入0汤圆

发表于 2011-8-6 09:16:16 | 显示全部楼层
回复【27楼】cowboy  
三个rc带通滤波器搞掂,有必有折腾fft吗?这东西基本上不用mcu。
-----------------------------------------------------------------------
正解

出0入0汤圆

发表于 2011-8-6 17:30:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-7 14:14:47 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-7 17:26:56 | 显示全部楼层
mark。频谱分析

出0入0汤圆

发表于 2011-8-7 17:43:23 | 显示全部楼层
谱分析有两种,一种是滤波器组的方法,一种是FFT的方法

拿运放搭N个通频带不一样的音频滤波器,并联,构成滤波器组,可以起到N点FFT的效果,很简单,不涉及AD和DA

一定要拿FFT做频谱分析也可以,毕竟频率很低,但是你要点数做很多,比如128个点的,也是费事的,几个点的,比如8个点的,16个点的不是很难

出0入0汤圆

发表于 2011-8-8 01:41:29 | 显示全部楼层
FFT让LED随音乐一起动!强悍

出0入0汤圆

发表于 2011-8-8 09:49:42 | 显示全部楼层
zhousd 银河一号大侠,能否抽点宝贵时间为我等菜鸟们科普一下.先谢谢了!

出0入0汤圆

发表于 2011-8-8 10:01:10 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-19 23:56:56 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-23 11:16:00 | 显示全部楼层
回复【56楼】2233223 雪之爱
-----------------------------------------------------------------------

不错

出0入0汤圆

发表于 2011-8-23 11:23:52 | 显示全部楼层
回复【5楼】dxdq
-----------------------------------------------------------------------

做了分享下嘿嘿

出0入0汤圆

发表于 2011-8-25 10:56:06 | 显示全部楼层
频谱资料大集合~标记~

出0入0汤圆

发表于 2011-8-27 08:30:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-5 21:07:51 | 显示全部楼层
还是去看看那个日本人用漫画介绍的吧http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4891162&bbs_page_no=1&bbs_id=3020

出0入0汤圆

发表于 2011-9-5 21:18:02 | 显示全部楼层
mark,有空也来做做

出0入0汤圆

发表于 2011-10-11 10:28:53 | 显示全部楼层
高手啊,能给大伙讲通俗一点吗 ?

出0入0汤圆

发表于 2012-5-4 16:54:55 | 显示全部楼层
dxdq 发表于 2011-3-6 15:43
简单的用LM3915,我前段时间买了很多彩色灯条,一直没时间做,现在打算闲的时候用单片机做一个,ad转换后做 ...

我也想做一个,要是音频音量可调,范围从5mV--800mV那么大,要用怎样的电路才可以用AD采集啊

出0入0汤圆

发表于 2012-5-4 17:03:44 | 显示全部楼层
cowboy 发表于 2011-3-7 12:51
三个RC带通滤波器搞掂,有必有折腾FFT吗?这东西基本上不用MCU。

请问牛仔大哥这个怎么弄

出0入0汤圆

发表于 2012-5-15 14:52:24 | 显示全部楼层
电平指示!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-5-17 15:59:35 | 显示全部楼层
好贴,学习了,谢谢!!!!

出0入0汤圆

发表于 2012-5-17 16:14:19 | 显示全部楼层
不一定要FFT啦,AD做得好,配合电路,效果一样很好,我就用ATTINY13做了一个随音乐变化闪烁的,效果很明显,驱动21个LED的。

出0入0汤圆

发表于 2012-7-13 15:00:40 | 显示全部楼层
天杀的数学

出0入0汤圆

发表于 2012-7-13 16:45:54 | 显示全部楼层
hydgq 发表于 2011-8-8 09:49
zhousd 银河一号大侠,能否抽点宝贵时间为我等菜鸟们科普一下.先谢谢了!

就别指望他能说点正经的了

出0入0汤圆

发表于 2012-9-13 14:53:23 | 显示全部楼层
zhousd 银河一号大侠的观点确有道理,周易告诉我们,万物难出一个“易”字,事物的本质是很简单的,你只是用复杂的数学去推论它而已,我们需要的不是复杂的公式,而是模模糊糊中的那一点指引方向的灵光。有经验的人,一眼就能看出问题所在,经验可不是天天去做复杂的数学推论,而是钻研如何化繁为简,当你学会了化繁为简之后,你就将脱胎换骨。
我的这番言论,又会有人认为是奇谈怪论了吧。

出0入0汤圆

发表于 2012-9-13 15:31:09 | 显示全部楼层
不错,学着做个

出0入0汤圆

发表于 2012-9-15 01:51:46 | 显示全部楼层
akin 发表于 2011-3-8 09:47
电平指示电路,磁带机的年代有专门的集成电路完成这部分工作。

是的,有见过,是不是专用的不知道,但是那时候的这种功能都是用集成块完成的,电路也蛮简洁的。

出0入0汤圆

发表于 2012-9-15 10:00:51 | 显示全部楼层
”FFT“很高深的东西呀。。。

出0入0汤圆

发表于 2012-9-22 01:50:26 | 显示全部楼层
和FFT有什么联系,FFT是频谱的问题

出0入0汤圆

发表于 2012-9-27 22:22:40 | 显示全部楼层
直接用AD最简单,但是不准
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-15 03:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表