Main Content

파라미터 오디오 이퀄라이저에 대한 코드 생성

이 예제에서는 코드 생성에 사용될 3대역 파라미터 이퀄라이저의 알고리즘 사양을 모델링하는 방법을 보여줍니다.

필요한 MathWorks™ 제품:

  • MATLAB®

  • DSP System Toolbox™

  • Simulink®

  • MATLAB® Coder™

  • Simulink® Coder™

  • Embedded Coder™

소개

파라미터 이퀄라이저는 오디오 시스템의 주파수 응답을 조정하는 데 자주 사용됩니다. 예를 들어 파라미터 이퀄라이저를 사용하여 서로 다른 주파수에 피크와 골이 있는 물리적 스피커들을 보상할 수 있습니다.

이 예제의 파라미터 이퀄라이저 알고리즘은 계수를 조정하여 원하는 주파수 응답을 얻을 수 있는 3개의 2차(바이쿼드) 필터를 제공합니다. 시뮬레이션에서 필터 계수를 동적으로 조정하고 동작을 살펴보기 위해 사용자 인터페이스가 사용됩니다. 코드 생성의 경우, 계수 변수가 이름이 지정되어 파일에 배치되기 때문에 타깃 프로세서에서 실행 중에 다른 소프트웨어 컴포넌트가 이러한 계수에 액세스하여 계수를 동적으로 변경할 수 있습니다.

다음 섹션에서는 파라미터 이퀄라이저 알고리즘을 지정하는 방법, 시뮬레이션을 통해 동작을 살펴보는 방법, 코드를 생성하고 사용자 지정하는 방법에 대해 설명합니다.

알고리즘 지정하기

파라미터 이퀄라이저 알고리즘은 모델 사양과 파라미터화된 데이터 사양의 두 부분으로 지정됩니다. 모델 사양은 알고리즘의 신호 흐름을 지정하는 Simulink 서브시스템입니다. 모델 사양은 MATLAB 작업 공간에 있는 파라미터화된 데이터에도 액세스합니다. 파라미터화된 데이터 사양은 Simulink 모델에서 액세스하는 데이터를 생성하는 MATLAB 스크립트입니다.

이 예제에서 모델 사양은 Simulink 모델 dspparameqcodegen의 Equalizer 서브시스템입니다. 이 서브시스템에서 입력은 3개의 종속 연결 이퀄라이제이션 대역을 통과합니다. 각 대역 내의 계수 변화는 Biquad Filter 블록으로 전달되기 전에 누설 적분기를 통해 평활화됩니다. 각 Biquad Filter 블록은 서로 다른 필터 구조를 사용하도록 구성됩니다. 이 예제의 뒷부분에서는 코드 생성의 차이를 보여주기 위해 다른 필터 구조가 선택됩니다.

이 예제에서 파라미터화된 데이터 사양은 MATLAB 스크립트 dspparameq_data.m입니다. 이 MATLAB 스크립트는 초기 필터 계수와 코드 생성 특성을 지정합니다. 모델 dspparameqcodegen을 열면 모델의 PreLoadFcn 콜백이 MATLAB 작업 공간에 파라미터 데이터를 생성하는 dspparameq_data.m 스크립트를 실행하도록 구성되어 있습니다.

시뮬레이션을 통해 동작 살펴보기

시뮬레이션 테스트 벤치를 사용하여 알고리즘의 동작을 살펴볼 수 있습니다. 이 예제에서 테스트 벤치는 시뮬레이션 모델인 dspparameqcodegen과 MATLAB에서 프로그래밍된 사용자 지정 사용자 인터페이스(UI)로 구성됩니다.

이 UI는 'Launch Parameter Tuning UI' 링크를 클릭하여 시작할 수 있습니다. UI를 사용하면 시뮬레이션 중에 MATLAB 작업 공간에서 계수 파라미터 데이터를 동적으로 조정할 수 있습니다.

Equalizer 서브시스템에 대한 C 코드 생성

원하는 시뮬레이션 동작을 얻었다면 알고리즘 사양을 기반으로 Equalizer 서브시스템에 대한 C 코드를 생성할 수 있습니다. 이 모델은 Embedded Coder 제품에서 액세스할 수 있는 몇 가지 일반적인 코드 생성 사용자 지정 사항을 표시하도록 구성되어 있습니다. 이러한 사용자 지정을 통해 쉽게 코드 검토 및 통합 절차를 수행할 수 있습니다. 다음 섹션에서는 이 모델의 코드 사용자 지정 중 일부를 보여주고 이러한 사용자 지정을 더 자세히 기술한 문서에 대한 참조를 제공합니다.

C 코드를 생성하려면 Equalizer 서브시스템을 마우스 오른쪽 버튼으로 클릭하고 코드 생성 > 서브시스템 빌드를 선택한 다음, 조정 가능형 파라미터를 입력하라는 메시지가 표시되면 Build 버튼을 클릭합니다. 다음 하이퍼링크를 클릭하여 코드를 생성할 수도 있습니다: Generate Code for the Equalizer Subsystem.

모델에 대한 양방향 링크가 포함된 코드 생성 리포트

모델은 생성된 소스 및 헤더 파일을 탐색하는 데 사용할 수 있는 HTML 리포트를 생성하도록 구성되어 있습니다. 또한 이 리포트를 통해 생성된 코드와 모델 간의 양방향 연결이 가능합니다. 예를 들어, 각 Biquad Filter 블록은 서로 다른 필터 구조를 구현하도록 구성되어 있습니다. Biquad Filter 블록 중 하나를 마우스 오른쪽 버튼으로 클릭한 다음 코드 생성 > 코드 탐색을 선택하여 블록에서 시작해 연결된 코드까지 추적할 수 있습니다.

모델과 코드 간의 추적성에 대한 자세한 내용은 Trace Simulink Model Elements in Generated Code (Embedded Coder) 항목을 참조하십시오.

생성된 코드 호출하기

모델 초기화 및 모델 스텝 함수를 호출하여 생성된 코드를 애플리케이션에 통합할 수 있습니다. 생성된 코드를 호출하는 방법을 보여주는 예제 파일 ert_main.c가 생성되어 있습니다. 예제 main()Equalizer_initialize()를 호출하여 상태를 초기화합니다. 예제 rt_OneStep()은 인터럽트와 같은 주기적 메커니즘이 어떻게 파일 Equalizer.c에서 Equalizer_step()을 호출하는지 보여줍니다.

생성된 코드를 다른 애플리케이션에 통합하는 방법에 대한 자세한 내용은 Deploy Applications to Target Hardware (Embedded Coder) 항목을 참조하십시오.

입력 및 출력 데이터 인터페이스

파라미터화된 데이터 사양 파일 dspparameq_data.m은 MATLAB 작업 공간에 inout 신호 데이터 객체를 생성합니다. 이러한 데이터 객체는 모델의 신호 선과 연관되며 생성된 코드에서 해당 변수의 설명 및 스토리지 클래스를 지정하는 데 사용됩니다. 예를 들어 신호 inoutEqualizer.c에서 전역 변수로 선언됩니다. 모델 스텝 함수를 실행하기 위해 애플리케이션은 in에 데이터를 쓰고 Equalizer_step() 함수를 호출한 다음 out에서 결과를 읽습니다.

데이터 객체에 대한 자세한 내용은 Create Data Objects for Code Generation with Data Object Wizard (Embedded Coder) 항목을 참조하십시오.

코드 주석에 텍스트 주석 삽입

모델에서 텍스트로 입력한 설계 문서를 생성된 코드의 주석에 삽입할 수 있습니다. Equalizer 서브시스템에는 키워드 S:Description이 있는 주석 텍스트가 포함되어 있습니다. 코드 생성기는 텍스트가 이 키워드로 시작하는지 확인하고 키워드 다음에 오는 텍스트를 생성된 코드에 주석으로 삽입합니다.

코드 주석에 주석 텍스트를 삽입하는 방법에 대한 자세한 내용은 Add Global Comments in the Generated Code (Embedded Coder) 항목을 참조하십시오.

함수 분할

생성된 코드를 쉽게 탐색할 수 있도록 이퀄라이저 대역의 각 서브시스템은 아토믹으로 구성되어 있으며 자체 함수를 생성합니다. Equalizer_step() 함수에서 호출 순서를 확인할 수 있습니다.

함수 이름 지정 및 배치 사용자 지정에 대한 자세한 내용은 About Nonvirtual Subsystem Code Generation (Embedded Coder) 항목을 참조하십시오.

계수 파일 배치

파라미터화된 데이터 사양 파일 dspparameq_data.m은 MATLAB 작업 공간에 계수에 대한 파라미터 데이터 객체를 생성합니다. 이러한 데이터 객체는 별도의 파일 biquad_coeffs.cbiquad_coeffs.h에서 각각 계수 변수를 정의하고 선언하도록 구성되어 있습니다. 계수를 별도의 파일로 분할하면 다른 소프트웨어 컴포넌트가 이 데이터에 액세스할 수 있습니다. 예를 들어 배포된 애플리케이션에서 다른 소프트웨어 컴포넌트가 이러한 변수를 Equalizer_step()에서 사용되기 전에 런타임에 수정하도록 스케줄링할 수 있습니다.

데이터 객체의 파일 배치에 대한 자세한 내용은 Control Placement of Global Data Definitions and Declarations in Generated Files (Embedded Coder) 항목을 참조하십시오.

계수 변수 주석에 필터 설계 파라미터 삽입

계수가 계산될 때(파라미터화된 데이터 파일에서 또는 그래픽 사용자 인터페이스에 의해), 필터 설계 파라미터는 계수 파라미터 데이터 객체의 Description 필드에 저장됩니다. 모델은 생성된 코드에 설계 파라미터를 주석으로 삽입하도록 구성되어 있습니다. 이를 통해 코드 검토자는 필터를 설계하는 데 사용된 설계 파라미터를 쉽게 확인할 수 있습니다.

생성된 코드에서 데이터 객체의 주석을 사용자 지정하는 방법에 대한 자세한 내용은 Add Custom Comments for Variables in the Generated Code (Embedded Coder) 항목을 참조하십시오.

생성된 파일 패키징하기

HTML 리포트에서 참조하는 생성된 파일은 Equalizer_ert_rtw 디렉터리에 있습니다. 프로젝트에 통합하려면 이 디렉터리에 있는 파일 외에도 MATLAB 애플리케이션 설치 디렉터리에 있는 다른 파일이 필요할 수 있습니다. 이 모델은 생성된 코드를 다른 환경에 쉽게 이식할 수 있도록 필요한 모든 파일을 zip 파일 Equalizer.zip으로 패키징하는 PackNGo 기능을 사용하도록 구성되어 있습니다. zip 파일에는 필요한 모든 파일이 포함되어 있지만 필요하지 않은 추가 파일도 포함되어 있을 수 있습니다.

다른 환경에 통합하기 위한 파일 패키징에 대한 자세한 내용은 Relocate or Share Generated Code (Simulink Coder) 항목을 참조하십시오.

관련 항목