?? cyclic_spectrum.m
字號(hào):
function [] = cyclic_spectrum(x, N, fs, M)
%%%%% 參量說明 %%%%%
% x -- 信號(hào)
% N -- 循環(huán)譜檢測采樣長度,必須小于等于信號(hào)序列長度
% fs -- 采樣頻率, 檢測帶寬為-fs/2至fs/2
% M -- 平滑點(diǎn)數(shù), 時(shí)間分辨率*頻率分辨率=M
%%%%%%%%%%%%%%%%%%%
%%% 參數(shù) %%%
win = 'hamming'; % 平滑窗類型
d_alpha = fs/N; % 1/時(shí)間分辨率=循環(huán)頻率分辨率
alpha = 0:d_alpha:fs; % 循環(huán)頻率, 分辨率=1/時(shí)間分辨率
a_len = length(alpha); % 循環(huán)頻率取樣個(gè)數(shù)
f_len = floor(N/M-1)+1; % 最大平滑窗個(gè)數(shù), 即頻率采樣個(gè)數(shù)
f = -(fs/2-d_alpha*floor(M/2)) + d_alpha*M*(0:f_len-1); % 頻率采樣點(diǎn)位置
S = zeros(a_len, f_len); % 初始相關(guān)功率譜
i = 1;
%%% 信號(hào)fft變換 %%%
X = fftshift(fft(x(1:N)));
X = X';
%%% 遍歷循環(huán)頻率取值 %%%
for alfa = alpha
interval_f_N = round(alfa/d_alpha); % 循環(huán)頻率所對應(yīng)的頻譜序列序號(hào)
f_N = floor((N-interval_f_N-M)/M)+1; % 平滑窗的個(gè)數(shù)
%%% 生成平滑窗函數(shù) %%%
g = feval(win, M);
window_M = g(:, ones(f_N,1));
%%% 頻域序列平滑模板 %%%
t = 1:M*f_N;
t = reshape(t, M, f_N);
%%% 計(jì)算X1,X2 %%%
X1 = X(t).*window_M;
X2 = X(t+interval_f_N).*window_M;
%%% 計(jì)算譜相關(guān) %%%
St = conj(X1).*X2;
St = mean(St, 1); % 平滑平均
S(i, floor((f_len-f_N)/2)+(1:f_N)) = St/N; % 將結(jié)果平移至序列中央以便作圖
i = i+1;
end
%%% 遍歷循環(huán)頻率取值結(jié)束 %%%
%%% 循環(huán)功率譜作圖 %%%
mesh(f, alpha, abs(S));
axis tight;
%title('BPSK-OFDM');
xlabel('f'); ylabel('a');
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -