Java调用MatLab进行FFT运算及滤波

本文介绍了如何使用Java调用MatLab进行快速傅里叶变换(FFT)运算以及滤波处理。首先确保MatLab2015b与JDK1.7的兼容性,然后展示Java调用MatLab的FFT代码段和MatLab实现FFT的函数。接着,文章展示了Java获取和应用滤波器的方法,以及MatLab中生成滤波器和滤波的函数。
摘要由CSDN通过智能技术生成
1、使用MatLab2015b生成Jar包时,需要使用JDK1.7,使用1.8会报错;
2、使用MatLab做FFT运算代码
Java代码:
public double[] FFT(double[] input) {
try {
MWNumericArray para = new MWNumericArray(input, MWClassID.DOUBLE);
Object[] result = tool.FFT(1, para);
MWNumericArray b = (MWNumericArray) result[0];
return b.getDoubleData();
} catch (Exception e) {
System.out.println("FFT失败!");
}
return input;
}

MatLab代码
function [ output ] = FFT( input )
N=length(input); %样点个数
output=abs(fft(input(1:N))/N*2);%真实的幅值
end
3、使用MatLab做滤波
/**
* 生成滤波器
* @param stop
* @param pass
* @return
*/
public Object getFilter(int stop, int pass) {
try {
MWNumericArray stopA = new MWNumericArray(Double.valueOf(stop), MWClassID.DOUBLE);
MWNumericArray passA = new MWNumericArray(Double.valueOf(pass), MWClassID.DOUBLE);
Object[] result = tool.GetFilter(1, stopA, passA);
return result[0];
} catch (Exception e) {
e.printStackTrace();
System.out.println("getFilter失败!");
}
return null;
}

/**
* 滤波
* @param input
* @return
*/
public double[] Filter(double[] input) {
try {
if (filter == null) {
filter = getFilter();
}
MWNumericArray para = new MWNumericArray(input, MWClassID.DOUBLE);
Object[] result = tool.Filter(1, filter, para);
MWNumericArray b = (MWNumericArray) result[0];
return b.getDoubleData();
} catch (Exception e) {
e.printStackTrace();
System.out.println("FilterHP10失败!");
}
return input;
}

MatLab代码:
function [ output ] = GetFilter( input1,input2 )
Fs = 15625;
Fstop = input1; % Stopband Frequency
Fpass = input2; % Passband Frequency
Dstop = 0.001; % Stopband Attenuation
Dpass = 0.057501127785; % Passband Ripple
dens = 20; % Density Factor
[N, Fo, Ao, W] = firpmord([Fstop, Fpass]/(Fs/2), [0 1], [Dstop, Dpass]);
b = firpm(N, Fo, Ao, W, {dens});
output = dfilt.dffir(b);
end

function [ output ] = Filter(filterimpl, input)
output=filter(filterimpl,input);
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值