1, Get code method
Get code method 1:
The complete code has been uploaded to my resources: [digital signal processing] synchronous compression and transformation of digital signals based on MATLAB [including Matlab source code 1535]
Get code method 2:
By subscribing to the payment column of zijishenguang blog, private bloggers can obtain this code with payment vouchers.
Note: if you subscribe to the paid column of zijishenguang blog, you can get a code for free (valid for three days from the Subscription Date);
2, Introduction to synchronous compression transformation
Based on WT, SST uses synchronous compression operator to improve the resolution of time-frequency ridge in time spectrum, and realizes the extraction and reconstruction of instantaneous frequency. set up ψ (b) Is the wavelet generating function, then the continuous wavelet transform of signal x(t) is:
Where:
x(t) - vibration signal;
W(a,b) - continuous wavelet transform result of x(t);
t -- time variable;
a - scale factor;
b -- translation factor;
According to the analysis, the instantaneous frequency information of position (a,b) in the wavelet domain is:
Where:
ω x(a,b) - instantaneous frequency;
j -- imaginary unit.
Literature [10] found that no matter what value a is, the oscillation characteristics of W(a,b) on B point to the initial frequency Ω. Therefore:
According to the defined synchronous compression transform, the inverse wavelet transform is:
Where:
x(b) - result of inverse wavelet transform;
C ψ—— Phase difference coefficient;
ψ (a ξ)—— Wavelet generating function.
yes ω x(a,b) is integrated along the direction of scale a and classified into frequency domain ω=ω At the position of x(a,b), the synchronous compression transformation is defined as:
Where:
Sst ( ω, b) - synchronous compression function of signal B;
ω—— Angular frequency.
The result of equation (6) and phase difference coefficient C ψ, The amplitude of the signal is reduced to the position in the frequency domain, and finally the high-resolution time spectrum is obtained.
3, Partial source code
% A numerical signal. clear; SampFreq = 100; t1 = 0 : 1/SampFreq : 6; t2 = 6+1/SampFreq : 1/SampFreq : 14-1/SampFreq; t = [t1 t2]; Sig1 = [sin(2*pi*((25+8)*t1 + 10*sin(t1))) sin(2*pi*(34.2+8)*t2) ]; Sig2 = sin(2*pi*(8*t+3*atan((t - 5).^2))); Sig=Sig1+Sig2; [m,n]=size(Sig); time=(1:n)/SampFreq; fre=(SampFreq/2)/(n/2):(SampFreq/2)/(n/2):(SampFreq/2); Ts = SST(Sig',50); figure imagesc(time,fre,abs(Ts)); axis xy ylabel('Freq / Hz'); xlabel('Time / Sec') title('SST'); df=fre(2)-fre(1); %Signal Reconstrucion %reconstruted region of Sig1 is 20-45Hz. s1=real(sum(Ts(20/df:45/df,:))); figure plot(s1);hold on; plot(Sig1,'r-'); title('Reconstructed signal (blue),original signal (red)'); %reconstruted region of Sig1 is 1-15Hz. s2=real(sum(Ts(1/df:15/df,:))); figure plot(s2);hold on; plot(Sig2,'r-'); title('Reconstructed signal (blue),original signal (red)'); %It provides a perfect reconstrution performance. %Maybe you cannot see the bule signal clearly. function [Ts] = SST(x,hlength); % Computes the SST (Ts) of the signal x. % INPUT % x : Signal needed to be column vector. % hlength: The hlength of window function. % OUTPUT % Ts : The SST [xrow,xcol] = size(x); if (xcol~=1), error('X must be column vector'); end; if (nargin < 1), error('At least 1 parameter is required'); end; if (nargin < 2), hlength=round(xrow/5); end; Siglength=xrow; hlength=hlength+1-rem(hlength,2); ht = linspace(-0.5,0.5,hlength);ht=ht'; % Gaussian window h = exp(-pi/0.32^2*ht.^2); % derivative of window dh = -2*pi/0.32^2*ht .* h; % g' [hrow,hcol]=size(h); Lh=(hrow-1)/2; N=xrow; t=1:xrow; [trow,tcol] = size(t); tfr1= zeros (N,tcol) ; tfr2= zeros (N,tcol) ; tfr= zeros (round(N/2),tcol) ; Ts= zeros (round(N/2),tcol) ; for icol=1:tcol, ti= t(icol); tau=-min([round(N/2)-1,Lh,ti-1]):min([round(N/2)-1,Lh,xrow-ti]); indices= rem(N+tau,N)+1; rSig = x(ti+tau,1); %rSig = hilbert(real(rSig)); tfr1(indices,icol)=rSig.*conj(h(Lh+1+tau)); tfr2(indices,icol)=rSig.*conj(dh(Lh+1+tau)); end; tfr1=fft(tfr1); tfr2=fft(tfr2); tfr1=tfr1(1:round(N/2),:); tfr2=tfr2(1:round(N/2),:); ft = 1:round(N/2); bt = 1:N;
4, Operation results
5, matlab version and references
1 matlab version
2014a
2 references
[1] Shen Zaiyang. Proficient in MATLAB signal processing [M]. Tsinghua University Press, 2015
[2] Gao Baojian, Peng Jinye, Wang Lin, pan Jianshou. Signal and system -- Analysis and implementation using MATLAB [M]. Tsinghua University Press, 2020
[3] Wang Wenguang, Wei Shaoming, Ren Xin. MATLAB implementation of signal processing and system analysis [M]. Electronic Industry Press, 2018
[4] Gao Yanyan, Zhang Jing, Li Li, Jia Yingxi. Design of teaching demonstration system of digital signal processing based on GUI [J]. Education and Teaching Forum. 2019, (48)
[5] Li Jun, Zhang Shuling, Shuai Jing. Digital signal processing aided teaching system based on Matlab GUI interface [J]. Information communication. 2020, (08)
[6] Wang Bing, Wei Zhiheng, Wang Wenbin, Dai Yuanting, Zhao Minamata Jun. application of order analysis method based on synchronous compression transformation in bearing fault diagnosis of urban rail transit vehicles [J]. Research on urban rail transit. 2021,24 (07)