今天主要動手實現了下**《a real-time subcarrier allocation scheme for multiuser access````》的**部分,實現了對各個使用者子載波進行排序,進行標號,通道增益最大的表為1,其次的表為2,一次類推,具體matlab**如下
function result = matrixsort(matrix)
[m,n] = size(matrix);
temp = matrix;
temp = temp';
result = zeros(n,m);
for i=1:n
[y,i] = max(temp);
for j = 1:m
result(i(j),j) = i;
temp(i(j),j) = 0;
endif(temp == zeros(n,m))
break;
endendresult = result';
這個其實沒什麼難度,比較難的matlab都給我們封裝好了,只需我們呼叫就好了。比如,找到最大值所在的位置
備註:其實這樣正好為後面的分配打下了基礎:子載波分配的乙個約束條件,每乙個子載波只能分配給乙個使用者
排完序之後,還需要分配,這樣就需要找到每乙個子載波中的最大的增益那個
具體的**如下:可是在matlab7.0的環境中執行,如果不設斷點的話,執行起來總是計算遙遙無期,cpu使用率達到60%以上,還退不出來,只能任務管理器中強制退出,說明我的**裡面有很多bug
function result = initialalloction(channelgainsortn,eedsubnumber)
%使用排序好的通道增益順序表,來預分配
%%分配的原則是遍歷每一列,按照優先順序來分配
%分配達到每個使用者目標的數量
clcchannel = rand(4,20);
channelgainsort = matrixsort(channel);
[m,n] = size(channelgainsort);
result = zeros(m,n);
needsubnumber = 5; %暫定每個使用者需要5個子載波
usersubtotal = zeros(m,1);
for i = 1:n
[y,i] = min(channelgainsort(:,i));
if (usersubtotal(i) < needsubnumber)
result(i,i) = 1;
endif(usersubtotal(i) == needsubnumber)
continue;
endusersubtotal = sum(result,2);
end%下面是整理那些初次分配之後還沒有分配出去的子載波
temptotal = sum(result,1); %在完全分配的情況下,應該是乙個1矩陣
while min(temptotal) ~= 1
b = find(temptotal == 0); %用b來記錄那些每一列和還是0的位置
leftsubnumber = length(b);
c = find(usersubtotal < needsubnumber); %找到那些仍需要子載波的使用者
for i = b
tempmin = n+1; %這裡是要設定乙個初始的值n+1
%因為每次排序最大的值是n
for j = c
if(tempmin > channelgainsort(j,i))
tempmin = channelgainsort(j,i);
xlabel = j;
ylabel = i;
endend %這次迴圈之後找到了剩下的列數
%中的最大的增益
usersubtotal = sum(result,2);
if(usersubtotal(xlabel) ~= needsubnumber)
result(xlabel,ylabel) = 1;
endtemptotal = sum(result,1);
endendusersubtotal = sum(result,2);
result
usersubtotal
這個**裡面顯示設定乙個每個使用者需要的最忌子載波數量,然後依次去分配
在第乙個迴圈結束之後,可能還有些沒有分配出去,這是因為有可能某個使用者在該載波上的增益最大,但是她已經達到所需的子載波數了,因此只能讓賢,但這時候僅僅在那個迴圈裡面是不能找到分配給誰,因此需要第二個迴圈。
我的問題就是出在第二個迴圈那裡,如果不設斷點的話,似乎進入死迴圈,很鬱悶
還有乙個cost function沒有解決,明天繼續奮鬥······
晚上的時候去聽了課,感覺自己真的是比那些有心人落下了,人家看著詞彙能那麼流利的說出來,我很汗顏啊,不過自己還有機會,加油!!!
男生就是需要增長自己的本領,擁有活躍的大腦和強壯的身體。
任何一門語言思考的
1 第乙個hellowolrd程式。輸出 2 互動程式。如何從檔案讀取,從鍵盤讀取,輸出到檔案,輸出到螢幕。io 3 for迴圈,break,continue等 流程控制程式 4 函式呼叫方面 如何函式呼叫,模組呼叫 4 與資料庫打交道的類或模組 資料庫讀取方面 5 異常處理方面 6 物件導向方面 ...
微控制器C語言任何位置跳轉到任何指定位址 轉
用c語言寫的程式為求模組化,一般函式數量較多,函式呼叫的巢狀層數也多,要從乙個較深的巢狀立刻跳出到主函式,是非常困難的。用break或者return是跳不出來的,一般的解決方法或是使用c51的庫函式setjmp 和longjmp 實現長跳轉,但是這兩個函式在中斷函式內部是無能為力的 再或是在c函式中...
學習c 的50條忠告 本人覺得適用任何語言
這原本是乙個很老的帖子了,我今天之所以翻出來,是因為感覺很多和 我一樣尚未怎麼入門的人,可能真的很需要這些忠告。當然如果你是真 正的高手,你大可不看下面的這些文字。但是句我所只,似乎在程式設計這 條路上是沒有止境的,也不存在最終的高手。1.把c 當成一門新的語言學習 和c沒啥關係!真的。2.看 th...