annotate dsp/mag_phase_split.m @ 36:9e7be347b3a0
Renamed sequence classes to avoid clashes with seq methods;
Fixed default slicing dimension while retaining behaviour of window.m;
Updated use of sequences in dsp/synth.
author |
samer |
date |
Thu, 24 Jan 2013 14:51:23 +0000 |
parents |
c3b0cd708782 |
children |
|
rev |
line source |
samer@32
|
1 function o=mag_phase_split(N)
|
samer@32
|
2 % mag_phase_split - arrow to get FFT and do mag/phase split
|
samer@32
|
3 %
|
samer@32
|
4 % mag_phase_split ::
|
samer@32
|
5 % N:natural ~'frame size'
|
samer@32
|
6 % -> arrow( {[[N,L]]}, {[[M,L]], [[M,L]]},empty) :- M=dftbins(N).
|
samer@32
|
7
|
samer@32
|
8 bins=1+floor(N/2);
|
samer@32
|
9 singles=1:ceil(N/2):bins;
|
samer@32
|
10 o=arr(@mps);
|
samer@32
|
11
|
samer@32
|
12 function [S,P]=mps(X)
|
samer@32
|
13 Y=fft(X,N);
|
samer@32
|
14 Z=Y(1:bins,:);
|
samer@32
|
15 M=abs(Z);
|
samer@32
|
16 P=Z./M; % get complex phases of components.
|
samer@32
|
17 S=M*sqrt(2/N); % sqrt of double of total power per band
|
samer@32
|
18 S(singles,:)=S(singles,:)/sqrt(2); % undo double counting of singletons
|
samer@32
|
19 end
|
samer@32
|
20 end
|
samer@32
|
21
|