보물창고/Programming2015.11.17 23:00





Java FFTW FFT maginute frequency example real imaginary 예제 정리




테스트로 만든 sin데이터를 FFT한결과 

아래처럼 4Hz에 2의 데이터가 있는 계산을 하였습니다



이렇게 정리하는데 꼬박 1주일이 걸렸는데요

나중에 다시볼때 이 자료를 참고하기 위해 정리해서 올립니다

혹시나 FFT 계산을 하려는 분들에게도 도움이 되었으면 하는 바람도 있습니다


FFT에대한 수학적인 이해보다는 프로그래밍 적으로 결과값을 만드는데 치중했습니다

약간의 수학적인 이해가 필요하긴 했지만 결과를 맞춰가며 따라한 예제다보니

혹여나 맞지 않을 수 있으니.. 개발하실때 참고해주세요



첫번째 자료 정리 : FFT DFT java example 이론 정리와 java 예제 코드 구성

http://paranwater.tistory.com/487




참고한 자료


FFT 사용에 대해 전체적인 이론을 파악할수 있는 정말 좋은 자료입니다

음향측정2.PDF

FFT계산하는데 필요한 파라메터들에대한 상세한 설명이 있습니다

해당 자료는 sti.or.kr 라는 사이트에 2014년 정리된 자료로 상당히 최근 자료입니다

그리고 한글!로 작성된 자료입니다


위 자료를 참고로 예제를 아래처럼 정의할 수 있습니다

샘플링 주파수 Hz (Sample Rate) : 128

FFT 사이즈 (Sample) : 128

상한 주파수 대역 : 64Hz

주파수 해상도 : 1Hz


FFT 이론에 관한 두번째 좋은 자료

신호에 관한 개괄적인 내요을 정리한 자료입니다

디지털 신호 처리의 개요

www.hanbit.co.kr



FFT한 결과로 나온 real, imaginary 데이터로 maginute 값 계산할때 참고한 자료 입니다

13강 - MATLAB 때려잡기 - FFT 2부

위 강의에서는 Matlab예제로 maginute를 계산하고있는데요

이를 java코드로 그대로 따라 만드니 같은 값이 도출되었습니다

이 자료에서는 대칭되는 값을 처리하는 내용도 포함하고 있습니다


matlab는 아니지만 FreeMat라는 비슷한 프로그램을 사용하여 데이터 검증을 했습니다

http://freemat.sourceforge.net/




frequency 계산할때 참고한 자료입니다

stackoverflow - My app “find frequency of audio input from microphone” always crashs. But why?

이자료에서는 frequency값을 계산하는 방법을 참고했습니다

위 질문에 있는 코드는 그대로 java에서 실행 할 수 있습니다

노트북에 마이크가 있어서 실제 소리로 해당 Hz를 검출하는 내용을 확인했습니다







아래 코드는 위에서 확인된 내용을 모두 포함한 코드입니다


전체 코드


package fft0.example;

/* Start reading here */


import org.apache.commons.math.complex.Complex;

import org.apache.commons.math.transform.FastFourierTransformer;


import static java.lang.Math.*;

    

public class JavaFastFourierTransformer_matlabexample_음향측정2 {


    public static void main(String args[]) {

        JavaFastFourierTransformer_matlabexample_음향측정2 a = new JavaFastFourierTransformer_matlabexample_음향측정2();

        

        double[] conversionValue = a.transform();

        for(int i = 0; i < conversionValue.length; i++){

//            System.out.println(conversionValue[i]);

        }

        

    }

    

    private double[] transform() 

    {

        

        int sampleSize= 128;  //power ^ 2

        float sampleRate= 128.0f;

        double Fs = sampleSize;

        double frequency = 0;

        

        // sin 샘플 데이터를 위한 변수

        double Ts = 1/Fs;

        double [] t = new double[sampleSize] ;

        double [] input = new double[sampleSize];

        

        for(int i = 0; i < sampleSize; i++){

            t[i] = Ts * i;

        }

        

        for (int i = 0; i < sampleSize; i++) {

            input[i] = 2 * sin( 2 * PI * 4 * t[i]);

//            System.out.println(input[i]);

        }


        System.out.println("-------------------------------");

        

        double[] tempConversion = new double[input.length/2];

        //100 is not a power of 2, consider padding for fix | 2의 거듭제곱의 개수로 해야함

        FastFourierTransformer fft = new FastFourierTransformer();

        try {           

            

            Complex[] complx = fft.transform (input);

            

            for (int i = 0; i < (complx.length / 2); i++) {           // 대칭되는 값을 제외하기위해 절반만을 사용    

                double rr = (complx[i].getReal()) / sampleSize * 2;        // maginute값 계산을 위한 마사지

                double ri = (complx[i].getImaginary())  / sampleSize * 2;    // maginute값 계산을 위한 마사지

                tempConversion[i] = Math.sqrt((rr * rr) + (ri * ri));    // maginute계산

                double mag = tempConversion[i]; 

                

                frequency = (sampleRate * i) / sampleSize;            // frequency계산

                

                System.out.println(frequency+"\t"+mag);

            }


        } catch (IllegalArgumentException e) {

            System.out.println(e);

        }


        return tempConversion;

    }


신고





Posted by 파란물
보물창고/Programming2015.07.20 23:30





elasticsearch index client java api example mavne 프로젝트 기본 구조




elasticsearch java api를 이용한 기본 코딩 입니다

elasticsearch api문서보는게 익숙치 않다보니 삽질좀 하다가 성공했습니다


public class App {

public static void main(String[] args) {

Settings settings = ImmutableSettings.settingsBuilder()

.put("cluster.name", "imcelasticsearch")

.build();

TransportClient client = new TransportClient(settings)

.addTransportAddress(new InetSocketTransportAddress("hostname2", 9300));

IndexResponse index_response = null;

try {

index_response = client.prepareIndex("twitter", "tweet", "1")

       .setSource(jsonBuilder()

                   .startObject()

                       .field("user", "kimchy")

                       .field("postDate", new Date())

                       .field("message", "trying out Elasticsearch")

                   .endObject()

                 )

       .execute()

       .actionGet();

} catch (ElasticsearchException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}


client.close();;

}




추가한 dependency


<dependency>

<groupId>org.elasticsearch</groupId>

<artifactId>elasticsearch</artifactId>

<artifactId>elasticsearch</artifactId>

<version>1.6.0</version>

</dependency>




참고한 사이트


위 코드 실행 결과 아래처럼 잘 동작 한 것을 볼 수 있습니다




maven import해서 사용하세요

elasticsearch_.zip



신고





Posted by 파란물
보물창고/Programming2015.07.15 23:30





FFT DFT java example 이론 정리와 java 예제 코드 구성


FFT를 알아보기 위해 찾아본 자료를 정리 했습니다



FFT는 신호를 바꾸는 알고리즘인데요 이론적인 기초를 파악할 수 있는 링크 입니다

  1. signal
    1. http://dmusiclab.com/rb/?c=4/14&p=3&uid=3
    2. 시간축 표현과 주파수측 표현에 대한 이해

  2. Fourier Transform (1)
    1. http://dmusiclab.com/rb/?c=4/14&p=2&uid=10
    2. 푸리에 이론에 대한 설명
    3. 모든 주기 신호는 정현팓르의 합으로 이루어질 수 있다

  3. Fourier Transform (2)
    1. http://dmusiclab.com/rb/?c=4/14&p=2&uid=11
    2. 시각축 그래프를 주파수측 그래프로 바꿔지는 과정을 하나하나 진행

  4. Discrete Fourier Transform
    1. http://dmusiclab.com/rb/?c=4/14&p=2&uid=12
    2. 이산 푸리에 변환에 대한 설명
    3. 단점 설명 Fast Fourier Transform

  5. Fast Fourier Transform (1)
    1. http://dmusiclab.com/rb/?c=4/14&p=2&uid=13
    2. 쿨리-튜키 알고리즘 설명

  6. Fast Fourier Transform (2)
    1. http://dmusiclab.com/rb/?c=4/14&p=2&uid=14
    2. 빠르게 계산되는 이유 설명


위에 링크로 정리한 글이 아닌 다른 글도 유용한 글이 많으니 개념 잡으시는데 참고하세요~







FFT java example 내용입니다


참고한 github

https://github.com/bytedeco/javacpp-presets/tree/master/fftw


java maven 프로젝트에서 pom.xml에  dependency만 추가해주면 바로 FFT를 실험 할 수 있습니다

예제 코드도 위 github에 있으니 바로 적용해서 실행해 볼 수 있습니다

README 파일 그대로 따라하면 아래처럼 실행시켜볼 수 있습니다



위 프로젝트 압축파일 추가합니다

mavne 프로젝트 입니다

fft2 (2).zip

신고





Posted by 파란물
보물창고/Programming2014.08.07 23:00






PHP exec()로 java 실행해서 파일 저장할때 한글 깨짐 문제 해결






PHP코드에서 exec()를 이용해 java jar를 실행할때 한글이 깨지는 문제로 일주일을 고생했습니다
검색해보니 저와 비슷한 문제로 질문글 들이 있었으나.. 해결을 했다는 답변이 없어 서더욱 힘들었습니다




제가 가진 문제점은

  • php코드 내에서 아래와 같이 실행을 합니다 
    (%ED%95%9C%EA%B8%80는 "한글"을 URL인코딩한 값) 
    exec("java -jar myjava.jar %ED%95%9C%EA%B8%80");

  • myjava.jar에서 하는 일은 
    String hanVar = URLDecoder.decode(arg[0], "utf-8"); // %ED%95%9C%EA%B8%80 -> 한글 
    System.out.println(hanVar ); //모든 경우에 한글로 잘 출력됩니다 
    ImageIO.write(srcImageBuffer, "gif", new File(hanVar)); // hanVar이름으로 파일 저장

java -Dfile.encoding=utf-8 -jar myjava.jar %ED%95%9C%EA%B8%80 
이 명령을 리눅스 shell에서 실행하면 한글파일로 저장이 잘 됩니다 
그러나 문제는 php에서 exec()로 실행하면 한글 파일이 ???로 저장됩니다





해결의 실마리는 locale명령어였습니다

리눅스에 ssh로 접속해서 locale명령을 하면 다음과 같습니다 
(www-data는 Apache서버 user로 보여 같이 확인했습니다)



모두 utf-8로 잘 나옵니다
그러나..

php에서 exec("locale")를 하니 다음과 같이 나왔습니다



LANG=C로 시스템 디폴트 값을 쓴다고 설정되어 있습니다

PHP에서 exec()로 실행할때 설정된 인코딩이 달라 문제였습니다

해결 방법은 간단했습니다

exec("export LANG=\"ko_KR.utf8\";locale";<추가 명령어>) 이런식으로 명령 앞에 인코딩을 변경하는 문을 날리고 뒤에 필요한 명령을 하면 한글표시가 잘 되었습니다 (중간에 들어있는 locale는 확인하기위한 명령으로 나중에는 제외해도 됩니다)



이렇게 설정하고 나서는 한글파일 이름으로 잘 저장 되었습니다


신고





Posted by 파란물
보물창고/Big Data2012.11.14 21:12












하둡 스터디하면서 어느 버전으로해야 될지 찾아해매다 하나둘 찾아보고 설치 테스트해본 목록을 정리했습니다



테스트는 

Pseudo-distributed mode 

hadoop-example-1.0.4.jar 파일 실행하는것으로 확인했습니다

다른 더 많은 기능이 정상 작동하는지도 좀더 테스트 해본 후 업데이트 해 보겠습니다



2012년 11월 13일


하둡, 우분투, 자바, 버추얼박스 테스트 성공한 버전

hadoop, Ubuntu, Java, Virtualbox



우분투 - 12.04 LTS 64bit desktop   다운로드

JavaSE - 6.0.37 Linux 64bit   다운로드

Virtualbox - 4.2.4   다운로드

하둡 - 1.0.4   다운로드



참고

hadoop에서 지원하는 Java버전을 안내하고 있는 페이지 입니다 ( OpenJdk에서는 안된다고 합니다)

http://wiki.apache.org/hadoop/HadoopJavaVersions




신고





Posted by 파란물

티스토리 툴바