-1
function [h,w,y,graph] = lowpassFIR(sample)

%Calculates Finite Impulse Response low pass filter coefficient
%using the windowing methods as well

passEdge = 100;
StopbandAtt = 20;
passbandRip =.05;
transWidth = 10;
Fs = sample;





%Step One: select number of coefficients%
deltaF = transWidth/Fs;

%Normalize for each window


rectN = round(0.9/deltaF);

hannN = round(3.1/deltaF);
hammN = round(3.3/deltaF);
blackN = round(5.5/deltaF);

rectN = 1:rectN

%rectPos = round(rectN/2);
%rectNeg = round((rectPos*-1));


%For the Vector Array
%rect = rectNeg:rectPos;

deltaSum= passEdge + (transWidth/2);
deltaF2= deltaSum/Fs;

h=zeros(size(1:rectN(end)));
w=zeros(size(1:rectN(end)));
y=zeros(size(1:rectN(end)));
graph = plot(y)
for i = 1:rectN(end)

   %iterate through each value and plug into function in for loop
   %each output of the function will be stored into another array
    h(i) = 2*deltaF2*(sin(i*2*pi*deltaF2))/(2*i*pi*deltaF2);   
    w(i) = 0.5 + 0.5*cos(2*pi*i/rectN(end));
    y(i) = h(i)*w(i);
    graph(i) = y(i);
end

コードから、グラフからグラフの結果を取得しようとしていることがわかります....しかし、出力すると、コマンドウィンドウで値を取得しますが、図には直線@ゼロが表示されます...どうすればよいですかここでy軸を自動スケーリングしますか??

4

1 に答える 1

0

ここでの問題は自動スケールではなく、一連のイベントだと思います。

次の行でプロットを「初期化」しようとします。

graph = plot(y);

ただし、前の行では、定義します

y=zeros(size(1:rectN(end)));

したがって、表示されるプロットは で直線になりますy=0。の値はgraphライン オブジェクトへのハンドルです。この場合は、 のラインですy=0
プロットを設定しようとした後、ループに入り、各反復でライン ハンドル ( graph(i) = y(i)) に値を追加しますが、何もプロットしません。ループ後に の値を見yたりgraph、新しい値を確認したりしても、プロットされません。
この場合、ループが必要だとは思えません。代わりにこれを試してください:

I = 1:rectN(end);
h = 2.*deltaF2.*(sin(I.*2.*pi.*deltaF2))./(2.*I.*pi.*deltaF2);   
w = 0.5 + 0.5.*cos(2.*pi.*I./rectN(end));
y = h.*w;
graph = plot(y);

要素ごとの乗算に注意することが重要です。.*

最後のコメント: イテレータとして使用しないでくださいi(さらに言えば)。Matlab では虚数単位jとしても使用されているため、コードのどこかで必要な場合に問題が発生する可能性があります。

于 2013-06-25T12:14:39.430 に答える