www.gusucode.com > signal 案例源码程序 matlab代码 > signal/SpectrogramReassignmentAndThresholdingExample.m
%% Spectrogram Reassignment and Thresholding % Generate a signal sampled at 1024 Hz for 2 seconds. %% nSamp = 2048; Fs = 1024; t = (0:nSamp-1)'/Fs; %% % During the first second, the signal consists of a 400 Hz sinusoid and a % concave quadratic chirp. Specify the chirp so that it is symmetric about % the interval midpoint, starting and ending at a frequency of 250 Hz and % attaining a minimum of 150 Hz. t1 = t(1:nSamp/2); x11 = sin(2*pi*400*t1); x12 = chirp(t1-t1(nSamp/4),150,nSamp/Fs,1750,'quadratic'); x1 = x11+x12; %% % The rest of the signal consists of two linear chirps of decreasing % frequency. One chirp has an initial frequency of 250 Hz that decreases to % 100 Hz. The other chirp has an initial frequency of 400 Hz that decreases % to 250 Hz. t2 = t(nSamp/2+1:nSamp); x21 = chirp(t2,400,nSamp/Fs,100); x22 = chirp(t2,550,nSamp/Fs,250); x2 = x21+x22; %% % Add white Gaussian noise to the signal. Specify a signal-to-noise ratio % of 20 dB. Reset the random number generator for reproducible results. SNR = 20; rng('default') sig = [x1;x2]; sig = sig + randn(size(sig))*std(sig)/db2mag(SNR); %% % Compute and plot the spectrogram of the signal. Specify a Kaiser window % of length 63 with a shape parameter $\beta=17$, 10 fewer samples of % overlap between adjoining sections, and an FFT length of 256. nwin = 63; wind = kaiser(nwin,17); nlap = nwin-10; nfft = 256; spectrogram(sig,wind,nlap,nfft,Fs,'yaxis') %% % Threshold the spectrogram so that any elements with values smaller than % the SNR are set to zero. spectrogram(sig,wind,nlap,nfft,Fs,'MinThreshold',-SNR,'yaxis') %% % Reassign each PSD estimate to the location of its center of energy. spectrogram(sig,wind,nlap,nfft,Fs,'reassign','yaxis') %% % Threshold the reassigned spectrogram so that any elements with values % smaller than the SNR are set to zero. spectrogram(sig,wind,nlap,nfft,Fs,'reassign','MinThreshold',-SNR,'yaxis')