前一段實習,本來打算做c++,到了公司發現沒啥項目,於是乎轉行做了Android,寫的第一個程序竟然要我處理信號,咱可是一心搞計算機的,沒接觸過信號的東西,什麼都沒接觸過,於是乎, 找各種朋友,各種熟人,現在想想,專注語言是不對的,語言就是一工具,關鍵還是業務,算法。好了,廢話不多說,上程序,注釋都很詳細,應該能看懂。
分析聲音,其實很簡單,就是運用傅裡葉變換,將聲音信號由時域轉化到頻域(程序用的是快速傅裡葉變換,比較簡單),為啥要這樣,好處多多,不細講,公司裡的用處是為了檢測手機發出聲音的信號所在的頻率集中范圍。
基於Android的實時音頻頻譜儀源碼下載地址:
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /2012年資料/1月/17/基於Android的實時音頻頻譜儀/
第一個類,復數的計算,用到加減乘,很簡單。
- package com.mobao360.sunshine;
- //復數的加減乘運算
- public class Complex {
- public double real;
- public double image;
-
- //三個構造函數
- public Complex() {
- // TODO Auto-generated constructor stub
- this.real = 0;
- this.image = 0;
- }
-
- public Complex(double real, double image){
- this.real = real;
- this.image = image;
- }
-
- public Complex(int real, int image) {
- Integer integer = real;
- this.real = integer.floatValue();
- integer = image;
- this.image = integer.floatValue();
- }
-
- public Complex(double real) {
- this.real = real;
- this.image = 0;
- }
- //乘法
- public Complex cc(Complex complex) {
- Complex tmpComplex = new Complex();
- tmpComplex.real = this.real * complex.real - this.image * complex.image;
- tmpComplex.image = this.real * complex.image + this.image * complex.real;
- return tmpComplex;
- }
- //加法
- public Complex sum(Complex complex) {
- Complex tmpComplex = new Complex();
- tmpComplex.real = this.real + complex.real;
- tmpComplex.image = this.image + complex.image;
- return tmpComplex;
- }
- //減法
- public Complex cut(Complex complex) {
- Complex tmpComplex = new Complex();
- tmpComplex.real = this.real - complex.real;
- tmpComplex.image = this.image - complex.image;
- return tmpComplex;
- }
- //獲得一個復數的值
- public int getIntValue(){
- int ret = 0;
- ret = (int) Math.round(Math.sqrt(this.real*this.real - this.image*this.image));
- return ret;
- }
- }