我在Matlab中遇到了語法問題。將數組賦給函數中的矩陣,語法問題
我試圖將音頻信號分成不同的段(幀)。
我想將y軸值返回到矩陣(每個段都有自己的列)以及每個段具有其自己的行的相應時間值。
我什至不能讓它返回只有一個單列和行對(即一幀)。我只是返回兩個空矩陣。這是我的代碼。
function [mFrames, vTimeFrame] = Framing(vSignal,samplingRate,frameLPerc,frameshPerc)
totalTime=size(vSignal,1)/samplingRate
frameLength = totalTime*frameLPerc;
frameShift = totalTime*frameshPerc;
frameNumber =0;
check=frameLPerc;
while check<1
check = check+frameshPerc;
frameNumber=frameNumber+1;
end
start = 1;
% problem part
mFrames = vSignal(round((start:1/samplingRate:frameLength)*samplingRate));
vTimeFrame = round((start:1/samplingRate:frameLength)*samplingRate);
end
在我想能夠段我的整個信號轉換成mFrames(i)和vTimeFrame(i)與一個for循環,不過沒關係,我甚至不能讓我的函數返回結束第一個(就像我說的空矩陣)。
我知道我的段碼應該是正確的,因爲我有另一個腳本具有相同vSignal(這是順便說一列向量)的作品就好了工作(Y == vSignal):
voiced = y(round((1.245:1/Fs:1.608)*Fs));
plot(1.245:1/Fs:1.608,voiced)
我標題爲這與語法問題,因爲我是非常新的matlab和習慣於Java。感覺非常奇怪,沒有初始化任何東西,所以我不確定我的代碼是否確實有意義。
測試時輸入[m1,m2] = Framing(y,16000,0.1,0.05)。
在我看來,你的方法中有很多不需要的東西,如幀移位和frameNumber。循環的目的是什麼?使用vTimeFrames來索引vSignal。 – User1551892
就像我說過的那樣,我會用for循環來看整個信號。要知道我有多少次需要轉換,我有frameNumber,它可以通過while循環來計算出來。當然,當我看着不同的細分市場時,我將不得不改變我的出發點,這就是爲什麼frameShift:for一個for循環將適用於i = 1:frameNumber(start = start + frameShift) – Nimitz14