FFT除法复数,Java
FFT division Complex, Java
我在 matlab 文件中看到了这个。 freqz.m 文件
h = dividenowarn(fft([b zeros(1,s*nfft-nb)]),...
fft([a zeros(1,s*nfft-na)])).';
示例:
x = fft([1.5,0,1,0,0,0,1,3]')
x =
6.5000
3.6213 + 2.1213i
-0.5000 + 3.0000i
-0.6213 + 2.1213i
0.5000
-0.6213 - 2.1213i
-0.5000 - 3.0000i
3.6213 - 2.1213i
现在
y = fft([1,1,2,3,1,0,9,3]')
y =
20.0000
0.7071 + 6.2929i
-9.0000 + 5.0000i
-0.7071 - 7.7071i
6.0000
-0.7071 + 7.7071i
-9.0000 - 5.0000i
0.7071 - 6.2929i
fft 并不重要,我需要如何执行此操作..
z = (x./y)
z =
0.3250
0.3968 - 0.5309i
0.1840 - 0.2311i
-0.2656 - 0.1050i
0.0833
-0.2656 + 0.1050i
0.1840 + 0.2311i
0.3968 + 0.5309i
我需要一个算法(没有 matlab 代码),我需要一些 Java,或者逐步演算...
» a
a =
1.0000 + 2.0000i 3.0000 + 4.0000i 5.0000 + 6.0000i 0
» b
b =
5.0000 + 2.0000i 1.0000 - 2.0000i 0 0
» c = a./b
Warning: Divide by zero.
c =
0.3103 + 0.2759i -1.0000 + 2.0000i Inf + Infi NaN - NaNi
»
./
运算符执行逐元素除法。您可以从除号前的 .
看出它是一个元素级运算符。这意味着结果将是一个向量,其中包含使用规则 x[i] / y[i]
.
获得的元素
如果您想在 Java 中执行此操作,您将需要实现自己的 Complex
号码 class 编写 division code yourself, or you can use the Apache commons math Complex
class。
假设您使用 apache commons,Java 中的元素划分将如下所示:
List<Complex> elementWiseDivision(List<Complex> dividend, List<Complex> divisor)
{
if (dividend.size() != divisor.size())
{
throw new IllegalArgumentException("Must have same size");
}
List<Complex> result = new ArrayList<>();
// using iterators to get O(n) with both LinkedList and ArrayList inputs
for (Iterator<Complex> xit = dividend.iterator(), yit = divisor.iterator(); xit.hasNext();)
{
result.add(xit.next().divide(yit.next()));
}
return result;
}
我在 matlab 文件中看到了这个。 freqz.m 文件
h = dividenowarn(fft([b zeros(1,s*nfft-nb)]),...
fft([a zeros(1,s*nfft-na)])).';
示例:
x = fft([1.5,0,1,0,0,0,1,3]')
x =
6.5000
3.6213 + 2.1213i
-0.5000 + 3.0000i
-0.6213 + 2.1213i
0.5000
-0.6213 - 2.1213i
-0.5000 - 3.0000i
3.6213 - 2.1213i
现在
y = fft([1,1,2,3,1,0,9,3]')
y =
20.0000
0.7071 + 6.2929i
-9.0000 + 5.0000i
-0.7071 - 7.7071i
6.0000
-0.7071 + 7.7071i
-9.0000 - 5.0000i
0.7071 - 6.2929i
fft 并不重要,我需要如何执行此操作..
z = (x./y)
z =
0.3250
0.3968 - 0.5309i
0.1840 - 0.2311i
-0.2656 - 0.1050i
0.0833
-0.2656 + 0.1050i
0.1840 + 0.2311i
0.3968 + 0.5309i
我需要一个算法(没有 matlab 代码),我需要一些 Java,或者逐步演算...
» a
a =
1.0000 + 2.0000i 3.0000 + 4.0000i 5.0000 + 6.0000i 0
» b
b =
5.0000 + 2.0000i 1.0000 - 2.0000i 0 0
» c = a./b
Warning: Divide by zero.
c =
0.3103 + 0.2759i -1.0000 + 2.0000i Inf + Infi NaN - NaNi
»
./
运算符执行逐元素除法。您可以从除号前的 .
看出它是一个元素级运算符。这意味着结果将是一个向量,其中包含使用规则 x[i] / y[i]
.
如果您想在 Java 中执行此操作,您将需要实现自己的 Complex
号码 class 编写 division code yourself, or you can use the Apache commons math Complex
class。
假设您使用 apache commons,Java 中的元素划分将如下所示:
List<Complex> elementWiseDivision(List<Complex> dividend, List<Complex> divisor)
{
if (dividend.size() != divisor.size())
{
throw new IllegalArgumentException("Must have same size");
}
List<Complex> result = new ArrayList<>();
// using iterators to get O(n) with both LinkedList and ArrayList inputs
for (Iterator<Complex> xit = dividend.iterator(), yit = divisor.iterator(); xit.hasNext();)
{
result.add(xit.next().divide(yit.next()));
}
return result;
}