Main Content

신호 분석기

여러 개의 신호와 스펙트럼을 시각화하여 비교

설명

신호 분석기 앱은 시간 영역, 주파수 영역 및 시간-주파수 영역에서 신호를 시각화하고 전처리하고 측정하고 분석하고 비교할 수 있는 대화형 방식 툴입니다. 이 앱을 사용하여 다음을 수행할 수 있습니다.

  • MATLAB® 작업 공간에 있는 모든 신호에 손쉽게 액세스하기

  • 누락된 데이터 채우기 (R2024a 이후). 앱을 종료하지 않고 신호를 평활화, 필터링, 리샘플링, 추세 제거, 잡음 제거, 추출, 편집하기

  • 사용자 지정 전처리 함수를 추가하고 적용하기

  • 오디오 신호 재생하기 (R2024a 이후)

  • 신호에 대한 여러 개의 파형, 스펙트럼, 지속성, 스펙트로그램 및 스케일로그램 표현을 동시에 시각화하고 비교하기

  • 데이터 및 신호 통계량 측정하기

신호 분석기 앱에서는 기간이 각기 다른 여러 신호를 한번에 보며 동시에 작업할 수 있습니다.

자세한 내용은 신호 분석기 앱 사용하기를 참조하십시오.

  • 스케일로그램 보기를 사용하고 신호에 웨이블릿 잡음 제거를 적용하려면 Wavelet Toolbox™ 라이선스가 필요합니다.

Signal Analyzer app

신호 분석기 앱 열기

  • MATLAB 툴스트립: 탭의 신호 처리 및 통신에서 앱 아이콘을 클릭합니다.

  • MATLAB 명령 프롬프트: signalAnalyzer를 입력합니다.

예제

모두 확장

Fs=7418Hz로 샘플링된 음성 신호를 불러옵니다. 이 파일에는 "MATLAB®"이라는 단어를 발음한 여성의 음성이 들어 있습니다.

load mtlb

오디오 데이터의 70%가 누락된 상황을 시뮬레이션하기 위해 신호에 NaN 값을 무작위로 할당합니다.

rng(2024) 
numToReplace = round(length(mtlb) * 0.70);
missing = randperm(length(mtlb), numToReplace);

mtlbMissing = mtlb;
mtlbMissing(missing) = NaN;

신호 분석기를 열고 작업 공간 브라우저에서 신호 테이블로 mtlbmtlbMissing을 끌어서 놓습니다. 분석기 탭에서 신호 테이블에 신호가 선택된 상태로 시간 값을 클릭하고 Sample Rate and Start Time(샘플 레이트와 시작 시간)을 선택합니다. 샘플 레이트를 Fs Hz로 지정하고 시작 시간0초로 지정합니다. 그리드 표시를 클릭하여 2×2 디스플레이를 만듭니다. 왼쪽 디스플레이에는 mtlb를 플로팅하고 오른쪽 디스플레이에는 mtlbMissing을 플로팅합니다. mtlb 오디오 신호를 들으려면 해당 오디오 신호를 선택하고 표시 탭 아래에 있는 툴스트립의 재생 섹션에서 재생을 클릭하십시오. 신호를 반복하려면 재생 전에 반복 재생을 선택합니다.

누락된 데이터가 있는 신호를 선택하고 분석기 탭에서 전처리를 클릭하여 전처리 모드로 들어간 다음, 전처리 옵션 목록에서 Fill Missing(누락값 채우기)을 선택합니다. 함수 파라미터 패널에서 Fill Missing 파라미터를 조정합니다. Autoregressive model(자기회귀 모델)을 선택하고 적용을 클릭하여 누락된 신호를 채웁니다. 모두 적용을 클릭하여 전처리 결과를 저장하고 모드를 종료합니다. 다른 채우기 함수에 대한 자세한 내용은 fillmissingfillgaps 항목을 참조하십시오.

이제 재생 버튼을 사용하여 채워진 신호를 재생할 수 있습니다. 스펙트로그램에서 누락된 데이터 채우기의 효과를 확인하려면 표시 탭에서 시간-주파수를 클릭합니다. 스펙트로그램 탭에서 시간 분해능을 20ms로 지정하고 인접 세그먼트 간의 중첩을 80%로 지정합니다. 전력 제한–50dB 및 –10dB로 설정합니다. 왼쪽 디스플레이를 클릭하고 위 단계를 반복합니다.

신호 분석기에서 분석 윈도우의 스펙트럼 누설을 조정하여 정현파를 분해할 수 있습니다.

2초 동안 100Hz로 샘플링된 2채널 신호를 생성합니다.

  1. 첫 번째 채널은 20Hz 톤과 21Hz 톤으로 구성되어 있습니다. 두 톤 모두 단위 진폭을 갖습니다.

  2. 두 번째 채널도 두 개의 톤으로 구성되어 있습니다. 한 톤은 단위 진폭과 20Hz 주파수를 갖습니다. 다른 톤은 1/100 진폭과 30Hz 주파수를 갖습니다.

fs = 100;

t = (0:1/fs:2-1/fs)';

x = sin(2*pi*[20 20].*t)+[1 1/100].*sin(2*pi*[21 30].*t);

이 신호에 백색 잡음을 포함시킵니다. 40dB의 신호 대 잡음비를 지정합니다.

x = x + randn(size(x)).*std(x)/db2mag(40);

신호 분석기를 열고 신호를 플로팅합니다. 분석기 탭에서 신호 테이블에 신호가 선택된 상태로 시간 값을 클릭하고 Sample Rate and Start Time을 선택합니다. 샘플 레이트fs Hz로 지정하고 시작 시간0초로 지정합니다. 표시 탭에서 스펙트럼을 클릭하여 디스플레이에 스펙트럼 플롯을 추가합니다.

스펙트럼 탭을 클릭합니다. 스펙트럼 누설을 조정하는 슬라이더는 중간 위치에 있으며, 이는 약 1.28Hz의 분해능 대역폭에 해당합니다. 첫 번째 채널의 두 톤은 분해되지 않습니다. 두 번째 채널의 30Hz 톤은 표시되기는 하지만 20Hz 톤과 비교하면 매우 약합니다.

분해능 대역폭이 약 0.83Hz가 되도록 누설을 늘립니다. 두 번째 채널의 약한 톤이 명확하게 분해됩니다.

슬라이더를 최댓값으로 이동합니다. 분해능 대역폭은 약 0.5Hz입니다. 첫 번째 채널의 두 톤이 분해됩니다. 두 번째 채널의 약한 톤은 큰 윈도우 사이드로브들에 가려집니다.

표시 탭을 클릭합니다. 수평 확대/축소를 사용하여 주파수 축을 확대합니다. 디스플레이에 두 개의 커서를 추가하고 주파수 영역 커서를 끌어서 놓아 톤의 주파수를 추정합니다.

전동 칫솔의 오디오 녹음을 MATLAB®으로 읽어 옵니다. 신호는 48kHz로 샘플링됩니다. 칫솔은 약 1.75초에 켜지고 약 2초 동안 켜져 있습니다.

[y,fs] = audioread("toothbrush.m4a");

신호 분석기를 열고 작업 공간 브라우저에서 신호 테이블로 신호를 끌어서 놓습니다. 신호 테이블에서 신호를 선택하고 분석기 탭에서 시간 값을 클릭하여 신호에 시간 정보를 추가합니다. 샘플 레이트와 시작 시간(Sample Rate and Start Time)을 선택하고 샘플 레이트에 fs를 입력합니다.

표시 탭에서 그리드 표시를 클릭하여 2×2 그리드 디스플레이를 만듭니다. 각 디스플레이를 선택한 후 스펙트럼을 클릭하여 스펙트럼 보기를 추가하고 시간을 클릭하여 시간 보기를 제거합니다. 신호를 4개의 디스플레이 모두로 각각 끌어옵니다.

스펙트럼 탭을 클릭하여 각 디스플레이의 스펙트럼 보기를 수정합니다.

  1. 왼쪽 상단 디스플레이를 클릭하여 선택합니다. 누설 슬라이더를 움직여서 누설 값을 32로 지정합니다.

  2. 오른쪽 상단 디스플레이를 클릭하여 선택합니다. 분해능 유형 섹션에서 윈도우 길이를 선택합니다. 윈도우 길이 섹션에서 지정을 선택하고 윈도우 길이를 샘플 1500개로 지정합니다. 윈도우 옵션 섹션에서 사각(Rectangular) 윈도우를 선택하고 중첩 백분율을 20으로 지정합니다.

  3. 왼쪽 하단 디스플레이를 클릭하여 선택합니다. 분해능 유형 섹션에서 윈도우 길이를 선택합니다. 윈도우 길이 섹션에서 지정을 선택하고 윈도우 길이를 샘플 500개로 지정합니다. 윈도우 옵션 섹션에서 해밍(Hamming) 윈도우를 선택하고 중첩 백분율을 50으로 지정합니다. NFFT 섹션에서 이산 푸리에 변환 점을 550개로 지정합니다.

  4. 오른쪽 하단 디스플레이를 클릭하여 선택합니다. 분해능 유형 섹션에서 윈도우 길이를 선택합니다. 윈도우 길이 섹션에서 지정을 선택하고 윈도우 길이를 샘플 5000개로 지정합니다. 윈도우 옵션 섹션에서 체비쇼프(Chebyshev) 윈도우를 선택하고 사이드로브 감쇠량을 50dB로, 중첩 백분율을 90으로 지정합니다.

일부 보기에서는 분해능이 높지만 누설이 높은 반면, 다른 보기에서는 누설이 낮지만 분해능이 저하되는 것을 알 수 있습니다.

관련 예제

프로그래밍 방식으로 사용

모두 확장

signalAnalyzer신호 분석기 앱을 엽니다.

signalAnalyzer(sig)신호 분석기 앱을 열고 신호 sig를 가져와 플로팅합니다. 앱이 이미 열려 있으면 이 함수는 현재 디스플레이에 sig를 플로팅합니다. 이미 플로팅된 sig가 변경되었다면 함수 호출 시 해당 플롯이 업데이트됩니다.

sig는 작업 공간의 변수이거나 MATLAB 표현식일 수 있습니다. sig는 다음일 수 있습니다.

  • 각 열이 독립 신호인 벡터 또는 행렬.

  • duration형으로 지정된 시간 값이 있는 timetable.

  • timeseries 객체.

자세한 내용은 Data Types Supported by Signal Analyzer 항목을 참조하십시오.

기본적으로 앱은 신호를 샘플 인덱스 함수로 플로팅합니다. 시간 정보를 제공하거나 신호에 내재된 시간 정보가 있는 경우 앱은 신호를 시간 함수로 플로팅합니다.

signalAnalyzer(sig1,...,sigN)은 N개의 신호 벡터 또는 행렬을 가져와서 현재 디스플레이에 플로팅합니다. 앱은 내재된 시간 정보가 있는 신호와 내재된 시간 정보가 없는 신호를 동일한 함수 호출에서 가져올 수 없습니다.

signalAnalyzer(___,'SampleRate',fs)는 샘플 레이트 fs를 양의 스칼라(단위: Hz)로 지정합니다. 앱은 시작 시간을 0으로 가정한 상태에서 샘플 레이트를 사용하여 시간에 대해 하나 이상의 신호를 플로팅합니다. 내재된 시간 정보가 없는 신호에 대해 샘플 레이트를 지정할 수 있습니다.

signalAnalyzer(___,'SampleTime',ts)는 샘플 시간 ts를 양의 스칼라(단위: 초)로 지정합니다. 앱은 시작 시간을 0으로 가정한 상태에서 샘플 시간을 사용하여 시간에 대해 하나 이상의 신호를 플로팅합니다. 내재된 시간 정보가 없는 신호에 대해 샘플 시간을 지정할 수 있습니다.

signalAnalyzer(___,'StartTime',st)는 신호 시작 시간 st를 스칼라(단위: 초)로 지정합니다. 샘플 레이트 또는 샘플 시간을 지정하지 않으면, 앱은 샘플 레이트를 1Hz로 가정합니다. 내재된 시간 정보가 없는 신호에 대한 시작 시간을 지정할 수 있습니다.

signalAnalyzer(___,'TimeValues',tv)는 데이터 점에 해당하는 시간 값을 갖는 벡터 tv를 지정합니다. tv는 초를 단위로 하는 값을 갖는 실수 숫자형 벡터일 수 있습니다. tvduration형 배열일 수도 있습니다. tv의 값은 고유해야 하고 NaN일 수 없지만 간격이 균일할 필요는 없습니다. 모든 입력 신호는 tv와 길이가 동일해야 합니다. 내재된 시간 정보가 없는 신호에 대해 시간 값으로 구성된 벡터를 지정할 수 있습니다.

불균일하게 샘플링된 신호는 필터링과 스케일로그램 보기에 사용할 수 없습니다.

버전 내역

R2016a에 개발됨

모두 확장